核心代码

程序启动时,将定义多个系统范围的热键(详见:WPF 全局热键

当用户按下 [快捷键1] 时:启用计时器

当用户按下 [快捷键2] 时:停止计时器

当用户按下 [快捷键3] 时:显示主窗口

计时器启动后,每隔0.5秒调用User32.EnumWindows遍历一次所有的窗口。若窗口可见,则获取创建该窗口的线程。若列表包含该线程的名称,则使用User32.ShowWindowAsync设置窗口的显示状态为隐藏。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
EnumWindows(Function, IntPtr.Zero);
bool Function(IntPtr hwnd, IntPtr lParam)
{
if (IsWindowVisible(hwnd))
{
GetWindowThreadProcessId(hwnd, out int id);
var p = Process.GetProcessById(id);
if (Data.Contains(p.ProcessName))
{
ShowWindowAsync(hwnd, WindowShowStyle.SW_HIDE);
Windows.Add(hwnd);
}
}
return true;
}

计时器停止后,通过User32.ShowWindowAsync将已隐藏的窗口全部恢复显示。