rabird.winio的Python项目详细描述
拉伯德.winio
警告:此库已重命名为pywinio,请改用它!
winio的包装库。
感谢来自亚里夫卡普兰的伟大的Winio图书馆。
将从winio binary包访问winio库二进制分发。
用法
- 键盘模拟
NOTICE: You must have a ps/2 keyboard connected to your PC if you test on win10 or later, otherwise this sample won’t works!
import rabird.winio import time import atexit # KeyBoard Commands # Command port KBC_KEY_CMD = 0x64 # Data port KBC_KEY_DATA = 0x60 __winio = None def __get_winio(): global __winio if __winio is None: __winio = rabird.winio.WinIO() def __clear_winio(): global __winio __winio = None atexit.register(__clear_winio) return __winio def wait_for_buffer_empty(): ''' Wait keyboard buffer empty ''' winio = __get_winio() dwRegVal = 0x02 while (dwRegVal & 0x02): dwRegVal = winio.get_port_byte(KBC_KEY_CMD) def key_down(scancode): winio = __get_winio() wait_for_buffer_empty(); winio.set_port_byte(KBC_KEY_CMD, 0xd2); wait_for_buffer_empty(); winio.set_port_byte(KBC_KEY_DATA, scancode) def key_up(scancode): winio = __get_winio() wait_for_buffer_empty(); winio.set_port_byte( KBC_KEY_CMD, 0xd2); wait_for_buffer_empty(); winio.set_port_byte( KBC_KEY_DATA, scancode | 0x80); def key_press(scancode, press_time = 0.2): key_down( scancode ) time.sleep( press_time ) key_up( scancode ) # Press 'A' key # Scancodes references : https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html key_press(0x1E)
特权要求
winio需要管理权限才能正常运行。这可以通过以下方法实现:
- 从作为本地系统运行的服务中使用winio(必须显式启用se_load_driver_name权限)。
- 在请求权限提升的应用程序中嵌入清单文件。
- 要求用户在启动应用程序时选择“以管理员身份运行”选项。
包含的C示例演示如何使用嵌入的清单文件来请求权限提升。
64位系统上的驱动程序签名要求
64位版本的Windows只加载由公共CA(如VeriSign、Thawte等)颁发的代码签名证书签名的设备驱动程序。除非获得并使用代码签名证书对此文件进行签名,否则不能在生产计算机上部署winio64.sys。winio64.sys的捆绑副本使用自签名证书进行签名,并且只能在Windows以特殊“测试”模式运行的开发/测试计算机上使用。要使用捆绑版本的winio64.sys,需要执行以下步骤:
- 右键单击图标并单击“以管理员身份运行”,打开提升的命令窗口。
- 键入以下命令以启用测试签名:
bcdedit.exe /set TESTSIGNING ON
- 重新启动计算机
有关Windows驱动程序签名要求的详细信息,请参阅http://www.microsoft.com/whdc/winlogo/drvsign/kmcs_walkthrough.mspx。
许可证
这个库使用了license.txt中已经描述过的mit许可证
license-winio.txt中描述了WinIO库的许可证