python安装PyHook3

news2025/1/23 9:05:50

pyhook 报错 “TypeError: KeyboardSwitch() missing 8 required positional arguments: ‘msg’, ‘vk_code’, ‘scan_code’, ‘ascii’, ‘flags’, ‘time’, ‘hwnd’, and ‘win_name’”

一、PyHook3简介

pyHook包为Windows中的全局鼠标和键盘事件提供回调。Python应用程序为用户输入事件注册事件处理程序,如鼠标左下、鼠标左上、键下等,并设置键盘和/或鼠标挂钩。底层的C库报告诸如事件时间、事件发生的窗口名称、事件值、键盘修饰符等信息。

二、安装Swig

Swig介绍
简单包装界面产生器(英语:Simplified Wrapper and Interface Generator, SWIG)是一个开源软件工具,用来将C语言或C++写的计算机程序或函式库,连接脚本语言,例如Lua, Perl, PHP, Python, R, Ruby, Tcl, 和其它语言,例如C#, Java, JavaScript, Go, D, OCaml, Octave, Scilab以及Scheme. 也可以输出成XML格式。

第1步:下载并解压

下载:http://www.swig.org/download.html

从 Swig 官网下载 swigwin-4.0.2 文件并解压(最新版本即可)。由于我要用在Windows平台上,所以下载的是 “swigwin” 版,而不是 “swig” 版。只需要下载并解压即可,解压后的文件夹放到哪里都可以,只要知道 ‘swig.exe’ 文件所在的目录即可。

第2步:配置环境变量

在环境变量path中, 输入 “swig.exe” 文件的所在路径 ,点确定。

三、安装pywin32

下载地址http://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32

选择适合自己python版本的下载 我的是python3.8 故下载

在这里插入图片描述

四、安装pywin32

pip install pywin32

五、安装pyhook3

···python
pip install PyHook3
···

pyhook3使用

import pythoncom
import PyHook3
 
hm = PyHook3.HookManager()
 
 
# 鼠标事件处理函数
def OnMouseEvent(event):
  print('MessageName:',event.MessageName)  #事件名称
  print('Message:',event.Message)          #windows消息常量 
  print('Time:',event.Time)                #事件发生的时间戳        
  print('Window:',event.Window)            #窗口句柄         
  print('WindowName:',event.WindowName)    #窗口标题
  print('Position:',event.Position)        #事件发生时相对于整个屏幕的坐标
  print('Wheel:',event.Wheel)              #鼠标滚轮
  print('Injected:',event.Injected)        #判断这个事件是否由程序方式生成,而不是正常的人为触发。
  print('---')
 
  # 返回True代表将事件继续传给其他句柄,为False则停止传递,即被拦截
  return True
 
#键盘事件处理函数
def OnKeyboardEvent(event):
  print('MessageName:',event.MessageName)          #同上,共同属性不再赘述
  print('Message:',event.Message)
  print('Time:',event.Time)
  print('Window:',event.Window)
  print('WindowName:',event.WindowName)
  print('Ascii:', event.Ascii, chr(event.Ascii))   #按键的ASCII码
  print('Key:', event.Key)                         #按键的名称
  print('KeyID:', event.KeyID)                     #按键的虚拟键值
  print('ScanCode:', event.ScanCode)               #按键扫描码
  print('Extended:', event.Extended)               #判断是否为增强键盘的扩展键
  print('Injected:', event.Injected)
  print('Alt', event.Alt)                          #是某同时按下Alt
  print('Transition', event.Transition)            #判断转换状态
  print('---')
 
  # 同上
  return True
 
#绑定事件处理函数
hm.MouseAllButtonsDown = OnMouseEvent #将OnMouseEvent函数绑定到MouseAllButtonsDown事件上
hm.KeyDown = OnKeyboardEvent          #将OnKeyboardEvent函数绑定到KeyDown事件上
 
hm.HookMouse()        #设置鼠标钩子
hm.HookKeyboard()   #设置键盘钩子
 
pythoncom.PumpMessages()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1268427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu上的常用软件配置

《立冬》——李白 〔唐代〕 冻笔新诗懒写,寒炉美酒时温。 醉看墨花月白,恍疑雪满前村。 对于Android开发者而言,折腾Android源码那是其乐无穷啊。但是有时候在Linux系统下会很不方便,这里特此记录一下常用的软件配置,希…

NX二次开发UF_CURVE_create_isocline 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_isocline Defined in: uf_curve.h int UF_CURVE_create_isocline(int face_cnt, tag_t faces [ ] , double direction [ 3 ] , const char * start_angle, const ch…

Python Xorbits库:编程无限可能性的新开端

更多资料获取 📚 个人网站:ipengtao.com Xorbits是一个Python库,旨在扩展Python语言的功能,使开发者能够更加轻松地进行创新性编程。该库提供了各种工具和功能,包括但不限于: 异步编程支持: Xo…

HTML-CSS知识速查

HTML/CSS知识速查 文章目录 HTML/CSS知识速查[toc]网页的组成浏览器**为什么需要Web标准:** **web标准的构成:**HTMLHTML语法导读**1.1 HTML语法规则:**1.2 基本结构标签**1.3 标签的关系:**1. **包含关系(Parent-Chil…

PostgreSQL-SQL联表查询LEFT JOIN 数据去重复

我们在使用left join联表查询时,如果table1中的一条记录对应了table2的多条记录,则会重复查出id相同的多条记录。 1、解决方法一 SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.id t2.tid 第一种方法我们发现还是有重复数据 2、解决方法二…

Diffusion:通过扩散和逆扩散过程生成图像的生成式模型

在当今人工智能大火的时代,AIGC 可以帮助用户完成各种任务。作为 AIGC 主流模型的 DDPM,也时常在各种论文中被提起。DDPM 本质就是一种扩散模型,可以用来生成图片或者为图片去噪。 扩散模型定义了一个扩散的马尔科夫过程,每一步逐…

删除排序链表的重复元素I和II,多种解法和思考

删除排序链表的重复元素I https://leetcode.cn/problems/remove-duplicates-from-sorted-list/description/ 一个循环就可以了,如果当前节点和下一个节点值一样,当前节点不移动让next后移动一个,如果不一样则当前节点后移。 一个循环就可以…

mysql8报sql_mode=only_full_group_by(存储过程一直报)

1:修改数据库配置(重启失效) select global.sql_mode;会打印如下信息 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION里面包含 ONLY_FULL_GROUP_BY,那么就重新设置,在数据库中输入以下代码,去掉ONLY_FULL_GROU…

水果编曲软件FL Studio21最新中文版本2023年最新FL 21中文版如何快速入门教程

水果编曲软件FL Studio介绍 各位,大家晚上好,今天给大家带来最新最新2023水果编曲软件FL Studio 21中文版下载安装激活图文教程。我们一起先了解一些FL Studio 。FL Studio21是目前流行广泛使用人数最多音乐编曲宿主制作DAW软件,这款软件相信…

PyQt基础_007_ 按钮类控件QCombox

import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class ComboxDemo(QWidget):def __init__(self, parentNone):super(ComboxDemo, self).__init__(parent)self.setWindowTitle("combox 例子") self.resize(300, 90) …

【智能算法】改进粒子群优化算法及对比分析

程序名称:改进粒子群优化算法及对比分析 实现平台:matlab 代码简介:基本粒子群算法(BPSO)中,每个优化问题的解都可以看作粒子在搜索空间中的位置,粒子通过飞行速度决定它们的搜索方向和搜索范围,粒子群通…

C语言基础--#if与#endif

目录 一、C语言中的 #if()和 #end if 用法 1. #if 表达式 程序段 #endif 形式 2. #ifdef标示符 标识符 #endif 形式 3. #if 0/ #if 1 #endif 形式 4. \可用于一行的结尾,表示本行与下一行连接起来 二、xTaskCreate函数 三、指针相关…

投资者要不要更换黄金代理?

有一些投资者会问,要不要更换自己的黄金代理?笔者认为,换代理这个问题有一些东西需要关注。因此,我们今天就来讨论一下投资者该不该更改代理?如果要换,新的代理如何选择? 其实很简单&#xff0c…

数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!

哈夫曼树 (Huffman Tree) 文章目录 哈夫曼树 (Huffman Tree)导论构造哈夫曼树语言描绘图形化理解 证明结论代码实现测试结果对照总结 导论 我们在学习哈夫曼树之前需要先了解 什么是哈夫曼树? 哈夫曼树 是一种最优树,是一类带权路径长度最短的二叉树,通过哈夫曼算法可以构建一…

虚幻学习笔记7—蓝图接口

一、前言 蓝图接口就是可以在蓝图中实现的接口,有它方便的地方,可以很方便的调用到实现了接口的函数。 二、实现 2.1、创建一个蓝图接口 1)可以添加多个函数。 2)函数在蓝图接口中只能规定输入和输出参数。 只有输入参数的可以…

Vue3生命周期函数(简述题)

1.图示 2.说明 3.补充 1.在vue3组合式API中,我们需要将生命周期函数先导入,然后才能使用。 import {onMounted} from vue2.beforeCreate和created被setup()方法所代替

Revit导出3D模型插件【GLTF|OBJ|DAE|STL|PLY|OFF|XYZ】

3dconvert_for_revit插件是NSDT 3DConvert工具集中的一种,可以快速将Revit模型导出为8种目标格式:GLTF、OBJ、GLB、DAE、STL、OFF、XYZ和PLY。 用户在进行格式转换之前,需要先下载安装对应Revit版本的插件。 NSDT在线工具推荐: T…

RabbitMQ消息模型之发布订阅Publish-Subscribe

发布订阅模型 Publish/Subscribe 发布订阅模型也称为广播模型,交换机类型需要指定为Fanout,正如从名称中猜到的那样,它是将接收到的所有消息广播到它知道的所有队列中。每个消费者都监听自己的队列,所以同一个消息,会…

多模块项目打包部署

目录结构 这些模块间相互依赖,打包的时候打父模块,就是带root的这个 先clean,再package,就跟一般的项目一样了。 有可能遇到报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test&#xff…

[Java]JUC并发编程

JUC并发编程 一、什么是JUC 使用到 java.util 工具包、包、分类 二、线程和进程 进程:一个正在运行的程序,QQ.exe Music.exe 程序的集合; 一个进程往往可以包含多个线程,至少包含一个! Java默认有两个线程&#x…