我設置與SetWindowsHookEx
一個低級別鼠標鉤子:低級別鼠標和鍵盤鉤子回調在哪個線程中運行?
HANDLE handle = SetWindowsHookEx(WH_MOUSE_LL,
&callback,
GetModuleHandle(NULL),
NULL);
因爲這是一個低級別的回調,將我自己的進程中執行;沒有執行DLL注入。
現在,我注意到有時(間接)從標準API函數(如GetAncestor
,GetWindowRect
等)調用回調。看起來這些可能導致一些消息隊列被刷新。
其實,我的問題是三倍......
當調用的回調?
是否可以從以內調用任何 API函數?我如何看?
執行回調的線程是什麼?
它只能在安裝鉤子的線程上運行,或者系統可以在任何線程上調用它嗎?
爲什麼首先將鉤子實現爲回調?
(請問Raymond Chen是否在這裏閒逛?)對於我來說,將鉤子簡單地作爲(發送)消息來實現似乎更加明智,就像幾乎所有其他Windows一樣。對於消息,至少我知道哪些函數會導致待處理的已發送消息被處理(
GetMessage
,PeekMessage
和其他幾個),並且我會知道它們在哪個線程上被處理(首先收到消息的線程) 。
如果你能原諒我,我會把頭撞在牆上一會兒。非常感謝! – Thomas 2010-01-14 21:18:12
我的問題是「爲什麼他們對WH_MOUSE_LL和WH_MOUSE有不同的行爲?」 (一個需要一個dll,運行在應用程序線程中,一個可以在一個exe文件中,在它自己的線程中)像...這是爲了讓我們更容易,但它只是針對那些特定的事件,呵呵? – rogerdpack 2013-09-10 20:10:31
@rogerdpack:這大多與原始問題無關,您應該發佈您自己的問題。 – 2013-09-10 20:47:48