我想为另一个外部应用程序(与 .NET 无关,纯 Win32)制作一个 .NET 表单作为 TopMost 表单,因此它保持在该 Win32App 之上,而不是其他正在运行的应用程序。
我有 Win32App 的句柄(由 Win32App 本身提供),我已经通过C# 中的 P/Invoke尝试了Win32 SetParent() 函数,但是我的 .NET 表单被限制在 Win32App 中,这不是我想要的.
我想为另一个外部应用程序(与 .NET 无关,纯 Win32)制作一个 .NET 表单作为 TopMost 表单,因此它保持在该 Win32App 之上,而不是其他正在运行的应用程序。
我有 Win32App 的句柄(由 Win32App 本身提供),我已经通过C# 中的 P/Invoke尝试了Win32 SetParent() 函数,但是我的 .NET 表单被限制在 Win32App 中,这不是我想要的.
我认为您正在寻找的是 P/InvokeSetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)
是的!我已经有一个 SetWindowLongPtr 的 P/Invoke 导入(这是 x64 安全的)。并使用 Reflector 我搜索了 Form.Owner 属性(即 get_Owner(Form value) 方法)并设法更改了所有者
SetWindowLongPtr(childHdl, -8, OwnerHdl)
在我可以在这里发布解决方案之前,我正在查看 -8 (0xFFFFFFFFFFFFFFF8) 的含义,但乔尔已经指出了这一点。
谢谢!