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

时间:2008-09-25 12:49:57

标签: winapi window owner

我想将.NET表格作为另一个外部应用程序(不是.NET相关的纯Win32)的TopMost表单,因此它保持在Win32App之上,但不会运行其他应用程序。

我有Win32App的句柄(由Win32App本身提供),我通过Win32 SetParent() function尝试了P/Invoke in C#,但后来我的.NET表单被限制在Win32App中,而不是我想要的是什么。

3 个答案:

答案 0 :(得分:13)

我认为你正在寻找P / Invoke SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)

Google Search

答案 1 :(得分:2)

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

更改所有者
SetWindowLongPtr(childHdl, -8, OwnerHdl)

在我发布解决方案之前,我正在查看-8(0xFFFFFFFFFFFFFFF8)的含义,但Joel已经指出了它。

谢谢!

答案 2 :(得分:-1)

问这个问题至今已有12年了,所以我想我会提供here的最新答案。

请勿使用GWLP_HWNDPARENT索引调用SetWindowLongPtr来更改子窗口的父窗口。而是使用SetParent函数。