-1
編輯:我怎樣才能得到Windows標題使用processname?例如獲取當前的chrome.exe標題C++獲取Windows標題使用進程名稱
編輯:我怎樣才能得到Windows標題使用processname?例如獲取當前的chrome.exe標題C++獲取Windows標題使用進程名稱
您可以使用它的進程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)¶m_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;
}
你可以請詳細說明更多.Difficult明白你問什麼? –
「完全加載」和「GUI顯示」的定義將取決於操作系統和圖形工具包。如果您控制正在運行的程序和觀察程序的源代碼,它也會容易得多,但是如果您這樣做,您還沒有告訴我們。你沒有提供足夠的細節來回答你的問題。 – ShadowRanger
有可能使用processID獲得windows標題?我可以檢查過程是否有Windows標題,然後過程被加載,GUI是showup? – Vedbex