今天在寫一個模塊,具體功能是想時刻監控用戶當前活動窗口,需要獲取窗口標題以及其它相關信息,記得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); }