對於我的其中一個項目,我需要創建一個函數,當用戶點擊它時(窗口中顯示的任何窗口以及該窗口中的任何位置),將返回一個窗口句柄。 我知道有可能使用全局鉤子,但我認爲必須有一個更簡單的方法來做到這一點,而不使用任何DLL注入。實際上,當窗口被激活時,我可以攔截鼠標左鍵點擊或攔截。 我可以在沒有任何DLL注入的情況下使用這兩種解決方案之一嗎?如何在沒有任何DLL注入的情況下返回一個窗口的句柄?
回答
您可以使用LowLevelMouseProc鉤子攔截點擊,然後使用WindowFromPoint來確定窗口。 (我實際上沒有試過這個。)
致電SetCapture
。當你這樣做時,所有後續的鼠標事件都會進入你自己的窗口。當您收到點擊事件時,請撥打ReleaseCapture
,然後撥打WindowFromPoint
以瞭解您獲得點擊事件時所處的窗口。您在點擊事件中獲得的座標將相對於您傳遞給SetCapture
的窗口,請記住先將它們轉換爲屏幕座標。使用ClientToScreen
。
這是一個更復雜的方式,但這是一個有趣的技術,非常感謝:) – 2010-05-03 21:21:05
比什麼更復雜?鼠標鉤?爲了讓鼠標鉤攔截爲另一個進程綁定的消息,鉤子程序需要位於DLL中。 SetCapture的工作原理不需要單獨的模塊。 – 2010-05-03 21:51:28
@DooDee:如果你想要「模態」行爲(用戶選擇一個窗口),然後嘗試Rob的解決方案;如果這是非模態的(並且您希望點擊執行其正常功能),請嘗試我上面提到的鉤子。 – jdigital 2010-05-04 18:30:17
- 1. 如何在沒有窗口句柄的情況下使用RegisterDeviceNotification?
- 2. 如何在沒有彈出窗口的情況下返回上一個視圖
- 3. 如何在沒有窗口句柄的情況下訪問窗口類的額外內存?
- 4. 如何在沒有gacutil的情況下注冊64位DLL
- 5. 在沒有顯式返回語句的情況下返回一個值
- 6. 如何在沒有按「返回」按鈕的情況下退回
- 7. MoveWindow返回「無效的窗口句柄」
- 8. 如何在沒有窗口的情況下運行Phaser引擎?
- 9. 如何在沒有窗口的情況下繪製文本
- 10. 如何在沒有窗口的情況下使用tkinter filedialog
- 11. Scanner.equals()返回在任何情況下
- 12. 如何在沒有條件的情況下讓查詢返回任何內容?
- 13. 如何在沒有標題欄的情況下激活一個窗口
- 14. 如何在沒有有效計算的情況下返回一個Eff monad?
- 15. 如何在沒有IO窗口(命令行窗口)的情況下運行EXE?
- 16. 如何在沒有if語句的情況下返回可選的<T>?
- 17. 如何在沒有PreparedStatements的情況下避免SQL注入
- 18. PostGIS:在沒有AddGeometryColumn的情況下注冊一個「幾何」列
- 19. 如何在沒有LoadSelect的情況下返回asQueryable?
- 20. 如何在沒有繼承句柄的情況下進行分支處理?
- 21. 如何在沒有任何公共成員的情況下引用dll?
- 22. 如何在有多個IF語句的情況下返回1個字符串
- 23. 如何在沒有任何窗口或任務欄的情況下獲得桌面的打印屏幕?
- 24. 如何在沒有dll的情況下訪問配置文件?
- 25. 如何在沒有dll的情況下編譯GNU sed?
- 26. 我如何在沒有Google Dll的情況下驗證Gmail API
- 27. 如何在沒有System.Web dll的情況下進行UrlDecode編程#
- 28. 如何在我的情況下返回一個對象?
- 29. SQL Server的情況下,當沒有行返回時,返回一個值時,SQL Server的情況下
- 30. 在沒有任何DI庫的情況下使用依賴注入
非常感謝您,理論上它可能會完成這項工作! 我會盡力讓你知道;) 見! – 2010-05-03 21:18:37
所以,我試過你的解決方案,它像一個魅力,並沒有任何DLL的作品! 非常感謝! – 2010-05-04 21:04:54