如何使用其句柄更改窗口所有者

时间:2020-03-06 14:43:06  来源:igfitidea点击:

我想为另一个外部应用程序(不是与.NET相关的纯Win32)制作一个.NET窗体作为TopMost窗体,以便它保持在该Win32App之上,而不是其余正在运行的应用程序。

我拥有Win32App的句柄(由Win32App本身提供),并且我已经尝试通过C#中的P / Invoke来尝试Win32 SetParent()函数,但是随后我的.NET Form被限制在Win32App中,这不是我想要的。

解决方案

我想我们正在寻找的是P / InvokeSetWindowLongPtr(win32window,GWLP_HWNDPARENT,formhandle)

谷歌搜索

是的!
我已经有一个P / Invoke导入SetWindowLongPtr(这是x64安全的)。然后使用Reflector搜索Form.Owner属性(即get_Owner(Form value)方法)
并设法用

SetWindowLongPtr(childHdl, -8, OwnerHdl)

在我将解决方案发布到这里之前,我正在查看-8(0xFFFFFFFFFFFFFFFFF8)的含义,但是Joel已经指出了这一点。

谢谢!