Loading

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函数)
 
 
 
 
posted @ 2020-05-30 21:36  国家三级保护废物  阅读(5056)  评论(0编辑  收藏  举报