如何知道某个程序是否正在运行??

解决方案 »

  1.   

    CreateToolSnapShot32,ProcessNext,枚举进程,然后比较
      

  2.   

    const char DESTPROC[19] = "UserManager.exe"; // UserManager.exe是程序的进程名称
         AddPrivilege(SE_DEBUG_NAME); //提升进程DEBUG权限
    HANDLE hRemoteProcess = NULL; 
    DWORD pid = ProcessToPID(DESTPROC);//这里的pid就是我们进程PID
    // ProcessToPID函数如下:
    DWORD ProcessToPID(const char *InputProcessName) 
    //将进程名转换成进程PID的函数

    DWORD aProcesses[1024], cbNeeded, cProcesses; 
    unsigned int i; 
    HANDLE hProcess = NULL; 
    HMODULE hMod = NULL; 
    char szProcessName[MAX_PATH] = "UnknownProcess"; 
    //提升进程权限至DEBUG权限
    AddPrivilege(SE_DEBUG_NAME); 
    // 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs 
    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) 

    return 0; 

    cProcesses = cbNeeded / sizeof(DWORD); 
    // 按有效的PID遍历所有的进程 
    for ( i = 0; i < cProcesses; i++ ) 

    // 打开特定PID的进程 
    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | 
    PROCESS_VM_READ, 
    FALSE, aProcesses[i]); 
    // 取得特定PID的进程名 
    if ( hProcess ) 

    if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) 

    GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ); 
    //将取得的进程名与输入的进程名比较,如相同则返回进程PID 
    if(!stricmp(szProcessName, InputProcessName)) 

    CloseHandle( hProcess ); 
    return aProcesses[i]; 


    }//end of if ( hProcess ) 
    }//end of for 
    //没有找到相应的进程名,返回0 
    CloseHandle( hProcess ); 
    return 0; 
    }
      

  3.   

    用FineWindow(NULL,"xxxx");函数
    其中的参数xxxx是指你要找的程序的标题。
      

  4.   

    CreateToolSnapshot32比EnumProcess好用,他不用提升自身的权限。