Python ctypes:从不调用SetWindowsHookExcallback函数

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

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

我甚至很幸运地find一个从Python访问SetWindowsHookEx函数的例子。 (这个特定的例子使用鼠标信号,但我可以改变常量来侦听不同的消息)。 http://www.python-forum.org/pythonforum/viewtopic.php?f=2&t=11154

但是,上面的例子不起作用。 callback函数从来没有被调用,不pipe我的鼠标点击,鼠标中键单击不会导致程序退出。

这个例子是从2009年(预Windows 7?),但我不知道是否是这个问题。

所以,我的问题是,任何人都可以1.找出为什么代码工作,或2.告诉我另一种方式来实现我在做什么(最好在Python中,但我会去其他语言如果necesarry)。

编辑:是否有可能做我想要的WMI? 我不太了解WMI,但我知道它有非常好的Python界面。

Solutions Collecting From Web of "Python ctypes:从不调用SetWindowsHookExcallback函数"

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

我可以想出两个办法来解决这个问题:

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

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