gpt4 book ai didi

c# - 在 C# 中切换应用程序,如任务管理器

转载 作者:太空狗 更新时间:2023-10-29 21:54:35 33 4
gpt4 key购买 nike

我想编写 c# 应用程序,它将在一些正在运行的应用程序之间切换。它应该执行与 Windows 中的 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);
}
}

关于c# - 在 C# 中切换应用程序,如任务管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15638531/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com