问题描述
- 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一直为零,找不到桌面窗口句柄。是不是那有误呀,帮忙看看?
时间: 2024-09-19 00:35:53