获取任务栏中所有窗口的句柄

时间:2010-12-08 17:06:53

标签: c# windows winapi .net-4.0 taskbar

我是Windows API的新手,我正在尝试找到任务栏中显示的所有窗口的句柄。

到目前为止,我已成功:

  • 获取所有窗口的句柄
  • 获取窗口标题
  • 检查窗口是否可见
  • 检查窗口是否存在
  • 最小化窗口
  • 获取窗口的子窗口
  • 获取桌面窗口

我已经尝试获取桌面窗口的所有子窗口,这给了我近900个窗口句柄!所以我试图通过只获得可见的窗口和只有标题超过0个字符的窗口来过滤它们,但我仍然离开 - 有68个窗口?

一些Win API专家可以告诉我你如何做到这一点:-)并且也可能解释为什么有这么多窗口?

修改

private static bool HasAppWindowStyle(IntPtr handle)
{
    return (GetWindowLong(handle, GWL_EXSTYLE) & WS_EX_APPWINDOW) != 0;
}

3 个答案:

答案 0 :(得分:2)

您看到FindWindowEx样本了吗?你也可以过滤它们上面有文字,我认为你看到的窗口是Desctop项目(我不确定),但从桌面删除一些项目并查看更改。

答案 1 :(得分:1)

使用EnumWindows找到并具有任务栏按钮的顶级窗口将打开WS_VISIBLE和WS_EX_APPWINDOW样式标志。

答案 2 :(得分:1)

没有记录确切的算法,我在this answer中提出了一些可以正常工作的伪代码。