聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

用Python3實(shí)現(xiàn)dota改建精靈——python庫

來源:CSDN 時間:2023-02-14 08:58:20


(資料圖片僅供參考)

如題,用Python3實(shí)現(xiàn) dota改建精靈。本質(zhì)原理是通過改變鍵盤按鍵映射關(guān)系。比如按下數(shù)字鍵1,映射到字母A。映射關(guān)系可以自定義。 這樣就構(gòu)成了改建邏輯。 實(shí)現(xiàn)工具清單如下:

python 3.7.3python庫:PyHook3 ,關(guān)于該庫的安裝請自行百度,有點(diǎn)麻煩。python庫:win32api

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

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2020-09-05 19:13:10# @Author  : Nero # @Link    :# @Version : Dota技能一把梭"""使用說明:1). 根據(jù)需求修改keyMap中對應(yīng)的值,字母不區(qū)分大小寫2). 程序運(yùn)行后,通過“\” 開啟、關(guān)閉 鍵盤映射功能"""#導(dǎo)入庫文件import pythoncomimport PyHook3import win32apiimport win32con#構(gòu)建映射關(guān)系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))#改建開關(guān)提示print("\n請輸入 “\” 開啟改鍵功能\n")#開關(guān)flagturnONOFF="Oem_5"           # “\” 開啟/關(guān)閉 按鍵映射功能按鍵startFlag=False#開關(guān)函數(shù)def switchFlag():    global startFlag    if startFlag:        print ("功能停止")        startFlag=False    else :        print ("功能開啟")        startFlag=Truedef checkFlag():    return startFlag#主程序?qū)⒁恢北O(jiān)聽鍵盤輸入,并判斷是否是自定義的快捷鍵,根據(jù)判斷結(jié)果將指定的按鍵發(fā)送給系統(tǒng)。def onKeyboardEvent(event):    #打印當(dāng)前鍵盤輸入    print ("Key:{0:} ".format(event.Key))        #程序開啟/關(guān)閉    if str(event.Key) == "Oem_5":        switchFlag()#如果程序開啟,如果檢測到按鍵為快捷鍵,則將該快捷鍵映射的值送給系統(tǒng)    if checkFlag():        if str(event.Key).lower() == keyMap["裝備欄1"].lower():            win32api.keybd_event(103, 0, 0, 0)      #對應(yīng)小鍵盤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)      #對應(yīng)小鍵盤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)       #對應(yīng)小鍵盤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)      #對應(yīng)小鍵盤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)      #對應(yīng)小鍵盤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)       #對應(yīng)小鍵盤2            win32api.keybd_event(98, 0, win32con.KEYEVENTF_KEYUP, 0)    else:        pass    # 返回 True 以便將事件傳給其它處理程序    # 注意,這兒如果返回 False ,則鼠標(biāo)事件將被全部攔截    # 也就是說你的輸入失效,似乎失去響應(yīng)了    return Truedef main():    # 創(chuàng)建一個“鉤子”管理對象    hm = PyHook3.HookManager()    # 監(jiān)聽所有鍵盤事件    hm.KeyDown = onKeyboardEvent    # 設(shè)置鍵盤“鉤子”    hm.HookKeyboard()    # 進(jìn)入循環(huán),如不手動關(guān)閉,程序?qū)⒁恢碧幱诒O(jiān)聽狀態(tài)    pythoncom.PumpMessages()if __name__ == "__main__":    main()

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top