C# winfrom项目,怎么样实现通过WINAPI 关闭对象的句柄窗口后,还能再次获取该句柄窗口
问题描述:
在C# Winfrom项目中,from窗体中,有一个Panel控件。
目前已经实现将对象的窗口通过winAPI获取到句柄窗口放到了Panel控件中。
请问怎么样实现关闭from窗体后,下次再进入from窗体后,还通过winAPI获取到句柄窗口放到了Panel控件中。
关闭from窗体的事情需要怎么样写,才能实现通过winAPI获取到句柄窗口放到了Panel控件中。
附上代码(通过winAPI获取到句柄窗口放到了Panel控件中):
private void Form2_Load(object sender, EventArgs e)
{
ptrskypeWnd = API.FindWindow("CBoxMainFrame", null);
API.SetWindowPos(ptrskypeWnd, new IntPtr(-2), 0, 0, Global.Globals.Object_WIDTH, Global.Globals.Object_HEIGHT, 0x0002);
System.Threading.Thread.Sleep(500);
MyInvoke mi = new MyInvoke(SetPanel);
BeginInvoke(mi, new object[] { ptrskypeWnd });
}
/// <summary>
/// 将嵌入Panel控件
/// </summary>
public void SetPanel(IntPtr ptrskypeWnd)
{
//label1.Text += str + System.Environment.NewLine;
API.SetParent(ptrskypeWnd, this.panel1.Handle);
API.ShowWindow(ptrskypeWnd, WindowsApi.API.SW_MAXIMIZE);
}
答
再Closing()事件中通过SetParent()把ptrskypeWnd还原到桌面窗口上(类名#32769),避免该窗口被连带关闭。
下次Load()事件中就能原样操作了。
答
IntPtr ptrDocmentWnd = API.FindWindow("#32769", null);
API.SetParent(ptrWnd, ptrDocmentWnd);
ptrDocmentWnd一直为零,找不到桌面窗口句柄。是不是那有误呀,帮忙看看?