C# 能否通过SetForegroundWindow API函数设置多个窗体
时间: 2023-12-29 17:03:01 浏览: 137
C#多重窗体
3星 · 编辑精心推荐
是的,您可以使用 SetForegroundWindow API 函数来设置多个窗口。但是,这个函数只能将一个窗口设置为前台窗口。如果您想要将多个窗口设置为前台窗口,您需要按照以下步骤执行:
1. 枚举所有需要设置为前台窗口的窗口句柄。
2. 对于每个窗口句柄,使用 SetForegroundWindow 函数将其设置为前台窗口。
下面是一个示例代码:
```csharp
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpWindowText, int nMaxCount);
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
static void SetForegroundWindows(string windowTitle)
{
List<IntPtr> handles = new List<IntPtr>();
EnumWindows(delegate (IntPtr hWnd, IntPtr lParam)
{
if (IsWindowVisible(hWnd))
{
StringBuilder sb = new StringBuilder(1024);
GetWindowText(hWnd, sb, sb.Capacity);
if (sb.ToString().Contains(windowTitle))
{
handles.Add(hWnd);
}
}
return true;
}, IntPtr.Zero);
foreach (IntPtr handle in handles)
{
SetForegroundWindow(handle);
}
}
```
在这个示例代码中,EnumWindows 函数用于枚举所有可见窗口,GetWindowText 函数用于获取窗口标题,SetForegroundWindow 函数用于将窗口设置为前台窗口。SetForegroundWindows 函数用于设置多个窗口为前台窗口,其参数为窗口标题。
阅读全文