python - Pyhook 在尝试将窗口名称解释为 ASCII 时崩溃
问题描述
上下文:我正在使用 PyHook 开发鼠标和键盘监听器。
python经验:初学者
Python 解释器: 3.7
问题:当我将鼠标移到标题 Google Chrome 浏览器上并且当前网站是 Spotify 时,我收到以下错误:
TypeError:MouseSwitch() 缺少 8 个必需的位置参数:“msg”、“x”、“y”、“data”、“flags”、“time”、“hwnd”和“window_name”。
我发现了什么:我在这个社区发现了以下相关帖子:
与某些应用程序挂钩时,pythoncom 在 KeyDown 上崩溃
在那篇文章中,解决方案表明 Pyhook 在尝试将窗口名称解释为 ASCII 时存在错误。基于这个答案,帖子建议更改 Pyhook 的源 C 代码。另外,我发现了以下帖子,它解释了如何在 Python 中修改一般的库:
问题:是否有另一种解决方法可以在不修改源代码的情况下克服此问题?如果唯一的选择是更改源代码,有人可以给我更多详细信息:
- 如何找到这个库的源代码
- 如何在该帖子中实施建议的更改,并为没有太多 Python 经验的人提供更多解释。
堆栈跟踪:
File "C:\....\Local\Programs\Python\Python37\lib\site-packages\pyHook\HookManager.py", line 322, in MouseSwitch
event = MouseEvent(msg, x, y, data, flags, time, hwnd, window_name)
SystemError: <class 'pyHook.HookManager.MouseEvent'> returned a result with an error set
TypeError: MouseSwitch() missing 8 required positional arguments: 'msg', 'x', 'y', 'data', 'flags', 'time', 'hwnd', and 'window_name'
谢谢您的帮助。如果我解释有误,请原谅我。
一段代码:
import pyHook
import pythoncom
import traceback
import threading
lock = threading.Lock()
try:
def create_element(event):
global t
lock.adquire()
print('MessageName:', event.MessageName)
lock.release()
def onMouseEvent(event):
global t
t = threading.Thread(target=create_element, args=(event))
t.start()
def onKeyboardEvent(event):
global t
t = threading.Thread(target=create_element, args=(event))
t.start()
hm = pyHook.HookManager()
hm.KeyDown = onKeyboardEvent
hm.MouseAll = onMouseEvent
hm.HookKeyboard()
hm.HookMouse()
pythoncom.PumpMessages()
except:
hm.UnhookMouse()
hm.UnhookKeyboard()
hm=None
traceback.print_exc()
解决方案
推荐阅读
- java - 此 URL 不支持 HTTP POST 方法:IntellJ IDEA JSP Servlet、DAO AND VO
- java - 在 Java 代码中使用的不易察觉的字符列表,以防止其被复制、粘贴和编译
- redis - Redis 过期复制到从站
- javascript - 引入 V8 后,Google Apps 脚本无法为其他用户完全执行
- build - 如何在 azure devops 管道中将项目文件复制到构建文件夹中?
- java - Hibernate 集合持久性
- ionic-framework - 如何使用带电容器的 Ionic Native 的 facebook auth
- python - 在 Python 中使用请求为同一键发布多个值时遇到问题
- python - 将 InfluxDB 测量结果导出到带有标签的 Pandas Dataframe 作为它自己的列
- osclass - 从 osclass 中的 ajax 加载搜索中隐藏 index.php