• 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 %sdm.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函数)
     
     
     
     
  • 相关阅读:
    关于开发 Web AI 的思考(kendryte K210)
    怪不得我说,这几个月的代码数据都跑哪里去了....
    在 Android 上使用蓝牙作为主机进行一对多从机传输数据的实测,理论 5
    写了一下 micropython 的文件系统单元测试
    mark 自己未来要写一下,蓝牙主机一对多从机和 K210 的网络通信优化过程。
    VUE实现Studio管理后台(五):手风琴式折叠组件(Accordion)
    VUE实现Studio管理后台(四):状态模式实现窗口停靠,灵动、自由
    VUE实现Studio管理后台(三):支持多语言国际化(vue-i18n)
    VUE实现Studio管理后台(二):Slot实现选项卡tab切换效果,可自由填装内容
    VUE实现Studio管理后台(一):鼠标拖放改变窗口大小
  • 原文地址:https://www.cnblogs.com/100-rzsyztd/p/12994417.html
Copyright © 2020-2023  润新知