C ++:如何检查确定的进程是否正在运行

时间:2015-05-31 11:05:31

标签: c++ windows

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;
}

2 个答案:

答案 0 :(得分:3)

如果您的程序是为Unicode编译的,则

TCHAR是一种宽字符类型,否则为窄字符类型。使用VS2013创建新项目时,它将设置为Unicode,因此TCHAR很可能是宽字符类型。最简单的解决方案是将项目设置更改为非Unicode编译。

  1. 在解决方案资源管理器窗口中右键单击项目,然后选择“属性”。
  2. 选择“配置属性”,然后选择“常规”。
  3. 将“字符集”条目从“Unicode”更改为“未设置”或“多字节”。
  4. 现在编译时,TCHAR将被设置为一个狭窄的字符类型,您的代码应该编译。

答案 1 :(得分:2)

好吧,编译器消息很清楚:

PROCESSENTRY32结构中

szExeFile的类型为tchar[],而您对该函数的输入为const char*。您收到错误是因为strcmp期望char *而不是广角。你需要

  1. char转换为tchar字符串(请参阅,例如here
  2. 将输入提供为tchar字符串
  3. 与适当的功能进行比较(参见例如here
  4. 但是,由于您使用的是c ++,为什么不使用std::wstring(并根据this question执行转换)