python調用大漠插件教程04鼠鍵事件示例


from win32com.client import Dispatch
import os
from random import uniform
from time import sleep


class Operation:

    def __init__(self, dm, hwnd):
        self.dm = dm
        self.hwnd = hwnd
        self.dm.Reg('vacation6c113ef949e77e259bfadb84959f6cbc', '')
        self.dm.Ver()
        self.bind()

    def bind(self):
        self.dm.BindWindowEx(self.hwnd, "normal", "normal", "normal", "", 0)
        self.dm.SetSimMode(0)
        self.dm.EnableRealKeypad(1)
        self.dm.EnableRealMouse(2, 20, 30)
        self.dm.SetKeypadDelay("normal", 70)
        self.dm.SetClientSize(self.hwnd, 596, 446)
        print(self.dm.GetClientSize(self.hwnd))
        print('綁定成功')

    def getwindowsize(self):
        ret = self.dm.GetClientSize(self.hwnd)
        self.width, self.height = ret[1], ret[2]
        print(self.width, self.height)

    def leftclick(self, xf, yf, ran_x, ran_y, delay=uniform(0.3, 0.5)):
        x = xf + uniform(0, ran_x)
        y = yf + uniform(0, ran_y)
        self.dm.MoveTo(x, y)
        self.dm.LeftClick()
        sleep(delay)

    def keypress(self, n):
        self.dm.KeyPress(n)

    def keyup(self, n):
        self.dm.KeyUp(n)

    def keydown(self, n):
        self.dm.KeyDown(n)


def regsvr():
    try:
        dm_1 = Dispatch('dm.dmsoft')
    except Exception:
        os.system(r'regsvr32 /s %s\dm.dll' % os.getcwd())
        dm_1 = Dispatch('dm.dmsoft')
    print(dm_1.Ver())
    return dm_1

直接分析代碼,代碼是上一篇博客的拓展,基本上只在Operation類里添加了幾個鼠鍵方法,同時將主函數轉移到了另一個代碼文件中。

getwindowsize()獲取屏幕的長寬(暫時沒有用到)

leftclick()將鼠標移動到指定位置並點擊,傳遞的參數有4-5個,前兩個是xy坐標后兩個是xy坐標的偏移量,沒有也要填0,最后一個是點擊過后休息(默認為0.3-0.5秒),也可以手動傳入。

keypress()按下后立馬放開某鍵,這個間隔和是否設置隨機時間有關,默認值也和綁定窗口鍵盤的模式有關(SetKeypadDelay("normal", 70))

keyup()按下某鍵不松

keydown()松開某鍵

后三個關於鍵盤的函數都需要傳入一個鍵盤碼(int類型),在綁定測試工具中的鍵盤測試頁面可以找到。
以上代碼為dmMain.py文件中,下面這段代碼是另一個文件test.py文件。

from dmMain import Operation
from win32gui import FindWindow
from dmMain import regsvr


def close_txt_1(operation_1):
    # 隨便點擊兩次觀察光標
    operation_1.leftclick(100, 10, 5, 5)
    operation_1.leftclick(100, 180, 5, 5)


def close_txt_2(operation_1):
    # 組合鍵  按下alt(不松) 然后按下f(松)  接着按下x(松) 松開alt
    operation_1.keydown(18)
    operation_1.keypress(70)
    operation_1.keypress(88)
    operation_1.keyup(18)


if __name__ == '__main__':
    window_id = FindWindow('Notepad', None)
    dm_main = regsvr()
    operation = Operation(dm_main, window_id)
    close_txt_1(operation)
    # close_txt_2(operation)

這段代碼中有兩個函數,

第一個函數是隨便點擊記事本中的內容觀察光標閃爍的位置,如果位置變換則鼠標事件響應(此時注釋掉了調用第二個關閉記事本函數的語句便於觀察)。

第二個則是使用鍵盤的簡捷鍵關閉記事本的函數(處於被注釋狀態)。如果取消注釋,運行后記事本關閉則鍵盤事件響應了。

 

 圖為一個項目的文件  可供參考。在test.py文件中使用了

from dmMain import regsvr

from dmMain import Operation

兩行代碼將dmMain.py的所有功能引入。

為什么要這么做?
如果要用dm做出一個成型的腳本,如果都放在一個py文件里會顯得很亂。


注意:
1.上面的代碼中封裝的函數很簡單只供示范和測試,不同人可以根據需要自己封裝比較復雜的函數
2.代碼中使用的是前台鼠標模式,如果有需要可以在綁定窗口時改成后台鼠標模式(不過好像記事本並不支持后台鼠標模式,本人也沒有測試完全,有待考證)
3.在鼠鍵事件響應后盡量加上一個休息時間(sleep),否則執行太快容易造成相應失靈的后果

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM