笔记本电脑是Windows10系统,CAPS LOCK 键切换大小写无提示,数字键盘的NUMBER 键开关时也无提示。
这里用python3.10+一些库,制作一个系统托盘程序,能够显示这两个键的开启状态。
主程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
from PIL import Image # PIL原版库仅支持到python2.7,由社区成员制作pillow使到python3,安装命令pip install pillow。 import ctypes import keyboard # pip3 install keyboard import os import pystray # pip3 install pystray 创建系统托盘图标 import sys import win32api # pip3 install pywin32 def checkLockStatus(): # 检测键盘是否大写 is_caps_lock_on = ctypes.windll.user32.GetKeyState(0x14) != 0 if is_caps_lock_on: # 关闭大写状态 # win32api.keybd_event(0x14, 0, 0, 0) # win32api.keybd_event(0x14, 0, 2, 0) print(f"大写") else: print(f"小写") # 数字键盘是否开启 is_number_lock_on = ctypes.windll.user32.GetKeyState(0x90) != 0 if is_number_lock_on: # 关闭大写状态 # win32api.keybd_event(0x90, 0, 0, 0) # win32api.keybd_event(0x90, 0, 2, 0) print(f"数字键盘开启了") else: print(f"数字键盘没开") check_lock_status = [is_caps_lock_on, is_number_lock_on] return check_lock_status def switchTrayIcon(): # 根据按键,切换系统托盘图标 status = checkLockStatus() if status[0] and status[1]: trayIcon.icon = image2 # 都开了 elif status[0] and not status[1]: trayIcon.icon = image1 # 大写开了,数字没开 elif status[1] and not status[0]: trayIcon.icon = image4 # 大写没开,数字开了 else: trayIcon.icon = image3 # 大写没开,数字没开 # 定义一个回调函数,键被按下及松开时触发 def onKeyboardPress(event): if "down" == event.event_type: # down 按下,up 弹起。 return print(f"键 {event.name} 被按了") if "caps lock" == event.name or "num lock" == event.name: switchTrayIcon() def onTrayRightClick(icon, item): #这里面就是右键点击系统托盘后出现的功能选项对应的代码 #注意,str(item)要和下面的菜单栏中的字符串保持一致 if str(item) == "功能1": print('>>>功能1') elif str(item) == "结束程序": #keyboard.wait('a') # 监听特定键,例如 'a'。阻塞 keyboard.unhook_all()# 停止监听 icon.stop() # 此icon即trayIcon try: sys.exit(0) except: print('终止程序') finally: print('扫尾') def getResource(): # pyinstall生成的exe程序解压后的文件,动态路径函数。根据启动方式不同(py源文件、exe二进制程序)得到不同的路径 current_directory = os.path.dirname(os.path.abspath(__file__)) + '/./' # capsnumber文件夹在本py的同级目录 base_p = getattr(sys, '_MEIPASS', current_directory) # getattr(src, key, default) 如果src存在key属性(方法)则返回key对应的值(方法地址)否则返回default值。_MEIPASS是sys内置的临时目录。 return os.path.join(base_p, "capsnumber") p = getResource() # 图标文件在capsnumber文件夹里 print("绝对路径", p) image1 = Image.open(p + '/an1.jpg') image2 = Image.open(p + '/an2.jpg') image3 = Image.open(p + '/an3.jpg') image4 = Image.open(p + '/an4.jpg') trayIcon = pystray.Icon( "CapsNumberTipService", # 托盘程序名 image3, # 托盘图标 "显示大小写切换键、数字键盘开关键的状态", # 描述 menu=pystray.Menu( # 右键菜单 pystray.MenuItem("功能1", onTrayRightClick), pystray.MenuItem("结束程序", onTrayRightClick) ) ) if __name__ == "__main__": switchTrayIcon() # 首次启动检查是否开启了大写和数字键盘 keyboard.hook(onKeyboardPress) # 监听按键。不阻塞 trayIcon.run() # 系统托盘图标。阻塞 ''' pip3 install pyinstaller pyinstaller 按键提示.spec 将 dist中生成的 按键提示.exe 加入开始菜单启动项 ''' |
打包配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# -*- mode: python ; coding: utf-8 -*- a = Analysis( ['按键提示.py'], pathex=[], binaries=[], datas=[('capsnumber/*.*', 'capsnumber')], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, optimize=0, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.datas, [], name='按键提示', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon=['capsnumber/an1.jpg'], ) |
打包参考 4271.html
- end
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/4519.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设