我们准备在python中调用按键精灵的大漠插件来完成模拟驱动的鼠标键盘操作。大漠 综合 插件 (dm.dll)采用vc6.0编写,识别速度超级快! 采用COM接口编写,适用于所有语言调用。
网上相关教程极少,我们只能一步步自己摸索。
首先下载大漠核心组件dm.dll,在win10的新版总是出现闪退bug,为了稳定性,选择比较老的3.2xxx版本了。
下载地址 下载解压后,将dm.dll复制到C:\Windows\SysWOW64文件夹里。(显然你应该是64位系统,应该没人用32位了吧)
以管理员方式打开cmd,如果你是windows管理员账号直接打开应该就没问题了
键入:

C:
cd C:\Windows\SysWOW64
regsvr32 dm.dll

大功告成了,注册完成

import win32com.client


dm = win32com.client.Dispatch('dm.dmsoft')  #调用大漠插件
dm.moveto(10,10)

其中win32com帮我们加载了dll文件,直接调用dm.function dm.constant就可以使用插件了,注意有返回值的对象最好写上等于符号,哪怕他返回的变量没有用(vc的语法)

然后运行,发现一长串的报错…
别急,分析报错,我们的python版本一般来说我64位的,而大漠是02年推出的脚本插件,是基于按键精灵和vc语言开发的Active X脚本,它只支持32位。

为了支持插件我们只好下载一个32位的python下载地址 我下载的是python3.6-32的
下载之后最好把add path勾选,然后把之前64位的path再系统变量里取消掉,之后再讲为什么要这么做。之后呢,如果使用pycharm一定要选好解释器(32位),如果还用了ipython等工具,一定要把默认解释器也相应修改。

当然最简单的就是在visual code加上Ipython模块上编辑啦,你直接替换一下解释器属性就行了。

如果以上配置成功,再运行以上代码。你的输出大概这样,然后鼠标会移到屏幕左上角。

python 大漠接口 python 大漠模块_python 大漠接口

仔细阅读插件文档加调试了一两天之后…
彻底放弃了long SetSimMode(mode)这个函数,这个函数总是返回值为0,提示我未注册,导致我没法进入硬件驱动模式,从而被楚留香屏蔽了脚本输入。

直到今天再读文档发现了这个函数

python 大漠接口 python 大漠模块_Windows_02


于是修改代码为如下,保存名字为 test.py 注:这段代码是不可以直接运行的,因为大漠插件要求管理员权限,直接run可能运行失败

运行方法:

1.首先将python3.6-32位的path加入系统变量Path中

2.以管理员身份启动命令行

3.键入 python X:\xxxx(你的路径)\test.py

如果你没添加path,要么去修改path,要么直接cd到python3.6-32位目录下输入该指令

import win32com.client
import win32con
import win32gui
import time
hwnd=win32gui.FindWindow(None,'楚留香')
if(win32gui.IsIconic(hwnd)):
    win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 300,200,1200,800,win32con.SWP_SHOWWINDOW)
dm = win32com.client.Dispatch('dm.dmsoft')  #调用大漠插件
re=dm.BindWindow(hwnd,"normal","dx2","dx",4)
print(re)
print(dm.GetLastError())
def keydownup(num,times):
    while True:
        dm_res=dm.keypress(num)
        time.sleep(times)
keydownup(27,3)

如果打印值不为1、0,说明配置是有问题

可能导致问题几点:

1.关闭uca,拿win10来说控制面板-安全和维护-关闭所有防火墙-更改用户控制和账户控制设置,拉到最低

python 大漠接口 python 大漠模块_Windows_03

2.重启开机按F1,F2和DEL,进入BIOS模式,进入ROOT或者Security选项卡,把Secure Boot 选项的enabled 改为disable

python 大漠接口 python 大漠模块_python 大漠接口_04


3.将游戏同时也以管理员身份启动这段代码是每隔3s给楚留香发送1个ESC键,如果这个ESC没被屏蔽掉,证明我们模拟输入就成功了。

python 大漠接口 python 大漠模块_Windows_05

然后游戏中显然ESC键生效了,我们已经基本掌握了如何用python+大漠插件方式向“楚留香”发送模拟指令,接下来的逻辑工作无非是确定每个点的坐标,然后进行键位组合即可。

但是还有一个问题没解决,就是如何识别文字。
摆摊界面的价格,机器是不可能自动识别的,我们必须识别出来再与我们理想价格做一个比较,才能辅助我们抢不抢购。

附录:大漠插件虚拟键码
key_str 虚拟键码

"1",          49

"2",          50

"3",          51

"4",          52

"5",          53

"6",          54

"7",          55

"8",          56

"9",          57

"0",          48

"-",          189

"=",          187

"back",       8

 

"a",          65

"b",          66

"c",          67

"d",          68

"e",          69

"f",          70

"g",          71

"h",          72

"i",          73

"j",          74

"k",          75

"l",          76

"m",          77

"n",          78

"o",          79

"p",          80

"q",          81

"r",          82

"s",          83

"t",          84

"u",          85

"v",          86

"w",          87

"x",          88

"y",          89

"z",          90

 

"ctrl",       17

"alt",        18

"shift",      16

"win",        91

"space",      32

"cap",        20

"tab",        9

"~",          192

"esc",        27

"enter",      13

 

"up",         38

"down",       40

"left",       37

"right",      39

 

"option",     93

 

"print",      44

"delete",     46

"home",       36

"end",        35

"pgup",       33

"pgdn",       34

 

"f1",         112

"f2",         113

"f3",         114

"f4",         115

"f5",         116

"f6",         117

"f7",         118

"f8",         119

"f9",         120

"f10",        121

"f11",        122

"f12",        123

 

"[",          219

"]",          221

"\\",         220

";",          186

"'",          222

",",          188

".",          190

"/",          191