繁体   English   中英

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

[英]C++: How to check if a determined process is running

EDIT2:对于那些认为这是重复的人,不,不是。 这是在不同的上下文中进行的,知道是否正在运行某个进程,并且我不知道需要转换,直到这里“马丁”给我答案了:p

编辑:找到答案! https://stackoverflow.com/a/12637971/4908011

我正在使用Windows 7和Visual Studio 2013 Deluxe。 我似乎找不到任何使兼容的x32控制台应用程序找到进程的方法。

我需要知道某个进程是否正在运行,例如RobloxPlayerBeta.exe

我不断收到错误:

WCHAR *与const char *不兼容

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

如果您的程序是针对Unicode编译的,则TCHAR是宽字符类型,否则是窄字符类型。 使用VS2013创建新项目时,会将其设置为Unicode,因此TCHAR很可能是宽字符类型。 最简单的解决方案是更改项目设置,以针对非Unicode进行编译。

  1. 在解决方案资源管理器窗口中右键单击项目,然后选择“属性”。
  2. 选择“配置属性”,然后选择“常规”。
  3. 将“字符集”条目从“ Unicode”更改为“未设置”或“多字节”。

现在编译时, TCHAR将被设置为窄字符类型,并且您的代码也应编译。

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

PROCESSENTRY32结构中, szExeFile的类型为tchar[]而您对该函数的输入为const char* 您收到错误,因为strcmp期望使用char *而不是宽字符。 你需要

  1. char转换为tchar字符串(例如,参见here
  2. 提供输入为tchar字符串
  3. 与适当的功能进行比较(例如,参见此处

但是,由于您使用的是c ++,为什么不使用std::wstring (并根据此问题执行转换)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM