EDIT2:对于那些认为这是重复的人,没有这个不是。这是在不同的背景下做出的,知道一个过程是否正在运行,我不知道我需要转换到这里,马丁'给了我答案:p
编辑:找到了答案! https://stackoverflow.com/a/12637971/4908011
我在Visual Studio 2013 Deluxe中使用Windows 7。我似乎找不到任何方法来使兼容的x32控制台应用程序找到一个进程。
我需要知道某个进程是否正在运行,例如RobloxPlayerBeta.exe
。
我一直收到错误:
WCHAR *与const char *
不兼容
at' strcmp(procEntry.szExeFile,name)'
我使用的代码:
bool ProcessRunning(const char* name)
{
HANDLE SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (SnapShot == INVALID_HANDLE_VALUE)
return false;
PROCESSENTRY32 procEntry;
procEntry.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(SnapShot, &procEntry))
return false;
do
{
if (strcmp(procEntry.szExeFile, name) == 0)
return true;
} while (Process32Next(SnapShot, &procEntry));
return false;
}
答案 0 :(得分:3)
TCHAR
是一种宽字符类型,否则为窄字符类型。使用VS2013创建新项目时,它将设置为Unicode,因此TCHAR
很可能是宽字符类型。最简单的解决方案是将项目设置更改为非Unicode编译。
现在编译时,TCHAR
将被设置为一个狭窄的字符类型,您的代码应该编译。
答案 1 :(得分:2)
好吧,编译器消息很清楚:
在PROCESSENTRY32
结构中,szExeFile
的类型为tchar[]
,而您对该函数的输入为const char*
。您收到错误是因为strcmp
期望char *
而不是广角。你需要
char
转换为tchar
字符串(请参阅,例如here)tchar
字符串但是,由于您使用的是c ++,为什么不使用std::wstring
(并根据this question执行转换)