mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-05-07 00:14:03 +02:00
96 lines
2.1 KiB
C++
96 lines
2.1 KiB
C++
#include <codecvt>
|
|
#include <iostream>
|
|
#include <locale>
|
|
#include <string>
|
|
|
|
#ifdef _WIN32
|
|
|
|
#include <tlhelp32.h>
|
|
#include <windows.h>
|
|
|
|
#endif
|
|
|
|
// A function to check if a process is running by its name
|
|
// Bing AI generated
|
|
inline bool isProcessRunning(const std::string& name)
|
|
{
|
|
#ifdef _WIN32
|
|
// Create a snapshot of all processes
|
|
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
|
if (snapshot == INVALID_HANDLE_VALUE)
|
|
{
|
|
std::cerr << "Failed to create snapshot\n";
|
|
return false;
|
|
}
|
|
// Iterate over the processes and compare the names
|
|
PROCESSENTRY32 entry;
|
|
entry.dwSize = sizeof(entry);
|
|
if (!Process32First(snapshot, &entry))
|
|
{
|
|
std::cerr << "Failed to get first process\n";
|
|
CloseHandle(snapshot);
|
|
return false;
|
|
}
|
|
do
|
|
{
|
|
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
|
|
std::string entry_name = converter.to_bytes(entry.szExeFile);
|
|
if (name == entry_name)
|
|
{
|
|
// Found a match
|
|
CloseHandle(snapshot);
|
|
return true;
|
|
}
|
|
}
|
|
while (Process32Next(snapshot, &entry));
|
|
// No match found
|
|
CloseHandle(snapshot);
|
|
return false;
|
|
#else
|
|
throw std::logic_error("not implemented");
|
|
#endif
|
|
}
|
|
|
|
// Copilot generated
|
|
void killProcess(const std::string& name)
|
|
{
|
|
#ifdef _WIN32
|
|
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
|
if (snapshot == INVALID_HANDLE_VALUE)
|
|
{
|
|
std::cerr << "Failed to create snapshot\n";
|
|
return;
|
|
}
|
|
// Iterate over the processes and compare the names
|
|
PROCESSENTRY32 entry;
|
|
entry.dwSize = sizeof(entry);
|
|
if (!Process32First(snapshot, &entry))
|
|
{
|
|
std::cerr << "Failed to get first process\n";
|
|
CloseHandle(snapshot);
|
|
return;
|
|
}
|
|
do
|
|
{
|
|
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
|
|
std::string entry_name = converter.to_bytes(entry.szExeFile);
|
|
if (name == entry_name)
|
|
{
|
|
// Found a match
|
|
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, entry.th32ProcessID);
|
|
if (hProcess != nullptr)
|
|
{
|
|
TerminateProcess(hProcess, 9);
|
|
CloseHandle(hProcess);
|
|
}
|
|
CloseHandle(snapshot);
|
|
return;
|
|
}
|
|
}
|
|
while (Process32Next(snapshot, &entry));
|
|
// No match found
|
|
CloseHandle(snapshot);
|
|
#else
|
|
throw std::logic_error("not implemented");
|
|
#endif
|
|
}
|