python實現類比滑鼠代碼
來源:互聯網
上載者:User
python實現類比滑鼠代碼作者: 笑嘻嘻 日期: 2010-11-13 15:34字型大小: 小 中 大沒有任何經驗,網上找的代碼自己在拼湊。python預設是沒有安裝pywin32的,需要下載。http://sourceforge.net/projects/pywin32/ 說一下環境吧,某棋牌遊戲大廳的五子棋。想實現滑鼠類比點擊開始按鈕。最終是想類比實現下棋,也就是外掛啦。一步步來吧。誰讓技術不行呢,只能摸索了。 中間遇到的問題: 1、win32gui.FindWindow('HGE__WNDCLASS', "五子棋".encode("gbk")); 這裡的漢字需要轉一下編碼,windows預設使用的gbk,而我編寫代碼習慣使用utf8,網上很多教程都沒有說,運行到這裡就出錯了。 2、原本是想直接給表單發送一個滑鼠點擊訊息的,可以不管用。需要想把滑鼠移動到指定座標才行。原因猜測這些確定按鈕其實不是很什麼表單控制項,就是塊圖片。我用spy++也取不到任何控制代碼。僅僅能取道表單一個控制代碼,根本選擇不到確定按鈕。表單負責了響應滑鼠事件,然後判斷了當前滑鼠的位置,然後內部計算確定使用者是點擊那部分,並執行對應的事件。 #-*- coding:utf-8 -*-'''Created on 2010-10-13@author: niming'''import win32apiimport win32guiimport win32conimport timeclass Gobang: #確定按鈕座標 confirmPos = (505,675); #五子棋棋盤座標 #初始化,找到五子棋視窗的控制代碼 def __init__(self): #找到五子棋程式並開啟對應進程 try: self.gobangHandle = win32gui.FindWindow('HGE__WNDCLASS', "五子棋".encode("gbk")); win32gui.SetForegroundWindow(self.gobangHandle) time.sleep(0.5) except: win32api.MessageBox(0, "請先運行五子棋程式".encode("gbk"), "錯誤!".encode("gbk"), win32con.MB_ICONERROR) exit(0) #類比滑鼠點擊 先將滑鼠移動到按鈕位置,然後發送單擊訊息然後移動到原來的位置,速度很快使用者感覺不到滑鼠移動 def click(self, client_pos): oldCursorPos = win32gui.GetCursorPos() self.moveCursor(client_pos) #拼接滑鼠位置座標 tmp = win32api.MAKELONG(client_pos[0], client_pos[1]) #發送單擊命令 win32gui.SendMessage(self.gobangHandle, win32con.WM_ACTIVATE, win32con.WA_ACTIVE, 0) win32api.SendMessage(self.gobangHandle, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, tmp) win32api.SendMessage(self.gobangHandle, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, tmp) time.sleep(0.1) #移動滑鼠到原來的座標 win32api.SetCursorPos(oldCursorPos) #移動滑鼠到指定位置,是相對於五子棋視窗的座標 def moveCursor(self, client_pos): screen_pos = win32gui.ClientToScreen(self.gobangHandle, client_pos) win32api.SetCursorPos(screen_pos) gobang = Gobang()gobang.click(gobang.confirmPos)