WH_CBT hook 另一个线程在 XP 中有效,但在 Win7 中

WH_CBT hook another thread works in XP but Win7

我想实现一个挂钩示例,用于拦截从我的 WinForm 应用程序到另一个进程(例如 'notepad' )的消息。 (不是全局钩子,只是监听指定线程的线程钩子,HookType是WH_GETMESSAGE)

我用c++写了一个hook dll并在c#中使用它。

之后,我从开始菜单或键入 cmd -> 记事本打开记事本。我发现我只能在xp环境下从记事本中收到消息,而在win 7中没有消息发送。

然后,我尝试通过我的 WinForm 应用程序创建 'notepad' 进程(在我的表单上放置一个按钮并使用 Process.Start("Notepad.exe") 打开它),神秘的是,它在 win 7 中工作。

所以,我不知道为什么记事本在 win 7 中从开始菜单启动时不起作用。

在 xp 中,无论记事本是从开始菜单启动还是通过我的应用程序启动,我都可以获得消息

我自己解决了这个问题。 只需在正确的平台上生成 c++ dll .. 基于 x64 的 win7,然后,一切正常。 :)