例如使用CreateToolhelp32Snaoshit函数取得了进程名的PID
但是现在不知道如何通过进程名取得GetWindowThreadProcessId获取进程ID号的呢?目前问题是一个程序他没有窗口获取不到窗口句柄,只能够通过进程名来获取
进程ID号。但问题不知道该如取获取这个ID号主要是为了用SEtwindowsHOOKEX去创建线程钩子。

解决方案 »

  1.   

    到底要获取啥??通过CreateToolhelp32Snaphot遍历取得了PID,还要通过进程名取得GetWSindowThreadProcessId干吗?就是一个PID啊
      

  2.   

    #include "TLHELP32.H"
    void Fun_GettyProcessIDByName(CString strProcessName)
    {
    strProcessName.MakeUpper();
        try
        {         
            HANDLE hSnapshot = NULL;
            
            //获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
            hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            if (hSnapshot != NULL)
            {
                PROCESSENTRY32 processListStr;            
                processListStr.dwSize = sizeof(PROCESSENTRY32);
                
                BOOL bReturnValue;            
                bReturnValue = Process32First(hSnapshot, &processListStr);                     
          //      DWORD dwProcessID = processListStr.th32ProcessID;            
            //    int iThreadCnt = processListStr.cntThreads;
                
                while (bReturnValue)
                {    
    // AfxMessageBox(strProcessName);
    // AfxMessageBox(processListStr.szExeFile);
    CString szExeFile=processListStr.szExeFile;
    szExeFile.MakeUpper();
                    if (strProcessName==szExeFile)
                    {    
    wcout<<(LPCTSTR)processListStr.szExeFile<<" id="<<processListStr.th32ProcessID<<endl;
                    }                 //获得系统进程链表中下一个进程的信息
                    bReturnValue = Process32Next(hSnapshot,&processListStr);             
                }        
                CloseHandle(hSnapshot);
            }
        }
        catch (...)
        {}
    }
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    Fun_GettyProcessIDByName(TEXT("qq.exe"));
    return 0;
    }
      

  3.   


    // 说明: 判断进程是否运行
    // 参数: [1].进程名称
    // 返回值: PID.未运行则返回0
    DWORD CProcess::GetProcessID( const LPCTSTR lpcszProcName )
    {
    HANDLE handle=::CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
    PROCESSENTRY32 Info;
    Info.dwSize = sizeof(PROCESSENTRY32);
    if(::Process32First(handle,&Info))
    {
    do{
    if( _tcsicmp(Info.szExeFile, lpcszProcName) == 0 )
    {
    ::CloseHandle(handle);
    return Info.th32ProcessID;
    }
    }
    while(::Process32Next(handle,&Info)); 
    ::CloseHandle(handle);
    }
    return -1;
    }