为什么Control.FromHandle(IntPtr)在一个钩子进程中返回null并返回"Form"的有效对象?在另一个钩过程中?

Usm*_*man 5 .net c# spy++ winforms dll-injection

我正面临一个问题,从一些钩子进程中取出所有控件.我的SpyDll成功地启动了钩子流程,但当我查看声明时

控制控件= Control.FromHandle(MainWindowHandle),它将null返回到控制对象,其中"MainWindowhandle"只是该挂钩进程的本机主窗口句柄,在启动该进程后,您始终从.NET"Process"类中获取该处理.

但严重的是,它发生在其他一些钩子进程中,它是同一个C#.NET应用程序,它返回Main"WinForm"的有效对象.

那么为什么它不适用于上述情况呢?是否有正确使用"MainWindowHandle"的例外情况.在我的例子中,两者都是用C#编程的单独的.NET托管进程.在创建该流程时,是否需要特别维护任何流程配置?

关心乌斯曼

Zot*_*tta 0

1.) 请记住,可能有多个应用程序域,并且您只能在当前进程中获取当前应用程序域的控制对象。另外,你必须使用正确的运行时版本,但我不确定这一点。

2.) 无论如何,为什么你想要控制句柄,直接使用本机句柄要方便得多,你甚至可以在另一个进程中使用本机函数,无需 dll 注入。如果您确实需要托管控制对象,请查看Application.OpenForms集合而不是句柄搜索!