C# winfrom项目,怎么样实现通过WINAPI 关闭对象的句柄窗口后,还能再次获取该句柄窗口

sxl_88 2015-02-13 12:57:26
在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);
}
...全文
354 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-02-13
  • 打赏
  • 举报
回复
API.SetParent(ptrskypeWnd, this.panel1.Handle); 这是把它放进去 你试试API.SetParent(ptrskypeWnd, null); 或者把null换成0,总之让它没有父窗体
sxl_88 2015-02-13
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
在你的窗体打开之前,外部窗体肯定是先打开了吧 那么在你的窗体关闭后,外部窗体哪里去了,回到外部了吗,还是随着你的窗体一起关闭了? 可以试试先把它移出panel,让它回到外面,再关闭你的窗体
目前是一起关闭了,怎么让它移出panel,让它回到外面呢?
於黾 2015-02-13
  • 打赏
  • 举报
回复
在你的窗体打开之前,外部窗体肯定是先打开了吧 那么在你的窗体关闭后,外部窗体哪里去了,回到外部了吗,还是随着你的窗体一起关闭了? 可以试试先把它移出panel,让它回到外面,再关闭你的窗体
於黾 2015-02-13
  • 打赏
  • 举报
回复
问题就是你在关闭窗体时做了什么,是否把外部窗体给关了? 关了当然取不到句柄了
sxl_88 2015-02-13
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
什么都不做不行吗,会出现什么问题? 你不是在关闭自己的窗体的时候,顺便把外部加载进来的窗体一并关闭了吧
问题出在下次再进入from窗体后,就无法再次获得取外部窗体的句柄。怎么样解决下这个问题?
於黾 2015-02-13
  • 打赏
  • 举报
回复
什么都不做不行吗,会出现什么问题? 你不是在关闭自己的窗体的时候,顺便把外部加载进来的窗体一并关闭了吧

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧