Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个窗口句柄获取实时消息_C#_Winapi_Pinvoke - Fatal编程技术网

C# 从另一个窗口句柄获取实时消息

C# 从另一个窗口句柄获取实时消息,c#,winapi,pinvoke,C#,Winapi,Pinvoke,我正在尝试从Windows获取消息,就像Microsoft Spy++那样处理软件。我非常确定应该有一个使用p/invoke的解决方案,但我一直无法确定哪些方法可以让我得到这个解决方案 下面是Microsoft Spy++从另一个窗口句柄获取消息的屏幕截图。 任何一条建议或信息都肯定会有帮助。谢谢!:) 您是否也在编写调试风格的工具?如果可以有效地调试目标进程,我可以想到一些不好的地方,但如果只是尝试与其他应用程序“正常”交互,就不应该尝试这样做。截取信息后,您打算如何处理它?SetWindo

我正在尝试从Windows获取消息,就像Microsoft Spy++那样处理软件。我非常确定应该有一个使用p/invoke的解决方案,但我一直无法确定哪些方法可以让我得到这个解决方案

下面是Microsoft Spy++从另一个窗口句柄获取消息的屏幕截图。


任何一条建议或信息都肯定会有帮助。谢谢!:)

您是否也在编写调试风格的工具?如果可以有效地调试目标进程,我可以想到一些不好的地方,但如果只是尝试与其他应用程序“正常”交互,就不应该尝试这样做。截取信息后,您打算如何处理它?SetWindowHookEx()会这样做,但是代码必须托管在Windows加载到目标进程的DLL中-这在.Net语言中是无法实现的。
SetWindowsHookEx
是魔法的名称,特别是
WH_CALLWNDPROC
类型之一。从托管代码执行此操作既不简单也不方便,因为您需要(至少)一个DLL来导出一个合适的非托管钩子入口点,这是纯C#无法创建的,即使使用不安全的代码也是如此。还有其他监视应用程序的方法可能更合适或更方便,具体取决于您试图获取这些消息的原因(例如,UI自动化API)。具体而言,键盘挂钩(而非通用消息挂钩)可以用托管代码编写,在处理这一问题时会遇到很多问题。如果您对应用程序状态的高级更改感兴趣,还有一个问题--它们不捕获键盘事件,而是捕获键盘事件的结果,这可能更方便,也可能不方便。