2012-04-26 67 views
1

當我想單擊Windows上的「開始」按鈕時,下面的腳本完美工作,但當我嘗試單擊某個GUI程序中的按鈕時,它沒有任何影響。鼠標單擊命令在某些GUI上不起作用

該程序是否可能禁用了虛擬鼠標點擊? 如果是這樣,我可以繞過這個嗎?

import win32api, win32con 
Po=win32api.GetCursorPos() 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,Po[0],Po[1],0,0) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,Po[0],Po[1],0,0) 

回答

1

mouse_event(和SendInput,這是用於輸入的首選API)有一些棘手位,這是一個好主意, read the MSDN page for mouse_event充分和仔細usi之前請注意小字體:特別是,x和y的值不是而是像素,因此您不能只輸入您從GetCursorPos獲得的值。

剛剛發生的事情是,0,0是左下角,所以靠近左下角的點大致位於屏幕的同一區域,但距離越遠,像素值越分散從該API使用的實際單位開始:所以它可能看起來適用於開始按鈕附近的位置(假設它位於屏幕的左下角),但對於其他值,它可能似乎在其他位置點擊,這聽起來很相似到你所看到的。

從MSDN:

DX [IN]
類型:
生成鼠標的沿着x軸或它的自上次鼠標事件運動量絕對位置DWORD,這取決於設置MOUSEEVENTF_ABSOLUTE。絕對數據被指定爲鼠標的實際x座標;相對數據被指定爲移動的mickeys數量。 mickey是鼠標爲了報告它已經移動而必須移動的量。

因此,首先,您需要MOUTEVENTF_ABSOLUTE標誌。但是,這還不是全部:

備註
... 如果指定MOUSEEVENTF_ABSOLUTE值, dx和dy包含在0到65,535之間的標準絕對座標。事件過程將這些座標映射到顯示錶面上。座標(0,0)映射到顯示錶面的左上角,(65535,65535)映射到右下角。

...因此,您需要在將它們傳遞給此API之前適當縮放目標座標。

1
由程序生成的

鼠標事件有一個「注入」的屬性,如果他們需要的應用程序可以過濾 - 例如MMO客戶經常過濾那些以避免機器人

在這些零mouse_event讓你設置一些屬性,你可能想研究,如果這些會讓你克服注入的標誌,但我不能立即找到方式

相關問題