2010-01-26 163 views
1

我想在所有當前窗口上捕獲WM_SETFOCUS消息。 最好的辦法是做什麼。陷阱WM_SETFOCUS消息

我覺得SetWidnwosHookEx可以用於此目的。它可以與WH_CALLWNDPROC或WH_MSGFILTER一起使用嗎?

另外它提到鉤子程序必須在單獨的dll中。是否需要。 我可以在安裝鉤子的相同dll中沒有鉤子程序。

回答

1

是的,你可以在安裝鉤子的同一個DLL鉤PROC。我相信,你在談論的要求與你在另一個進程中設置窗口鉤子有關。

我不熟悉WH_CALLWNDPROC掛鉤類型,但我相信你可以使用WH_CBT,它被描述爲對「基於計算機的培訓」應用程序很有用,但似乎也有一些非常有用的功能。一方面,這是通知有關的事件是:

HCBT_SETFOCUS
窗口是要接收鍵盤焦點。

1

一個鉤子proc必須在一個DLL中,但它不必是一個不同於你用來安裝鉤子的DLL。文檔提到「單獨的dll」的原因是因爲他們認爲安裝鉤子的代碼將在exe文件中,而不是dll。

一個WH_CALLWNDPROC鉤子應該看到WM_SETFOCUS消息,我不希望一個WH_MSGFILTER掛鉤,看到他們,但我不知道。

你應該知道,如果你打算吃WM_SETFOCUS消息,這不會阻止焦點被設置到窗口。

無論你的問題是,一個窗口鉤子是很少的最佳解決方案。如果你對你想要做的更具體,我們可能會更有幫助。

+0

雖然我從來沒有親自使用它,關注CBTProc文檔狀態可以停止對HCBT_SETFOCUS N-代碼。我同意,雖然它似乎有點霸道,並不是像平板電腦輸入面板的工作方式。 – Josh 2010-01-26 09:37:44

+0

是的,CBT掛鉤是一種特殊情況。他們是爲了「基於計算機的培訓」,所以理論上你想讓計算機有時假裝成爲用戶,並監視用戶的行爲 - 他們基本上把整個系統變成了一種單線程模式,然後允許鉤子嚴重地弄亂東西。 – 2010-01-26 09:56:46