可以启动进程,最小化窗口,点击打开相同的窗口进程?

  • 本文关键字:窗口 进程 启动 最小化 c# wpf
  • 更新时间 :
  • 英文 :


我有一个全屏应用程序,这是隐藏Windows自己的任务栏(它应该)。我有一个按钮方法,我启动IE进程

Process.Start(pathWayToIE);

它工作得很好,但是当最小化该窗口时,我无法再次访问它,因为任务栏正在隐藏,因为我想要它这样做。是否有一种方法可以找到相同的过程,并在同一按钮单击上最大化该窗口,而不是打开IE的新窗口?

我确实有这个语句来查看一个窗口是否已经打开

var proc = Process.GetProcesses();

for(var i = 0; i < proc.Length; ++i)
{
if(proc[i].ProcessName == "msedge")
{
appName = proc[i].ProcessName;
appId = proc[i].Id;
}

}
int count = Process.GetProcesses().Where(p => p.ProcessName == appName).Count();
if (count > 1)
{
MessageBox.Show("A window is already open!");
}

因此,看看一个窗口是否实际打开工作,但如何最大化它再次我挣扎。

整个方法是这样的:

private void IE_Button_Click(object sender, RoutedEventArgs e)
{
var startEdge = @"pathwayToIE";

var appName = "";
var appId = 0;
var proc = Process.GetProcesses();

for(var i = 0; i < proc.Length; ++i)
{
if(proc[i].ProcessName == "msedge")
{
appName = proc[i].ProcessName;
appId = proc[i].Id;
}

}
Process myEdgeProcess = new Process();
ProcessStartInfo procStartInfo = new ProcessStartInfo(startEdge);
myEdgeProcess.StartInfo.FileName = startEdge;
int count = Process.GetProcesses().Where(p => p.ProcessName == appName).Count();
int currentRunningInstance = Process.GetProcesses().Where(c => c.Id == appId).Count();
if (count > 1)
{
MessageBox.Show("A window is already open!");
}
else
{

Process.Start(procStartInfo);

}
}

提前感谢提示

您可以通过p/InvokeShowWindow方法最大化进程窗口。将以下代码添加到您的类中:

const int SW_SHOWMAXIMIZED = 3;
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

您需要获取进程句柄,可以这样实现:

IntPtr handle = Process.GetProcesses()
.FirstOrDefault(p => p.ProcessName == "YourProcessName")
.MainWindowHandle;

然后调用ShowWindow,传递句柄和const值给它:

ShowWindow(handle, SW_SHOWMAXIMIZED);

完成:

static void Main(string[] args)
{
Process yourProcess = Process.GetProcesses()
.FirstOrDefault(p => p.ProcessName == "Viber");
IntPtr handle = yourProcess.MainWindowHandle;
ShowWindow(handle, SW_SHOWMAXIMIZED);
Console.WriteLine("Process " + yourProcess.ProcessName + " window maximized!");
Console.ReadKey();
}

关于ShowWindow,你可以在这里阅读:https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow

最新更新