我寫了一些代碼來觀察窗口標題的變化。它工作正常,在我的Windows 7不同的窗口我用SetWinEventHook這樣的:用SetWinEventHook連接一個窗口有時不起作用
SetWinEventHook(EVENT_OBJECT_NAMECHANGE,
EVENT_OBJECT_NAMECHANGE,
0,
WinEventCallback,
processId,
threadId,
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS | WINEVENT_SKIPOWNTHREAD);
回調:
void CALLBACK WinEventCallback(HWINEVENTHOOK hWinEventHook,
DWORD dwEvent,
HWND hwnd,
LONG idObject,
LONG idChild,
DWORD dwEventThread,
DWORD dwmsEventTime)
{
qDebug("Window %p", hwnd);
...
GetWindowText(hwnd, ...);
}
對於一個特定的窗口,我看到調試信息「窗口中爲0x0」所有的時間,例如我在回調中將窗口句柄設置爲零。在這種情況下GetWindowText失敗。所有其他窗口都能正常工作問題是爲什麼?我沒有看到任何的間諜++非凡:
>它不是一個真正的窗口 我可以看到它:
通過使用該一個修復它Spy ++,這是帶標題,類等的常規WIn32窗口(參見截圖)。這對我來說很奇怪,我得到NULL。 – DmitryARN
該應用程序使用WinForms,它處理UI的方式與標準的Win32 UI非常不同。也許WinForms在調度事件時不提供HWND,或者鉤子調度程序根本不支持WinForms。其他工作窗口是否也使用WinForms? –
_Do其他工作窗口也使用WinForms?_ 是的,來自同一應用程序的其他窗口工作正常。對於那個窗口,我看到消息WM_SETTEXT失敗(在Spy ++中右擊 - >消息)。這意味着該窗口忽略WM_SETTEXT並以不同的方式設置窗口標題SOMEHOW。 – DmitryARN