代码之家  ›  专栏  ›  技术社区  ›  some guy who likes C

如何检查可执行文件是否在C[复制]中运行

  •  -2
  • some guy who likes C  · 技术社区  · 1 年前

    我想核实一下 helper.exe 正在运行,反之亦然。

    我要找的是这样的东西: if(not running helper.exe) { //fatal error here }

    我在用windows 除了谷歌搜索,我什么都没做,但谷歌搜索没有给我答案。

    1 回复  |  直到 1 年前
        1
  •  0
  •   greg spears    1 年前

    请注意 : 这是不可移植的窗口代码,因为OP已经标记了窗口,并告诉他正在使用窗口。

    这段代码是我刚才编译和测试的。这个 Output: 实际上是从控制台窗口复制粘贴。

    目的:查看进程是否正在运行,并返回 Process ID 并显示进程名称。在这种情况下,代码会查看是否 msedge.exe 正在运行并显示 进程ID (PID)。

    方法:搜索执行字符串的所有正在运行的进程 搜索所需的流程。

    #define _WIN32_WINNT 0x0501   /* WinXP minimum platform */
    #include <windows.h>
    #include <tlhelp32.h>
    #include <stdio.h>
    
    
    /*--------------------------------------------
        FindProcessId()
    *--------------------------------------------*/
    DWORD FindProcessId(char *processName)
    {
        PROCESSENTRY32 processInfo;
        HANDLE processesSnapshot = 
            CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    
        if ( processesSnapshot == INVALID_HANDLE_VALUE )
            return 0;
    
        processInfo.dwSize = sizeof(processInfo);
    
        Process32First(processesSnapshot, &processInfo);
    
        printf("FindProcessId(%s) comp:  %s\n",processName, processInfo.szExeFile); 
        if ( !_stricmp(processName, processInfo.szExeFile) )
        {
            CloseHandle(processesSnapshot);
            return processInfo.th32ProcessID;
        }
    
        while ( Process32Next(processesSnapshot, &processInfo) )
        {
            printf("FindProcessId(%s) comp:  %s\n",processName, processInfo.szExeFile); 
            if ( !_stricmp(processName, processInfo.szExeFile) )
            {
                CloseHandle(processesSnapshot);
                return processInfo.th32ProcessID;
            }
        }
        CloseHandle(processesSnapshot);
        return 0;
    }
    
    /*-------------------------------------
        main()
    *------------------------------------*/
    int main()
    {
        DWORD PID=0; 
        PID = FindProcessId("msedge.exe");
        printf("PID = %lu\n", PID);
        system("pause");
        return 0;
    }
    

    输出:

    
        ...
        ...
        FindProcessId(msedge.exe) comp:  svchost.exe
        FindProcessId(msedge.exe) comp:  svchost.exe
        FindProcessId(msedge.exe) comp:  splwow64.exe
        FindProcessId(msedge.exe) comp:  svchost.exe
        FindProcessId(msedge.exe) comp:  taskhostw.exe
        FindProcessId(msedge.exe) comp:  msedge.exe
        PID = 12156
        Press any key to continue . . .