【发布时间】:2015-05-28 13:27:20
【问题描述】:
我正在使用 QT 检查进程是否正在运行,并且我在 msdn 站点中使用了相同的代码。
在 Visual Studio 上运行良好,但在 QT 上运行时遇到问题。
代码如下:
bool matchProcessName( DWORD processID, std::string processName)
{
TCHAR szProcessName[MAX_PATH] = TEXT(L"notepad.exe");
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}
// Compare process name with your string
bool matchFound = !_tcscmp(szProcessName, processName.c_str() );
// Release the handle to the process.
CloseHandle( hProcess );
return matchFound;
}
我得到的错误是这样的:
错误:无法将参数 '1' 的 'TCHAR*' 转换为 'const char*' 到 'int strcmp(const char*, const char*)'
如何在 QT 上完成这项工作?
非常感谢。
更新
我也试过这段代码:
DWORD FindProcessId(char* processName)
{
char* p = strrchr(processName, '\\');
if(p)
processName = p+1;
PROCESSENTRY32 processInfo;
processInfo.dwSize = sizeof(processInfo);
HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if ( processesSnapshot == INVALID_HANDLE_VALUE )
return 0;
Process32First(processesSnapshot, &processInfo);
if ( !strcmp(processName, processInfo.szExeFile) )
{
CloseHandle(processesSnapshot);
return processInfo.th32ProcessID;
}
while ( Process32Next(processesSnapshot, &processInfo) )
{
if ( !strcmp(processName, processInfo.szExeFile) )
{
CloseHandle(processesSnapshot);
return processInfo.th32ProcessID;
}
}
CloseHandle(processesSnapshot);
return 0;
}
我也收到一个错误:无法将参数 '2' 的 'WCHAR*' 转换为 'const char*' 到 'int strcmp(const char*, const char*)'
如果我可以使第二种方法起作用,我更喜欢!
再次感谢
【问题讨论】:
标签: c++ qt qt4 qt-creator