2013-03-04 293 views
2

一旦现在使用它作为父级,你将如何解除表单中的应用程序?SetParent挂钩,你怎么解除挂钩?

[DllImport("user32.dll")] 
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 

[DllImport("coredll.dll", SetLastError = true)] 
private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 

[DllImport("coredll.dll", SetLastError = true)] 
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

SetParent(setter, this.panel1.Handle); 

解除挂钩我试过SetParent(setter,setter);没有运气。

+0

我并不熟悉这一点,但我会尝试设置旧的父母(不管那是什么),通过存储它之前设置新的。 – TGlatzer 2013-03-04 05:54:20

+0

对不起,我无法理解'从你的表单中解开一个应用程序' - 这是什么意思?就像您将Chrome标签拖放到自己的应用中一样?请详细说明:) – 2013-03-04 05:55:33

+0

你必须知道。 – ploxtic 2013-03-04 05:56:15

回答

0

SetParent返回上一个父窗口句柄。要“解除”窗口,您应该能够用最初返回的句柄调用SetParent。

+0

nope。除非你必须通过你的程序移动窗口,否则这是行不通的。卡在表格/面板 – ploxtic 2013-03-05 02:33:49

+0

如果以前的所有者是桌面,我不确定是否会有任何明显的视觉效果恢复父母,除非你移动其中一个参与窗口或其他内容。 – 2013-03-05 04:58:04

+0

Chrome,Notepad:两者都不会在IntPtr.Zero或-1,null或其自己的句柄之外反弹回窗体/面板之外。它对你有用吗?或者你正在考虑“最初回来”的那个句柄。 – ploxtic 2013-03-05 05:36:51

0

我知道这是晚了,但我可以在零通过从母公司脱钩:

SetParent(process.MainWindowHandle, IntPtr.Zero); 

这将设置桌面窗口作为新的母公司。