2010-05-02 34 views
1

對於我的其中一個項目,我需要創建一個函數,當用戶點擊它時(窗口中顯示的任何窗口以及該窗口中的任何位置),將返回一個窗口句柄。 我知道有可能使用全局鉤子,但我認爲必須有一個更簡單的方法來做到這一點,而不使用任何DLL注入。實際上,當窗口被激活時,我可以攔截鼠標左鍵點擊或攔截。 我可以在沒有任何DLL注入的情況下使用這兩種解決方案之一嗎?如何在沒有任何DLL注入的情況下返回一個窗口的句柄?

回答

2

您可以使用LowLevelMouseProc鉤子攔截點擊,然後使用WindowFromPoint來確定窗口。 (我實際上沒有試過這個。)

+0

非常感謝您,理論上它可能會完成這項工作! 我會盡力讓你知道;) 見! – 2010-05-03 21:18:37

+0

所以,我試過你的解決方案,它像一個魅力,並沒有任何DLL的作品! 非常感謝! – 2010-05-04 21:04:54

2

致電SetCapture。當你這樣做時,所有後續的鼠標事件都會進入你自己的窗口。當您收到點擊事件時,請撥打ReleaseCapture,然後撥打WindowFromPoint以瞭解您獲得點擊事件時所處的窗口。您在點擊事件中獲得的座標將相對於您傳遞給SetCapture的窗口,請記住先將它們轉換爲屏幕座標。使用ClientToScreen

+0

這是一個更復雜的方式,但這是一個有趣的技術,非常感謝:) – 2010-05-03 21:21:05

+0

比什麼更復雜?鼠標鉤?爲了讓鼠標鉤攔截爲另一個進程綁定的消息,鉤子程序需要位於DLL中。 SetCapture的工作原理不需要單獨的模塊。 – 2010-05-03 21:51:28

+0

@DooDee:如果你想要「模態」行爲(用戶選擇一個窗口),然後嘗試Rob的解決方案;如果這是非模態的(並且您希望點擊執行其正常功能),請嘗試我上面提到的鉤子。 – jdigital 2010-05-04 18:30:17

相關問題