环境: windows 验证的my.exe是32位程序
需要包含系统头文件
#include <windows.h>
#include <tlhelp32.h>
代码
std::wstring wProcessName = QString("my.exe").toStdWString();
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
return false;
}
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe))
{
do {
std::wstring wExeFile;
auto m_char = WcharToChar(pe.szExeFile);
CharToWchar(m_char, wExeFile);
if (wExeFile == wProcessName)
{
CloseHandle(hSnapshot);
qDebug()<<"软件还在运行";
return true;
}
} while (Process32Next(hSnapshot, &pe));
}
CloseHandle(hSnapshot);
WcharToChar
char* StringTools::WcharToChar(const wchar_t* wp)
{
char* m_char;
int len = WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), NULL, 0, NULL, NULL);
m_char = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), m_char, len, NULL, NULL);
m_char[len] = '\0';
return m_char;
}
CharToWchar
wchar_t* CharToWchar(const char* c)
{
wchar_t* m_wchar;
int len = MultiByteToWideChar(CP_ACP, 0, c, strlen(c), NULL, 0);
m_wchar = new wchar_t[len + 1];
MultiByteToWideChar(CP_ACP, 0, c, strlen(c), m_wchar, len);
m_wchar[len] = '\0';
return m_wchar;
}