检查一个特定进程是否在带有C的Windows上运行

在psapi或windows.h中是否有任何函数可以通过进程名称(例如:“chrome.exe”)运行,而不需要获取所有进程.

编辑:

如果任何人需要通过运行所有进程列表来获取所需的进程信息,我可以在此处粘贴我的代码.它适用于xp机器并使用vs 2008编译.

我也为我的问题找到了解决方案!但是根据msdn,该函数已经通过进程运行并检查没有扩展名的名称.不久,它搜索“chrome”并返回chrome列表.*

这个函数一个很好的优点,它返回列表中的进程,它可能是一个exe可能与may实例一起运行.缺点CLR是必需的,它运行速度比psapi函数慢,并且它有额外的转换要求,例如String ^ to wchar或String(我没有测试过)

解决方法:

上面的答案适用于win 8.这里没有wstring的东西并且剥离了路径

#include <tlhelp32.h>
DWORD FindProcessId(char* processName)
{
    // strip path

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

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...