我想将一个.NET窗体作为另一个外部应用程序(不是.NET相关的、纯Win32的应用程序)的TopMost窗体,这样它就可以在该Win32应用程序之上显示,但不会覆盖其他正在运行的应用程序。
我有Win32应用程序的句柄(由Win32应用程序本身提供),并尝试过使用Win32 SetParent()函数,通过C#中的P/Invoke,但那样我的.NET窗体会被限制在Win32应用程序中,而这并不是我想要的。
我想将一个.NET窗体作为另一个外部应用程序(不是.NET相关的、纯Win32的应用程序)的TopMost窗体,这样它就可以在该Win32应用程序之上显示,但不会覆盖其他正在运行的应用程序。
我有Win32应用程序的句柄(由Win32应用程序本身提供),并尝试过使用Win32 SetParent()函数,通过C#中的P/Invoke,但那样我的.NET窗体会被限制在Win32应用程序中,而这并不是我想要的。
我认为你正在寻找的是使用 P/Invoke 的方式 SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)
是的!我已经有了一个安全的x64 P/Invoke导入SetWindowLongPtr。并且使用Reflector搜索了Form.Owner属性(即get_Owner(Form value)方法),成功地更改了所有者。
SetWindowLongPtr(childHdl, -8, OwnerHdl)
在我能够在这里发布解决方案之前,我一直在寻找“-8(0xFFFFFFFFFFFFFFF8)”的含义,但是Joel已经指出了。
谢谢!