python調用大漠插件教程03窗口綁定實例


怎樣利用注冊好的大漠對象來綁定窗口?

直接上代碼,根據代碼分析

from win32com.client import Dispatch
import os
from win32gui import FindWindow


class Operation:

    def __init__(self, dm, hwnd):
        self.dm = dm
        self.hwnd = hwnd
        self.dm.Reg('注冊碼', '')
        print(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 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


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

首先想要綁定窗口需要先找到要綁定的窗口,那么怎么找到要綁定的窗口?

這需要用到pywin32庫的Findwindow函數(python最好使用32位版本,否則會出現一些不為人知的問題,若64位沒問題,請忽略)(大漠自帶的也有尋找窗口的函數,本文只介紹這個,對大漠找窗口函數感興趣的可以自行研究,大同小異)

此函數尋找窗口有兩個參數,一個是窗口類名,另一個是窗口內容,一般只填窗口類名就可以了。如果此類中有很多窗口那就需要用內容進行篩選。

此函數的返回值若尋找到窗口就返回窗口句柄,未找到則返回0,如果找到多個窗口則返回一個列表,元素為窗口的句柄。

上述代碼主函數的第一行以記事本為類名尋找了記事本窗口的句柄,即為變量window_id。

 

主函數第二行利用regsvr()實例化了一個大漠對象,即為變量dm_main。

主函數第三行實例化了一個自己創建的Operation類,將兩個需要的參數都傳給這個類,實力后的類為operation。也是這個博客的重點。

 

先總體分析一下Operation類,開始時一個構造函數,隨后是一個交bind的綁定函數,在構造函數中調用綁定函數,則在實例化該類時就會執行目前該類的所有代碼(屬於python基礎,不過多解釋)

其次逐行分析代碼(一目了然的跳過)dm.Reg函數是大漠插件的付費密碼,第一個填自己的注冊碼,第二個填入自己的備注(沒有則不填),此函數在調用大漠插件的方法之前必須使用。

 隨后是dm.Ver()函數,返回大漠插件的版本,輸出方便查看是否正確(方便調試)

 

下面開始講bind()函數里的方法。

這里基本上都是一些大漠的內部函數,至於函數的功能及用法,在 大漠插件接口說明 中已經說的是非常詳細了,這里主要介紹這幾個自己寫代碼中常用到的函數,方便大家剛接觸大漠找到重點。

dm.BindWindowEx(self.hwnd, "normal", "normal", "normal", "", 0)綁定窗口函數。
dm.SetSimMode(0)設置鼠標的前台模擬方式,有需求的話可以切換。
dm.EnableRealKeypad(1)設置鍵盤的仿真,即按下按鍵和放開按鍵的間隔隨機而定(有函數作用范圍,現在未講,可以忽略)。
dm.EnableRealMouse(2, 20, 30)設置鼠標的仿真,鼠標動作模擬真實操作,帶移動軌跡,以及點擊延時隨機。
dm.SetKeypadDelay("normal", 70)設置鍵盤按下放松的隨機區間。
dm.SetClientSize(self.hwnd, 596, 446)設置窗口內容區域大小(什么是窗口內容區?就是除去窗口上面顯示窗口類名和關閉窗口的條形剩下的區域)。
dm.GetClientSize(self.hwnd)獲取窗口內容區域大小。


上面是綁定窗口前需要初始化的一些常用函數,如果運行成功,輸出了綁定成功說明使用大漠插件的第一步已經做到了(如下所示)。

 

 備注:直接復制代碼需要考慮路徑問題,根據自己的路徑自行修改,最好是用相對路徑,把dm.dll放在自己的項目文件夾里。(大漠插件接口說明文檔使用大漠的話完整插件自帶)


附加:
如果無法觸發鍵盤事件或是觸發鍵盤事件不是綁定的窗口,那就在調用鍵盤事件之前激活一下窗口(參考SetWindowState函數)
 
 
 
 


免責聲明!

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



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