2014-10-11 140 views
0

我試圖使用SendMessage將鼠標點擊發布到背景窗口(Chrome),該窗口可以正常工作,但每次單擊後都會將窗口置於前端。有什麼辦法可以避免這種情況?在背景窗口中模擬鼠標點擊

之前有人說這是一個重複的問題,請確保其他主題實際上提到不激活目標窗口,因爲我找不到任何。

更新:啊哈,隱藏窗戶的伎倆,幾乎。它按照預期接收模擬的鼠標/鍵盤事件,並且不顯示在屏幕上。但是,我只能使用我自己的鼠標在計算機周圍導航,並且鍵盤輸入完全中斷。

所以我的問題是,如何發送消息到窗口影響其他應用程序?由於我實際上不是模擬鼠標/鍵盤事件,所以其他窗口不應該完全忽略這個嗎? 當它收到WM_LBUTTONDOWN時,是否可能與調用SetCapture的窗口有關?除了鉤住API調用(這對於這樣一個小任務來說這會非常非常醜陋),我該如何避免這種情況?

+0

爲什麼你要發送點擊Chrome呢?如果按照你所描述的那樣工作,這對我來說似乎是一個很好的安全功能。 – mvp 2014-10-12 02:28:05

+0

你正在寫一個Clicker Heroes機器人嗎? :P – Domi 2015-01-17 17:59:12

回答

0

系統提供的默認處理方式(通過DefWindowProc)會導致窗口出現在前面(點擊時)作爲對WM_MOUSEACTIVATE消息的響應,而不是WM_LBUTTONDOWN

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

Chrome的源代碼可用;我建議你看看它,看看它確實是Chrome自己做的事情。如果是這樣,那麼您能夠阻止它的唯一可行的方法(即編譯自己的Chrome版本)就是將代碼注入Chrome的進程併爲其主窗口過程的子類注入代碼。

+0

實際上,它是我嘗試點擊的Flash應用,不確定Chrome是否決定在此情況下鼠標點擊發生的情況。但從它的行爲來判斷,我幾乎可以肯定它稱之爲「SetCapture」。我會試着劫持這個功能,看看它是否有幫助。 – riv 2014-10-12 03:00:25

+0

@riv鼠標點擊必須通過Chrome才能到達您的Flash應用程序。我猜想Chrome會認爲:如果有人用瀏覽器弄虛作假,你可能想知道它。我認爲這是一個很大的安全功能。 – Domi 2015-01-17 17:58:54