在c#中切换应用程序,如任务管理器
本文关键字:任务管理器 应用程序 | 更新日期: 2023-09-27 18:06:08
我想写一个c#应用程序,可以在一些正在运行的应用程序之间切换。它应该做的功能像窗口中的Alt+Tab。我使用来自Windows API的SetForegroundWindow()
函数,但是如果应用程序在Windows任务栏上最小化,它就不能很好地工作。所以我增加了ShowWindow()
功能,但有一个问题,我不可能显示窗口的原始大小,用户设置。
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
示例:我最大化窗口,然后最小化它到任务栏。当我呼叫:
ShowWindow(processWindowHandle, ShowWindowCmd.SW_NORMAL);
WindowsApi.SetForegroundWindow(processWindowHandle);
窗口没有最大化。我试着玩ShowWindowCmd.SW_NORMAL
参数,但结果相同。
我以前这样做过,您想要打开所有内容的列表,最小化所有内容,然后再次遍历该列表,将每个程序与要恢复的程序进行比较,然后恢复那个程序。您需要一种方法来识别您想要恢复的窗口,我过去使用MainWindowTitle,因为我可以控制环境,因此可以保证每个MainWindowTitle都是唯一的,您可能没有这种奢侈。
我过去使用的代码如下,它工作得很好:
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
void SwitchDatabase(string mainWindowTitle)
{
try
{
bool launched = false;
Process[] processList = Process.GetProcesses();
foreach (Process theProcess in processList)
{
ShowWindow(theProcess.MainWindowHandle, 2);
}
foreach (Process theProcess in processList)
{
if (theProcess.MainWindowTitle.ToUpper().Contains(mainWindowTitle.ToUpper()))
{
ShowWindow(theProcess.MainWindowHandle, 9);
launched = true;
}
}
}
catch (Exception ex)
{
ThrowStandardException(ex);
}
}