用Python3实现dota改建精灵——python库

发布时间:   来源:CSDN  


(资料图片仅供参考)

如题,用Python3实现 dota改建精灵。本质原理是通过改变键盘按键映射关系。比如按下数字键1,映射到字母A。映射关系可以自定义。 这样就构成了改建逻辑。 实现工具清单如下:

python 3.7.3python库:PyHook3 ,关于该库的安装请自行百度,有点麻烦。python库:win32api

完整代码如下,可直接使用:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2020-09-05 19:13:10# @Author  : Nero # @Link    :# @Version : Dota技能一把梭"""使用说明:1). 根据需求修改keyMap中对应的值,字母不区分大小写2). 程序运行后,通过“\” 开启、关闭 键盘映射功能"""#导入库文件import pythoncomimport PyHook3import win32apiimport win32con#构建映射关系keyMap={"装备栏1":"",     "装备栏2":"",        "装备栏3":"",     "装备栏4":"",        "装备栏5":"",     "装备栏6":"",        }#提示信息print("Author: Nero\n")print("装备栏顺序如下:\n装备栏1     装备栏2\n装备栏3     装备栏4\n装备栏5     装备栏6\n")#输入各装备栏的快捷键for i in keyMap:    keyMap[i]=input("请输入"{0}"的快捷键: ".format(i))#改建开关提示print("\n请输入 “\” 开启改键功能\n")#开关flagturnONOFF="Oem_5"           # “\” 开启/关闭 按键映射功能按键startFlag=False#开关函数def switchFlag():    global startFlag    if startFlag:        print ("功能停止")        startFlag=False    else :        print ("功能开启")        startFlag=Truedef checkFlag():    return startFlag#主程序将一直监听键盘输入,并判断是否是自定义的快捷键,根据判断结果将指定的按键发送给系统。def onKeyboardEvent(event):    #打印当前键盘输入    print ("Key:{0:} ".format(event.Key))        #程序开启/关闭    if str(event.Key) == "Oem_5":        switchFlag()#如果程序开启,如果检测到按键为快捷键,则将该快捷键映射的值送给系统    if checkFlag():        if str(event.Key).lower() == keyMap["装备栏1"].lower():            win32api.keybd_event(103, 0, 0, 0)      #对应小键盘7            win32api.keybd_event(103, 0, win32con.KEYEVENTF_KEYUP, 0)        elif str(event.Key).lower() == keyMap["装备栏3"].lower():            win32api.keybd_event(100, 0, 0, 0)      #对应小键盘4            win32api.keybd_event(100, 0, win32con.KEYEVENTF_KEYUP, 0)        elif str(event.Key).lower() == keyMap["装备栏5"].lower():            win32api.keybd_event(97, 0, 0, 0)       #对应小键盘1            win32api.keybd_event(97, 0, win32con.KEYEVENTF_KEYUP, 0)        elif str(event.Key).lower() == keyMap["装备栏2"].lower():            win32api.keybd_event(104, 0, 0, 0)      #对应小键盘8            win32api.keybd_event(104, 0, win32con.KEYEVENTF_KEYUP, 0)        elif str(event.Key).lower() == keyMap["装备栏4"].lower():            win32api.keybd_event(101, 0, 0, 0)      #对应小键盘5            win32api.keybd_event(101, 0, win32con.KEYEVENTF_KEYUP, 0)        elif str(event.Key).lower() == keyMap["装备栏6"].lower():            win32api.keybd_event(98, 0, 0, 0)       #对应小键盘2            win32api.keybd_event(98, 0, win32con.KEYEVENTF_KEYUP, 0)    else:        pass    # 返回 True 以便将事件传给其它处理程序    # 注意,这儿如果返回 False ,则鼠标事件将被全部拦截    # 也就是说你的输入失效,似乎失去响应了    return Truedef main():    # 创建一个“钩子”管理对象    hm = PyHook3.HookManager()    # 监听所有键盘事件    hm.KeyDown = onKeyboardEvent    # 设置键盘“钩子”    hm.HookKeyboard()    # 进入循环,如不手动关闭,程序将一直处于监听状态    pythoncom.PumpMessages()if __name__ == "__main__":    main()

相关文章Related

返回栏目>>