那年,刚开始玩dota的时候, 发现物品栏的快捷键太不好按鸟(集中在小键盘的数字键)。于是各种改键工具应运而生,像最经典的warkey, 不知不觉就用了好多年。如今,各种改键工具越来越强大了, 支持各种,甚至是喊话什么的~不过最经典的warkey,实际上只是简单的键盘映射, 于是今天突然想起来就也写了一个。使用python的pyHook,还是很方便的完成了功能。
import pythoncom import pyHook import win32api import win32con keyMap={'Num7':'Q', 'Num4':'Capital', 'Num1':'Z', 'Num8':'', 'Num5':'', 'Num2':'X', 'startFlag':'Oem_5' } #这个Oem_5实际上是键盘上的 \ startFlag=False def switchFlag(): global startFlag if startFlag: print 'warkey stop' startFlag=False else : print 'warkey start' startFlag=True def checkFlag(): return startFlag def onKeyboardEvent(event): print 'Key:%s\n' % str(event.Key) if str(event.Key) == keyMap['startFlag']: switchFlag() if checkFlag(): if str(event.Key) == keyMap['Num7']: win32api.keybd_event(103, 0, 0, 0) # Q -> Num7 win32api.keybd_event(103, 0, win32con.KEYEVENTF_KEYUP, 0) elif str(event.Key) == keyMap['Num4']: win32api.keybd_event(100, 0, 0, 0) # Capital -> Num4 win32api.keybd_event(100, 0, win32con.KEYEVENTF_KEYUP, 0) elif str(event.Key) == keyMap['Num1']: win32api.keybd_event(97, 0, 0, 0) # Z -> Num1 win32api.keybd_event(97, 0, win32con.KEYEVENTF_KEYUP, 0) elif str(event.Key) == keyMap['Num8']: pass elif str(event.Key) == keyMap['Num5']: pass elif str(event.Key) == keyMap['Num2']: win32api.keybd_event(98, 0, 0, 0) # X -> Num2 win32api.keybd_event(98, 0, win32con.KEYEVENTF_KEYUP, 0) else: pass if __name__ == "__main__": print 'start listen' hm=pyHook.HookManager() hm.KeyDown=onKeyboardEvent hm.HookKeyboard() pythoncom.PumpMessages()
按 “\”切换开启/关闭状态
然后将Q,cap lock, Z, X分别映射到四个小键盘数字键
下次老大带着去网吧公款dota, 万一一时找不到合适的改键工具,就可以用自己的这个了=w=
附录:
键盘键码对应表
http://wenku.baidu.com/view/bff70805a6c30c2259019ef4.html