python热键+鼠标键盘控制

  • 应用:ctrl+home自动输入文本;home停止
  • 代码:hotkey

应用:ctrl+home自动输入文本;home停止

代码:hotkey

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import win32con
import ctypes
import ctypes.wintypes
from threading import Thread,activeCount, enumerate
from time import sleep,time###############################################################
import win32api
VK_CODE = {'backspace':0x08,'tab':0x09,'clear':0x0C,'enter':0x0D,'shift':0x10,'ctrl':0x11,'alt':0x12,'pause':0x13,'caps_lock':0x14,'esc':0x1B,'spacebar':0x20,'page_up':0x21,'page_down':0x22,'end':0x23,'home':0x24,'left_arrow':0x25,'up_arrow':0x26,'right_arrow':0x27,'down_arrow':0x28,'select':0x29,'print':0x2A,'execute':0x2B,'print_screen':0x2C,'ins':0x2D,'del':0x2E,'help':0x2F,'0':0x30,'1':0x31,'2':0x32,'3':0x33,'4':0x34,'5':0x35,'6':0x36,'7':0x37,'8':0x38,'9':0x39,'a':0x41,'b':0x42,'c':0x43,'d':0x44,'e':0x45,'f':0x46,'g':0x47,'h':0x48,'i':0x49,'j':0x4A,'k':0x4B,'l':0x4C,'m':0x4D,'n':0x4E,'o':0x4F,'p':0x50,'q':0x51,'r':0x52,'s':0x53,'t':0x54,'u':0x55,'v':0x56,'w':0x57,'x':0x58,'y':0x59,'z':0x5A,'numpad_0':0x60,'numpad_1':0x61,'numpad_2':0x62,'numpad_3':0x63,'numpad_4':0x64,'numpad_5':0x65,'numpad_6':0x66,'numpad_7':0x67,'numpad_8':0x68,'numpad_9':0x69,'multiply_key':0x6A,'add_key':0x6B,'separator_key':0x6C,'subtract_key':0x6D,'decimal_key':0x6E,'divide_key':0x6F,'F1':0x70,'F2':0x71,'F3':0x72,'F4':0x73,'F5':0x74,'F6':0x75,'F7':0x76,'F8':0x77,'F9':0x78,'F10':0x79,'F11':0x7A,'F12':0x7B,'F13':0x7C,'F14':0x7D,'F15':0x7E,'F16':0x7F,'F17':0x80,'F18':0x81,'F19':0x82,'F20':0x83,'F21':0x84,'F22':0x85,'F23':0x86,'F24':0x87,'num_lock':0x90,'scroll_lock':0x91,'left_shift':0xA0,'right_shift ':0xA1,'left_control':0xA2,'right_control':0xA3,'left_menu':0xA4,'right_menu':0xA5,'browser_back':0xA6,'browser_forward':0xA7,'browser_refresh':0xA8,'browser_stop':0xA9,'browser_search':0xAA,'browser_favorites':0xAB,'browser_start_and_home':0xAC,'volume_mute':0xAD,'volume_Down':0xAE,'volume_up':0xAF,'next_track':0xB0,'previous_track':0xB1,'stop_media':0xB2,'play/pause_media':0xB3,'start_mail':0xB4,'select_media':0xB5,'start_application_1':0xB6,'start_application_2':0xB7,'attn_key':0xF6,'crsel_key':0xF7,'exsel_key':0xF8,'play_key':0xFA,'zoom_key':0xFB,'clear_key':0xFE,'+':0xBB,',':0xBC,'-':0xBD,'.':0xBE,'/':0xBF,'`':0xC0,';':0xBA,'[':0xDB,'\\':0xDC,']':0xDD,"'":0xDE}
VK_CODE1 = {'A':'a','B':'b','C':'c','D':'d','E':'e','F':'f','G':'g','H':'h','I':'i','J':'j','K':'k','L':'l','M':'m','N':'n','O':'o','P':'p','Q':'q','R':'r','S':'s','T':'t','U':'u','V':'v','W':'w','X':'x','Y':'y','Z':'z',')':'0','!':'1','@':'2','#':'3','$':'4','%':'5','^':'6','&':'7','*':'8','(':'9','=':'+','<':',','_':'-','>':'.','?':'/','~':'`',':':';','{':'[','|':'\\','}':']','"':"'"}
class Point(ctypes.Structure):_fields_=[("x",ctypes.c_long),("y",ctypes.c_long)]
def mouse_get_point():po=Point()ctypes.windll.user32.GetCursorPos(ctypes.byref(po))return int(po.x),int(po.y)
def mouse_down():win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
def mouse_up():win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_click(x=None,y=None):#模拟鼠标单击if not x is None and not y is None:mouse_move(x,y)sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_rclick(x=None,y=None):#模拟鼠标单击if not x is None and not y is None:mouse_move(x,y)sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
def mouse_dclick(x=None,y=None):#模拟鼠标双击if not x is None and not y is None:mouse_move(x,y)sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)#按下鼠标左键win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)#松开鼠标左键win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_move(x,y):ctypes.windll.user32.SetCursorPos(x, y)#将鼠标移动到对应位置但是不点击
def key_autinput(str_input=''):#自动识别上档键和下档建并输出for c in str_input:if c in VK_CODE1:win32api.keybd_event(VK_CODE['shift'],0,0,0)#按键win32api.keybd_event(VK_CODE[VK_CODE1[c]],0,0,0)#按键win32api.keybd_event(VK_CODE['shift'],0,win32con.KEYEVENTF_KEYUP,0)#释放按键win32api.keybd_event(VK_CODE[VK_CODE1[c]],0,win32con.KEYEVENTF_KEYUP,0)#释放按键sleep(0.05)#延时1秒else:win32api.keybd_event(VK_CODE[c],0,0,0)#按键win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0)#释放按键sleep(0.05)#延时1秒def key_continput(str_input=''):#联系按下键再连续释放for c in str_input:if c in VK_CODE1:#win32api.keybd_event(VK_CODE['shift'],0,0,0)#按键win32api.keybd_event(VK_CODE[VK_CODE1[c]],0,0,0)#按键#win32api.keybd_event(VK_CODE['shift'],0,win32con.KEYEVENTF_KEYUP,0)#释放按键#win32api.keybd_event(VK_CODE[VK_CODE1[c]],0,win32con.KEYEVENTF_KEYUP,0)#释放按键sleep(0.05)#延时1秒else:win32api.keybd_event(VK_CODE[c],0,0,0)#按键#win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0)#释放按键sleep(0.05)#延时1秒for c in str_input:    if c in VK_CODE1:win32api.keybd_event(VK_CODE[VK_CODE1[c]],0,win32con.KEYEVENTF_KEYUP,0)#释放按键sleep(0.05)#延时1秒else:win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0)#释放按键sleep(0.05)#延时1秒
def key_shift_down():win32api.keybd_event(VK_CODE["shift"],0,0,0)#按下shift键
def key_shift_up():win32api.keybd_event(VK_CODE["shift"],0,win32con.KEYEVENTF_KEYUP,0)#按下shift键#################################################################class Hotkey(Thread):user32 = ctypes.windll.user32hkey_list = {}hkey_flags = {} #按下hkey_running = {} #启停_reg_list = {} #待注册热键信息def regiskey(self, hwnd=None, flagid=0, fnkey=win32con.MOD_ALT, vkey=win32con.VK_F9): # 注册热键,默认一个alt+F9return self.user32.RegisterHotKey(hwnd, flagid, fnkey, vkey)def get_reginfo(self):return self._reg_listdef get_id(self,func):self_id = Nonefor id in self.get_reginfo():if self.get_reginfo()[id]["func"] == func:self_id = idbreakif self_id:self.hkey_running[self_id] = Truereturn self_iddef get_running_state(self,self_id):if self.hkey_running.get(self_id):return self.hkey_running[self_id]else:return Falsedef reg(self,key,func,args=None):id = int(str(round(time()*10))[-6:])fnkey = key[0]vkey = key[1]info = {"fnkey":fnkey,"vkey":vkey,"func":func,"args":args}self._reg_list[id] = info# print(info) #这里待注册的信息sleep(0.1)return iddef fast_reg(self,id,key = (0,win32con.VK_HOME),func = lambda:print('热键注册开始')):if not self.regiskey(None, id, key[0], key[1]):print("热键注册失败")return Noneself.hkey_list[id] = funcself.hkey_flags[id] = Falsereturn iddef callback(self):def inner(self = self):for flag in self.hkey_flags:self.hkey_flags[flag] = Falsewhile True:for id, func in self.hkey_list.items():if self.hkey_flags[id]:args = self._reg_list[id]["args"]if args:# print(args)  #这里打印传入给注册函数的参数thread_it(func,*args)else:thread_it(func)self.hkey_flags[id] = Falsereturn innerdef run(self):for id in self._reg_list:reg_info = self._reg_list[id]fnkey = reg_info["fnkey"]vkey = reg_info["vkey"]func = reg_info["func"]self.fast_reg(id,(fnkey, vkey), func)fn = self.callback()thread_it(fn) # 启动监听热键按下线程try:msg = ctypes.wintypes.MSG()while True:if self.user32.GetMessageA(ctypes.byref(msg), None, 0, 0) != 0:if msg.message == win32con.WM_HOTKEY:if msg.wParam in self.hkey_list:self.hkey_flags[msg.wParam] = Trueself.user32.TranslateMessage(ctypes.byref(msg))self.user32.DispatchMessageA(ctypes.byref(msg))finally:for id in self.hkey_list:self.user32.UnregisterHotKey(None, id)def thread_it(func, *args):t = Thread(target=func, args=args)t.setDaemon(True)t.start()def jump(func,hotkey):self_id = hotkey.get_id(func)while hotkey.get_running_state(self_id):#print(self_id ,": 你正在1秒1次的跳动")sleep(1)key_autinput("34IOp")#hotkey.hkey_running[self_id] = Falsedef stop_jump(start_id,hotkey):hotkey.hkey_running[start_id] = Falseprint(start_id," 即将停止")sleep(1)print("当前线程列表:",activeCount(), enumerate())def main():hotkey = Hotkey()start_id = hotkey.reg(key = (win32con.MOD_CONTROL,win32con.VK_HOME),func=jump,args=(jump,hotkey)) #alt home键 开始hotkey.reg(key = (0,win32con.VK_END),func=stop_jump,args=(start_id,hotkey)) #alt end键 结束hotkey.start() #启动热键主线程print("当前总线程数量:",activeCount())print('当前线程列表:', enumerate())print('热键注册初始化完毕,尝试按组合键alt+Home 或者单键END看效果')if __name__ == '__main__':main()

python热键+鼠标键盘控制相关推荐

  1. Python自动化 | 通过键盘控制鼠标来玩赛尔号

    最近心血来潮回归赛尔号(十年铁皮常不请自来) 做剧情任务的时候有个小游戏,拖动黄色的按钮到达终点,白色的是存档点,途中如果碰到墙壁需要对战野怪,打赢了可以从存档点出发,但是由于刚回归,精灵跟不上时代, ...

  2. 使用 Python 实现鼠标键盘自动化

    使用 Python 实现鼠标键盘自动化 本文演示了如何使用 Python 的 pyautogui 模块实现鼠标的自动移动以及键盘的自行输入. 该模块不是 Python 自带的, 因此执行以下命令进行安 ...

  3. [转载] 使用 Python 实现鼠标键盘自动化

    参考链接: 使用Python进行鼠标和键盘自动化 使用 Python 实现鼠标键盘自动化 本文演示了如何使用 Python 的 pyautogui 模块实现鼠标的自动移动以及键盘的自行输入. 该模块不 ...

  4. Mouse Without Borders 一套鼠标键盘控制多台电脑

    当我的桌子上除了笔记本之外还多了一个台式机后,两个鼠标,两个键盘就显得十分多余,于是开始探索怎样用一套鼠标键盘控制多台电脑... 首先搜到的是这玩意--KVM切换器 在他49个赞的诱惑下,我还去淘宝搜 ...

  5. openGL绘制带纹理地球,并实现鼠标键盘控制

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一.绘制球体 二.关键代码 球体类(Sphere) 主函数 顶点着色器 片元着色器 显示效果 源码下载 参考 前言 openGL绘制 ...

  6. android 键盘使用教程,用鼠标键盘控制你的Android手机完整图文教程

    网上大都是91助手for android来连接手机和电脑,我自己比较偏向于豌豆荚,都可以的,下面给出我的步骤及过程中遇到的几个小问题,供大家参考! 一.鼠标键盘控制手机教程 1.在PC上,安装豌豆荚, ...

  7. android usb鼠标,用鼠标键盘控制你的Android手机完整图文教程

    网上大都是91助手for android来连接手机和电脑,我自己比较偏向于豌豆荚,都可以的,下面给出我的步骤及过程中遇到的几个小问题,供大家参考! 一.鼠标键盘控制手机教程 1.在PC上,安装豌豆荚, ...

  8. android键盘管理,用鼠标键盘控制你的Android手机完整图文教程

    32路伺服电机控制器V3.0 官方安装版 类型:编程辅助大小:15.0M语言:中文 评分:7.5 标签: 立即下载 网上大都是91助手for android来连接手机和电脑,我自己比较偏向于豌豆荚,都 ...

  9. 一套鼠标键盘控制两台电脑-绝!

    Oliver's R&D Lab C/C++/Linux 一套鼠标键盘控制两台电脑-绝! 这个工具是推荐给双电脑工作人员的,不是的就不用往下看了,嗯. synergy-----按照它主页( h ...

最新文章

  1. Java8自定义条件让集合分组
  2. 点分治问题 ----------- 2017杭州CCPC E.Master of Subgraph[bitset+点分治]
  3. windows7 下 安装ipython-5.1.0报错
  4. 入门云数据库Redis,满足你的高读写性能场景需求
  5. 15个SaaS问答(图文并茂版)
  6. 为什么至今为止有些人的电脑系统还在使用XP?
  7. Spring 延迟依赖查找Bean
  8. Python迭代器的生成与学习笔记
  9. android视频编辑功能,万能视频编辑器
  10. python用什么数据库比较好_Python和主流数据库
  11. iOS 性能优化(包体积优化、内存优化、流畅性优化、启动优化、耗电优化)
  12. Theano入门神经网络(一)
  13. 怎样才能走上架构师岗位
  14. 【在esp32的3D打印机主板上配置marlin固件OLED】
  15. 17年的回望,18年的期望
  16. UITextView 首行缩进
  17. XML(1)——shema约束之命名空间
  18. 职业类型-ENTJ型
  19. Freshman的low游戏神犇勿喷
  20. 无法访问tomcat的解决方案?

热门文章

  1. V8 之旅: 垃圾回收器
  2. Serverless 实战 —— 基于 Serverless 的 VuePress 极简静态网站
  3. 容器编排技术 -- Kubernetes 示例:使用 Stateful Sets 部署 Cassandra
  4. 如何在两个服务器之间迁移MySQL数据库
  5. 解决vue-cli使用组件报错
  6. C语言 结构体练习之投票
  7. golang-gui编程
  8. java 示例_最佳Java示例
  9. 如何使用PyCharm调试Python代码
  10. 机器学习模型导出为PMML的方法