在windows nt系统上,如何才能找到某一指定程序的进程句柄。

解决方案 »

  1.   

    什么意思?通过什么来找?
    某一指定程序,怎么个指定法?
    EnumProcesses可以得到正在运行的所有进程。
      

  2.   

    DWORD aProcesses[1024], dwSize, dwSize2; 
    char szProcessName[MAX_PATH] = "unknown"; 
    char MyProcessName[MAX_PATH] = "Test.exe";//用实际文件名代替
    unsigned int i; 
    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &dwSize ) ) 
    return FALSE; 
    dwSize2 = dwSize / sizeof(DWORD); 
    for ( i = 0; i < dwSize2; i++ ) 
    {
    //取得进程的句柄 具体参见msdn
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | 
    PROCESS_VM_READ, FALSE, aProcesses[i] ); 
    //取得进程名称 
    if ( hProcess ) 

    HMODULE hMod; 
    DWORD dwSize; 
    if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
    &dwSize) ) 
    GetModuleBaseName( hProcess, hMod, szProcessName, 
    sizeof(szProcessName) ); 
    if (strcmp(szProcessName,MyProcessName))
    {
    CurProID = aProcesses[i];
    break;
    }


    CloseHandle( hProcess ); 
    }
      

  3.   

    HANDLE GetCurrentProcess(VOID)
      

  4.   

    zhou80bin(彬彬)所说的是一种方法,不过它只能用于win2k!
    还有两种方法就是:Toolhelp(in win9x) and psapi(in win2k)
      

  5.   

    //Toolhelp方法(9x/nt/2k)int GetProcessStatus(LPCTSTR lpProcessName, PROCESSINFO32 psInfo[])
    {
    //use toolhelp32
    int m_nCount = 0;
    HANDLE hSnapShot;

    PROCESSENTRY32 pEntry;
    pEntry.dwSize = sizeof(pEntry);
    BOOL hRes = FALSE;
    volatile BOOL Found = FALSE; hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
    Process32First(hSnapShot, &pEntry); while(1)
    {
    hRes = Process32Next(hSnapShot, &pEntry);
    if (hRes == FALSE){
    Found = FALSE;
    break;
    } if (0 == strcmp(lpProcessName, pEntry.szExeFile)){
    //Found = TRUE;
    //通过GetModuleBaseName得到进程的全路经,与配置信息比较
    psInfo[m_nCount].m_dwProcessID = pEntry.th32ProcessID;
    psInfo[m_nCount].m_dwThreads = pEntry.cntThreads;
    strcpy(psInfo[m_nCount].m_szName, pEntry.szExeFile);
    m_nCount++;
    }
    }
    return m_nCount;
    }
      

  6.   

    用FindWindow查找那个窗口的名字,返回句柄