我在嘗試讓WarpPointer適合我時遇到了一些麻煩。我試圖做的場景類似於錄製用戶的點擊,然後在屏幕上重播它們。我能夠無任何問題地記錄屏幕動作和點擊;然而,當我們重播用戶錄製的內容時,我感到非常沮喪。wxpython:將光標設置爲絕對屏幕位置並單擊
def MoveCursorAndClick(self, e):
# get the current screen position
sp = self.GetPosition()
p = self.getNextPosition() # returned in absolute x,y from screen rec
self.WarpPointer(p.x - sp[0], p.y - sp[1])
# wx.PostEvent(EVT_LEFT_DOWN, self.GetId())
顯然,上面的代碼不正確,因爲WarpPointer出現在窗口,而不是全屏幕範圍內工作。試圖將協調關閉的功能窗口證明是麻煩的,因爲它們總是在Y方向上偏離約50 pix。我目前唯一的假設是,我正在努力做到這一點,因爲我對wxpython的經驗不足,所以我沒有看到更好的結果。
此外,搗毀的PostEvent線是我設法橫跨Google的唯一東西,看起來像將鼠標點擊發送到可能是或可能不是另一個窗口的東西是正確的。這是否是正確的方向?
更新 如下所述,沒有一個很好的跨平臺方式來實現這一點。這是我沒有(發現互聯網上的各種地方):
def ClickScreenPositon(self, x, y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
我嘗試了這兩種方法,但沒有成功。可悲的是,你是正確的,因爲沒有任何好的X平臺方法來做到這一點。這是我最終做的事情(在互聯網上發現了其他幾個地方): def click(self,x,y): win32api.SetCursorPos((x,y)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x, y,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0) – Wyatt
對不起,我忍不住。我很高興你能找到可行的東西,即使它不是跨平臺的。 – acattle
有時候...這只是可悲的方式。但也許一些冒險的程序員將使其未來的使命:) – Wyatt