获取任务栏中的窗口(EnumWindows函数)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取任务栏中的窗口(EnumWindows函数)相关的知识,希望对你有一定的参考价值。
EnumWindows可以获得系统中所有的窗口,但是要获得任务栏中的窗口该怎么做呢?别告诉我用GetDesktopWindow函数和EnumChildWindows。那个函数会把各个子窗口都枚举出来。
参考技术A 你可以用 if (IsWindowVisible(hwnd)) //判断可见窗口使子窗口出现在任务栏中
【中文标题】使子窗口出现在任务栏中【英文标题】:make the child window appears in taskbar 【发布时间】:2013-04-02 09:55:06 【问题描述】:如何让子窗口出现在任务栏中,在win32程序中?
(WS_EX_APPWINDOW
扩展样式,仅对顶层窗口有帮助)
【问题讨论】:
在任务栏中有一个 child 窗口没有任何意义。也许你的意思是一个拥有的窗口? 我写了一个文字处理器,有几个文件,它们是子窗口,我希望每个文件都出现在任务栏中 对于子窗口仍然没有意义。选择任务栏项目会做什么? Windows 不会知道要隐藏哪些其他子窗口或如何破坏子窗口的 z 顺序。只有您的应用程序知道如何做到这一点。给每个文档一个单独的任务栏缩略图不是更合适吗(就像 IE 对单独的选项卡所做的那样)?或者如果你真的想要,我想你可以创建隐藏的***窗口,在激活时显示相应的文档。 当我收到激活消息时,我将更改 Z 顺序。而且我不会将文件作为子窗口,因为它们的大小将始终是父客户区的大小,因此它们将使用父窗口的菜单。 但是子窗口不能得到WM_ACTIVATE
消息。如果要模拟具有相应***窗口的子窗口,则实际模拟:制作与您的子窗口相对应的假***窗口。
【参考方案1】:
任务栏中通常只能出现弹出窗口,但您可以使用ITaskbarList
界面来执行此操作。
根据ITaskbarList::AddTab
的文档,
任何类型的窗口都可以添加到任务栏...
我自己没有尝试过,所以我不知道这是否适用于子窗口,但这是我能想到的唯一可能成功的方法。
更多信息请参见http://msdn.microsoft.com/en-us/library/windows/desktop/bb774652(v=vs.85).aspx。
【讨论】:
我的程序不知道ITaskbarList
接口,需要添加什么代码才能使用?
您需要使用 CoCreateInstance
和 CLSID_TaskbarList / IID_ITaskbarList 创建一个实例。
我不知道COM,有没有这个API函数?以上是关于获取任务栏中的窗口(EnumWindows函数)的主要内容,如果未能解决你的问题,请参考以下文章