开发DNF连点功能时,常规的PyMouse PyKeyboard无效

猜测原因是DNF屏蔽了模拟信号

尝试使用驱动级按键

作者:石头三颗
链接:https://www.zhihu.com/question/42888871/answer/385506293
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

比如DD虚拟键盘虚拟鼠标

这个官方例子里就有python下如何调用的例子:

from ctypes import *

import time

# 注册DD DLL,64位python用64位,32位用32位,具体看DD说明文件。
# 测试用免安装版。
# 用哪个就调用哪个的dll文件。
dd_dll = windll.LoadLibrary('ddx64.dll')

# DD虚拟码,可以用DD内置函数转换。
vk = {'5': 205, 'c': 503, 'n': 506, 'z': 501, '3': 203, '1': 201, 'd': 403, '0': 210, 'l': 409, '8': 208, 'w': 302,
        'u': 307, '4': 204, 'e': 303, '[': 311, 'f': 404, 'y': 306, 'x': 502, 'g': 405, 'v': 504, 'r': 304, 'i': 308,
        'a': 401, 'm': 507, 'h': 406, '.': 509, ',': 508, ']': 312, '/': 510, '6': 206, '2': 202, 'b': 505, 'k': 408,
        '7': 207, 'q': 301, "'": 411, '\\': 313, 'j': 407, '`': 200, '9': 209, 'p': 310, 'o': 309, 't': 305, '-': 211,
        '=': 212, 's': 402, ';': 410}
# 需要组合shift的按键。
vk2 = {'"': "'", '#': '3', ')': '0', '^': '6', '?': '/', '>': '.', '<': ',', '+': '=', '*': '8', '&': '7', '{': '[', '_': '-',
        '|': '\\', '~': '`', ':': ';', '$': '4', '}': ']', '%': '5', '@': '2', '!': '1', '(': '9'}

def down_up(code):
    # 进行一组按键。

    dd_dll.DD_key(vk[code], 1)
    dd_dll.DD_key(vk[code], 2)

def dd(key):
    # 500是shift键码。
    if i.isupper():
        # 如果是一个大写的玩意。

        # 按下抬起。
        dd_dll.DD_key(500, 1)
        down_up(i.lower())
        dd_dll.DD_key(500, 2)

    elif i in '~!@#$%^&*()_+{}|:"<>?':
        # 如果是需要这样按键的玩意。
        dd_dll.DD_key(500, 1)
        down_up(vk2[i])
        dd_dll.DD_key(500, 2)
    else:
        down_up(i)

input("按任意键继续...")
# 之后等待两秒。
time.sleep(2)

# 测试按键。
for i in 'http://www.ddxoft.com':
    dd(i)

# 需要注意的问题。
# 若同时开启两个脚本,第二个脚本会调用失败。驱动会加载错误。
# 这个错误可以被Python捕获。

# 网络错误会成功启动脚本,但是按键不会有效果,需要重新启动脚本。
# 这个错误无法被Python捕获。
# 这个错误可以用dd_dll的内置函数测试是否加载成功来确定。

代码晚上回家进行一波测试 

DD64文件需更新 须加群 不测了 。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐