簡體   English   中英

模擬鼠標在后台窗口中的單擊

[英]Simulate mouse click in background window

我正在嘗試使用SendMessage將鼠標單擊發布到后台窗口(Chrome),該窗口工作正常,但每次單擊后都將窗口置於最前面。 有什么辦法可以避免這種情況?

在任何人說這是重復的問題之前,請確保另一個主題實際上提到未激活目標窗口,因為我找不到任何內容。

更新:啊哈,隱藏窗口幾乎可以解決問題。 它會按預期接收模擬的鼠標/鍵盤事件,並且不會顯示在屏幕上。 但是,我幾乎無法使用自己的鼠標來瀏覽計算機,並且鍵盤輸入已完全中斷。

所以我的問題是,向窗口發送消息如何影響其他應用程序? 由於我實際上並不是在模擬鼠標/鍵盤事件,因此其他窗口不應該完全忽略嗎? 它在收到WM_LBUTTONDOWN時可能與調用SetCapture的窗口有關? 除了掛接API調用(對於這么小的任務而言,這非常丑陋)之外,我又如何避免這種情況?

系統提供的默認處理(通過DefWindowProc )使窗口位於最前面(單擊時),作為對WM_MOUSEACTIVATE消息而不是WM_LBUTTONDOWN的響應。

Chrome響應WM_LBUTTONDOWN處於最前面的事實表明,這是Chrome專門在做的事情,而不是您可能可以通過某種方式阻止的默認系統行為。

Chrome的源代碼可用。 我建議您看看它,看看它是否確實是Chrome本身正在做的事情。 如果是這樣,您能夠阻止它的唯一實用方法(缺少編譯自己的Chrome版本)是將代碼注入Chrome的進程中,並將其主窗口過程子類化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM