【发布时间】:2010-09-17 15:39:38
【问题描述】:
我正在为 Vista 创建一个 alt-tab 替代品,但在列出所有活动程序时遇到了一些问题。
我正在使用 EnumWindows 来获取 Windows 列表,但是这个列表很大。当我只打开 10 个窗口时,它包含大约 400 个项目。它似乎是每个控件和许多其他东西的 hwnd。
所以我必须以某种方式过滤这个列表,但我无法像 alt-tab 那样做到这一点。
这是我现在用来过滤列表的代码。它工作得很好,但我得到了一些不需要的窗口,比如 Visual Studio 中分离的工具窗口,我也想念 iTunes 和 Warcraft3 等窗口。
private bool ShouldWindowBeDisplayed(IntPtr window)
{
uint windowStyles = Win32.GetWindowLong(window, GWL.GWL_STYLE);
if (((uint)WindowStyles.WS_VISIBLE & windowStyles) != (uint)WindowStyles.WS_VISIBLE ||
((uint)WindowExStyles.WS_EX_APPWINDOW & windowStyles) != (uint)WindowExStyles.WS_EX_APPWINDOW)
{
return true;
}
return false;
}
【问题讨论】: