【问题标题】:Go to an already open program转到已经打开的程序
【发布时间】:2016-05-08 06:22:45
【问题描述】:

我使用这段代码来检查我的程序是否已经打开:

string RunningProcess = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName(RunningProcess);

if (processes.Length > 1)
{ return true; }

如果程序是开放的,它将它带到地板上并展示它。我能怎么做?谢谢。

【问题讨论】:

标签: c# process


【解决方案1】:

你必须导入以下方法:

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);

那么你可以这样调用这个方法:

ShowWindow(process.MainWindowHandle, 0);//Hide
ShowWindow(process.MainWindowHandle, 1);//Show

注意:如果窗口最小化,则只能显示窗口。如果它在另一个窗口的背景中,它不会显示它。

如果你想在另一个窗口的背景中显示一个窗口,你必须导入这个方法:

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

然后像ShowWindow一样调用:

SetForegroundWindow(process.MainWindowHandle);

注意:如果没有最小化,您可以只设置前景窗口。

您还可以将这两种方法与IsIconic 结合起来调用正确的方法:

[DllImport("user32.dll")]
static extern bool IsIconic(IntPtr hWnd);//Returns false if the window is minimized

显示主窗口的完整代码:

static void GotoProcess(Process process)
{
    if (IsIconic(process.MainWindowHandle))
    {
        ShowWindow(process.MainWindowHandle, 1);
    }
    else
    {
        SetForegroundWindow(process.MainWindowHandle);
    }
}

【讨论】:

  • 我试过了,但它不起作用。这是我的代码: System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess(); ShowWindow(process.MainWindowHandle, 1);
  • 非常抱歉,我试过了还是不行,总是打开一个新应用。
  • 如果你想避免打开一个新的应用程序,你可以使用GotoProcess去你已经打开的应用程序,然后关闭新的应用程序。您必须在打开新应用时检查此项。
猜你喜欢
  • 2014-10-07
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多