winform 通过句柄控制另一个窗口显示

qq554006164 2014-08-28 02:55:26
我有两个独立程序,我现在要通过一个程序去控制另一个程序的显示和隐藏

/// <summary>
/// 该函数设置由不同线程产生的窗口的显示状态。
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。</param>
/// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。</returns>
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
/// <summary>
/// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
/// </summary>
/// <param name="hWnd">将被激活并被调入前台的窗口句柄。</param>
/// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。</returns>
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;

/// <summary>
/// 显示已运行的程序。
/// </summary>
public static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //显示,可以注释掉
SetForegroundWindow(instance.MainWindowHandle); //放到前端
Form.FromHandle(instance.MainWindowHandle).Show(); //这里报错了Application UnhandledException:Object reference not set to an instance of an object
}


当另一个程序是hide时,Form.FromHandle(instance.MainWindowHandle).Show(); 这样就会报错

该怎么让一个hide了的程序(它是一个托盘程序),显示出来呢
...全文
514 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgzy0220 2014-08-28
  • 打赏
  • 举报
回复
写在上一个Form里如Form1 Form2 fb = new Form2(); fb.fa = this; fb.Show(); this.Hide(); 写在Form2里 public Form1 fa; private void button3_Click(object sender, EventArgs e) { fa.Show(); mycomm.Close(); this.Close(); } 原理:命名Form1,Form2分别为fa,fb.fa = this;在Form2中 fa.Show();
bdmh 2014-08-28
  • 打赏
  • 举报
回复
用ShowWindow试试,等待窗体显示出来,再执行下一步代码,否则在它没准备好时,可能出错

110,566

社区成员

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

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

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