2017-08-11 32 views
-1

編輯:我怎樣才能得到Windows標題使用processname?例如獲取當前的chrome.exe標題C++獲取Windows標題使用進程名稱

+1

你可以請詳細說明更多.Difficult明白你問什麼? –

+0

「完全加載」和「GUI顯示」的定義將取決於操作系統和圖形工具包。如果您控制正在運行的程序和觀察程序的源代碼,它也會容易得多,但是如果您這樣做,您還沒有告訴我們。你沒有提供足夠的細節來回答你的問題。 – ShadowRanger

+0

有可能使用processID獲得windows標題?我可以檢查過程是否有Windows標題,然後過程被加載,GUI是showup? – Vedbex

回答

0

您可以使用它的進程ID來獲得特定窗口的標題。

如果您知道執行文件的名稱(例如:Chrome.exe),您可以通過FindWindowEX()得到Handle,或者通過CreateToolHelp32Snapshot獲得PID「Chrome.exe」。

然後使用EnumWindows使用HANDLE獲取HWND。

struct param_enum 
{ 
    unsigned long ulPID; 
    HWND hWnd_out; 
}; 

HWND find_specific_window(unsigned long process_id) 
{ 
    param_enum param_data; 
    param_data.ulPID = process_id; 
    param_data.hWnd_out = 0; 
    EnumWindows(enum_windows_callback, (LPARAM)&param_data); 
    get_window_title(process_id, param_data.hWnd_out); 
    return param_data.hWnd_out; 
} 

BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam) 
{ 
    param_enum& param_data = *(param_enum*)lParam; 
    unsigned long process_id = 0; 
    GetWindowThreadProcessId(handle, &process_id); 
    if (param_data.ulPID != process_id) 
    { 
     return TRUE; 
    } 
    param_data.hWnd_out = handle; 

    return FALSE; 
} 

--------------------------- Get Handle -------------- -------------

HANDLE GetHandleFromProcessPath(TCHAR* szExeName, DWORD& dwPID) 
{ 
    HANDLE hExeName = INVALID_HANDLE_VALUE; 
    HANDLE hSnap = INVALID_HANDLE_VALUE; 
    PROCESSENTRY32 pe32; 
    pe32.dwSize = sizeof(PROCESSENTRY32); 

    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

    if (INVALID_HANDLE_VALUE != hSnap) 
    { 
     if (Process32First(hSnap, &pe32)) 
     { 
      do 
      { 
       //!!! Attention pe32.szExeFile always return exe file name. not window title. 
       if (NULL != _tcsstr(pe32.szExeFile, szExeName)) 
       { 
        hExeName = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pe32.th32ProcessID); 
        dwPID = pe32.th32ProcessID; 
        break; 
       } 
      } while (Process32Next(hSnap, &pe32)); 
     } 
    } 


    return hExeName; 
}