gpt4 book ai didi

Python ctypes : SetWindowsHookEx callback function never called

转载 作者:可可西里 更新时间:2023-11-01 14:19:42 30 4
gpt4 key购买 nike

我正在尝试用 Python 编写一个程序,它知道何时显示警告框/对话框。它处理多个显示器,我希望它在任务栏图标闪烁、弹出错误/通知等时在辅助显示器上显示可视化。

据我所知,检测这些事件的方法是使用消息 Hook ,如下所述:http://msdn.microsoft.com/en-us/library/ms632589%28v=vs.85%29.aspx

我什至幸运地找到了一个从 Python 访问 SetWindowsHookEx 函数的示例。 (此特定示例使用鼠标信号,但我可以更改常量以监听不同的消息)。 http://www.python-forum.org/pythonforum/viewtopic.php?f=2&t=11154

但是上面的例子是行不通的。回调函数永远不会被调用,不管我点击鼠标,鼠标中键点击不会导致程序退出。

该示例来自 2009 年(Windows 7 之前的版本?),但我不知道这是否是问题所在。

所以,我的问题是,任何人都可以 1. 找出代码工作的原因,或者 2. 告诉我实现我正在做的事情的另一种方法(最好是在 Python 中,但如果需要我会使用其他语言) .

编辑:是否可以使用 WMI 执行我想要的操作?我不太了解 WMI,但我知道它确实有非常好的 Python 接口(interface)。

最佳答案

除了 WH_KEYBOARD_LL 和 WH_MOUSE_LL,Windows Hook 必须在 Windows 注入(inject)每个应用程序进程的 DLL 中实现。因此,您不能简单地在程序中实现回调并期望 Windows 运行它。

我可以想到两种方法来解决这个问题:

  1. 用 C 或 C++ 编写一个 DLL,实现 Hook 过程并通过某种形式的进程间通信通知您的主程序。然后在您的主程序中加载此 DLL,并将其模块句柄和在该 DLL 中实现的 Hook 过程传递给 SetWindowsHookEx。

  2. SetWinEventHook 函数可能会满足您的需求。 WinEvent Hook 可以在您的主程序中实现。

关于Python ctypes : SetWindowsHookEx callback function never called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458812/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com