其实,IntPtr formHwnd = FindWindow(null, "计算器"); 这段代码是有BUG的,比如你打开一个名为“计算器”的文件夹,那么FindWindow找到的其实是这个文件夹,而不是计算器程序。我们可以在主窗体第一次显示的时候,记下窗口句柄,代码如下:
private void Form1_Shown(object sender, EventArgs e)
{
FileOperator.SetValue("hwnd", Process.GetCurrentProcess().MainWindowHandle.ToString());
}
然后,显示已运行的程序时,从文件中读取之前记录的窗口句柄,代码如下:
/// <summary>
/// 显示已运行的程序
/// </summary>
public static void HandleRunningInstance(Process instance)
{
try
{
IntPtr hwnd = new IntPtr(Convert.ToInt32(FileOperator.GetValue("hwnd")));
ShowWindow(hwnd, SW_SHOWNORMAL); //显示
SetForegroundWindow(hwnd); //放到前端
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
综上,再整理一下,就能得到完美的解决方案。
希望本文所述对大家C#程序设计有所帮助。
注:相关教程知识阅读请移步到c#教程频道。










