今天在寫一個模塊,具體功能是想時刻監控用戶當前活動窗口,需要獲取窗口標題以及其它相關信息,記得API GetWindowText就是用來做這個的,結果試了半天,有的獲取成功了有的獲取失敗了,而且有關漢字的標題獲取不到。找了好半天資料方法都試還是行不通。最后還得仔細看MSDN,偶爾靈感突現,抱着試試的心態試一下ANSI版本的(以前一值用的是Unicode版本,感覺這兩個版本是一樣的),結果奇跡終於出現了----OK了。看來有時候還是有區別的。具體我知道的有兩種方法可以獲取窗口標題,除了上面的API,還可以向窗口發送一個WM_GETTEXT也是可以的。
下面貼出關鍵代碼:
/代碼不嚴謹,需要對返回值做判斷
while (1)
{
HWND hWindow = GetForegroundWindow();
DWORD dwProcess;
LRESULT result = 0;
DWORD dwForeID = GetWindowThreadProcessId(hWindow, &dwProcess);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcess);
WCHAR wszProcessPath[MAX_PATH] = { 0 };
DWORD dwSize = MAX_PATH;
QueryFullProcessImageNameW(hProcess, 0, wszProcessPath, &dwSize);
printf("processName:%ws\n", wszProcessPath);
CHAR wszTitle[MAX_PATH] = { 0 };
//利用window消息機制也是可以的
//result = SendMessageA(hWindow, WM_GETTEXT, MAX_PATH, (LPARAM)wszTitle);
result = GetWindowTextA(hWindow, wszTitle, MAX_PATH);
printf("title:%s \nProcessID:%d \n\n", wszTitle, dwProcess);
Sleep(1000);
}
