Python ctypes:SetWindowsHookEx 回调函数从未被调用

2024-04-28

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

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

我什至很幸运地找到了一个从 Python 访问 SetWindowsHookEx 函数的示例。 (这个特定的示例使用鼠标信号,但我可以更改常量来监听不同的消息)。

然而,上面的例子不起作用。无论我如何单击鼠标,回调函数都不会被调用,并且鼠标中键单击不会导致程序退出。

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

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

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


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

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

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

  2. SetWinEventHook 函数可能会给你你想要的。 WinEvent 挂钩可以在主程序中实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python ctypes:SetWindowsHookEx 回调函数从未被调用 的相关文章

随机推荐

  • 如何在“Where”子句之前写“Order By”子句

    我想写一个ORDER BY我之前的子句WHERE条件 因为我需要将结果截断为 10 但我需要首先按字母顺序对它们进行排序 我知道你不能把ORDER BY before WHERE那我该怎么办呢 我需要做类似以下的事情 SELECT FROM
  • protobuf-net v2 和 Monotouch:它如何混合?

    我一直在尝试将 protobuf net 与 MonoTouch 一起使用 但我不知道如何使用 尽管听说这是可能的 但我还没有找到任何教程或任何实际有效的示例 马克 格拉维尔证实了这一消息在他的博客上 http marcgravell bl
  • 在网络视图中打开 pdf 文件。

    我有一个应用程序 在网页视图中呈现的网页上有按钮 现在点击按钮 就会下载一个 pdf 文件 然后需要在同一个 web 视图中打开该文件 将下载侦听器附加到 Web 视图并更改 url 如下所示 https docs google com g
  • 主屏幕活动快捷方式

    我有 2 项活动 1 主要活动 2 第二个活动 我希望创建第二个活动的主屏幕快捷方式 Intent shortcutIntent new Intent getApplicationContext SecondActivity class s
  • Android - 深色模式问题:深色背景上的黑色文本

    当我启用深色模式时 我的应用程序上的某些菜单看起来很糟糕 非常暗的背景上的黑色文本 我对颜色完全是一个初学者 我还没有接触过 android studio 上默认颜色设置的任何内容 所以我有默认的两个主题 XML 和 Color Xml
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • 根据另一个 csv 文件过滤 csv 文件中的行并将过滤后的数据保存在新文件中

    大家好 所以我试图根据file1过滤file2 其中file1是file2的子集 但 file2 有一个描述列 我需要能够分析 file1 中的数据 我想做的是过滤 file2 并仅获取 file1 中的标题及其描述 我尝试了这个 但我不太
  • 为什么 PS1 不更新 git 分支名称?

    PS1 w git branch grep cut b 3 100 我按上面设置我的 PS1 但在我更改分支后 它不会更新提示中的分支名称git checkout 或使用以下命令更改存储库cd 如何解决这个问题 当反引号引用位被评估时PS1
  • 根据 pandas 中其他数据帧的值更改一个数据帧的值

    我有一个数据框 df1 id value 1 100 2 100 3 100 4 100 5 100 我有另一个数据框 df2 id value 2 50 5 30 我想用 df1 中的值替换 df2 中 id 的这些值 最终修改后的df1
  • 通过iPhone音频插孔读取数据

    我正在寻找一种方法来读取通过 iPhone 的音频插孔从 Arduino 发送的原始数据 我搜索了很多并发现this https github com sanjibahmad Is Headphone Plugged In tree mas
  • 编译时检查函数是否使用/未使用 C++

    我想在编译时检查是否有某些函数某堂课使用 未使用 相应地使编译过程失败 通过 例如如果函数F1在代码中的某处调用我希望编译成功 并且 if 函数F2称为我希望它失败 关于如何使用预处理器 模板或任何其他 C 元编程技术来做到这一点 有什么想
  • 视频作为网站背景? HTML 5

    我想使用视频作为背景 而不是自动拉伸到整个屏幕 背景 的图像 我还想旋转视频和图像 以便以任何顺序显示随机视频 图像 如果知道如何延迟视频播放 以便视频在网站加载后 30 秒只播放一次 那就太好了 thx 看看我的 jquery video
  • java.lang.IllegalArgumentException:在 Servlet 映射中生成无效的

    我遵循了这个问题的解决方案在 Java 构建路径上找不到超类 javax servlet http HttpServlet https stackoverflow com questions 22756153 the superclass
  • 基于 MySQL 中的另一列创建计算列

    我的表中有 2 列 varchar 8 and an int 我想要auto increment the int column当我这样做时 我想将值复制到varchar 8 column 但用 0 填充它直到它达到 8 个字符长 因此例如
  • jQuery mobile 在 Opera Mini 浏览器中失败。如何获得错误输出?

    I have a jQuery Mobile http en wikipedia org wiki JQuery Mobile website that works great on normal browsers but it fails
  • android 将自定义字体设置为油漆

    我想在油漆上绘制文字 如何用自定义字体绘制它 前 Helvetica 并且还粗体 我更愿意使用系统字体而不是从资源创建它 谢谢 如果 自定义字体 是指作为资源提供的字体 则以下代码应该有效 Typeface plain Typeface c
  • Java 压缩字符串

    我需要创建一个接收字符串并返回字符串的方法 防爆输入 AAABBBCCC 防爆输出 3A4B2C 好吧 这很尴尬 我在今天的面试中无法做到这一点 我正在申请初级职位 现在 我在家尝试制作一些静态工作的东西 我的意思是 不使用循环有点无用 但
  • 人们应该选择 ImmutableDictionary 还是 ImmutableSortedDictionary?

    我听说 NETSystem Collections Immutable集合被实现为平衡二叉树 以满足其不变性约束 甚至是传统上对哈希表进行建模的集合 例如Dictionary 通过使用积分值GetHashCode作为排序键 如果我有一种类型
  • 如何从 Jenkins 文件调用 groovy 脚本?

    我正在尝试将 Jenkinsfile 中的内容分离成一个常规脚本来制作 但它无法调用这些脚本 这是代码 usr bin env groovy node test node stage Checkout echo BRANCH NAME en
  • Python ctypes:SetWindowsHookEx 回调函数从未被调用

    我正在尝试用 Python 编写一个程序 该程序可以识别何时显示警报框 对话框 它正在处理多个监视器 我希望它在任务栏图标闪烁 弹出错误 通知等时在辅助监视器上显示可视化效果 据我所知 检测这些事件的方法是使用消息挂钩 如下所述 http