我想删除Windows 10多桌面任务栏上的窗口。对于Windows 8.1,我使用了ITaskbarList::DeleteTab,效果非常好。
对于Windows 10,此方法也将Windows从任务栏中隐藏,但在它之后,我在所有桌面上看到此窗口。我只想在一个桌面上看到这个窗口。
有人知道在Windows 10中从任务栏隐藏窗口并将此窗口保留在一个桌面上的方法吗?
下面你们可以看到,我在“在Windows 10中从任务栏隐藏窗口”下的意思:
将WS_EX_NOACTIVATE添加到窗口的EX样式中。https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles
使用此样式创建的顶层窗口在用户单击时不会成为前台窗口。当用户最小化或关闭前台窗口时,系统不会将此窗口带到前台。该窗口不应通过编程访问或通过可访问技术的键盘导航激活,例如Narrator。要激活该窗口,请使用SetActiveWindow或SetForeground Window功能。默认情况下,该窗口不会出现在任务栏上。要强制窗口出现在任务栏上,请使用WS_EX_APPWINDOW样式。
太长别读:
WS_EX_APPWINDOW
和WS_EX_TOOLWINDOW
。例子:
从扩展样式中删除标志:
SetWindowLong(myHWND, GWL_EXSTYLE,
GetWindowLong(myHWND, GWL_EXSTYLE) & ~WS_EX_APPWINDOW & ~WS_EX_TOOLWINDOW);
设置所有者:
SetWindowLongPtr(myHWND, GWLP_HWNDPARENT, myOwnerHWND);
完整解释:
尽管科迪的答案很好,但它并没有完全回答确切的问题。
确切的问题是:“如何显示一个没有出现在任务栏中但只出现在一个虚拟桌面上的窗口?
正如科迪所解释的,有几种html" target="_blank">方法可以移除窗口的任务栏按钮。然而,其中只有一种方法可以让它同时显示在一个虚拟桌面上。
如果在扩展样式中包含标志WS_EX_APPWINDOW
,它将强制窗口显示在任务栏中。这就是为什么在这种情况下它必须被清除。
如果在扩展样式中包含标志WS_EX_TOOLWINDOW
,它将强制窗口不显示在任务栏中,但将强制窗口显示在所有虚拟桌面上。因此,在这里也不是一个选项。
最后,如果您的窗口没有任何标志,当且仅当它没有所有者时,它才会显示在任务栏中。无论哪种方式,它都不会在所有虚拟桌面上强制自己。因此,解决方案是既没有标志,又设置所有者。
根据我的经验测试,在我的理解中,出现在任务栏预览中的窗口与通常出现在任务栏中的窗口完全相同。很久以前,比如在Windows 2000中,应用程序的每个符合条件的窗口都只显示为任务栏上的按钮。从Windows XP开始,任务栏分组成为一种选择,因此来自单个应用程序的所有符合条件的窗口都可以分组在一起,并显示为任务栏上的单个按钮。然后,在Windows Vista中,当您将鼠标悬停在相应的任务栏按钮上时,可以显示这些打开窗口的预览。Windows 8和Windows 10都没有改变这一基本规则;他们只改变了预览版的外观。
因此,我们可以参考MSDN文档,了解任务栏上显示哪些窗口的规则:
每当应用程序创建不属于自己的窗口时,Shell都会在任务栏上创建一个按钮。要确保窗口按钮放置在任务栏上,请使用WS_EX_APPWINDOW
扩展样式创建一个无主窗口。要防止窗口按钮放置在任务栏上,请使用WS_EX_TOOLWINDOW
扩展样式创建无主窗口。作为替代方案,您可以创建一个隐藏窗口,并将此隐藏窗口设为可见窗口的所有者。
雷蒙德·陈在这里更准确地总结了这些规则。引用他的话:
有一些关于哪些窗口进入任务栏的基本规则。简而言之:
WS_EX_APPWINDOW
extended样式,则它将显示(当可见时)
(尽管ITaskbarList接口有点混淆了这一点。)
您之前把它搞混了,调用ITaskbarList::DeleteTab
。这是不必要的。要确保窗口不会出现在任务栏中,只需应用与窗口何时出现在任务栏中相反的规则。
如果您有一个顶层无主窗口,它将显示在任务栏中,除非您删除WS_EX_APPWINDOW
扩展窗口样式。如果您有一个自己的窗口,那么它将不会显示在任务栏中,除非WS_EX_APPWINDOW
扩展窗口样式设置为强制显示。
因此,如果您设置了WS_EX_APPWINDOW
extended window样式,则应该将其删除。这将迫使窗口显示在任务栏中。
否则,您应该为窗口设置所有者。例如,使第二个窗口归第一个窗口所有。
我用pyGtk制作了一扇没有装饰的窗户。该窗口隐藏在任务栏和所有窗口的顶部。在linux上,它可以正常工作,但在MS Windows窗口上,它有时会隐藏在其他窗口下,并且在Windows中的任务栏上总是有“python.exe”。 代表我问题的图片: 如何从任务栏隐藏这个“python.exe”窗口? 我的代码:
问题内容: 我有一个时间周期性地与一些不同的任务; 我也有Runnable与此计划程序一起使用的不同之处。当我想从调度程序中删除任务之一时,问题就开始了。 有没有办法做到这一点? 我可以使用一个调度程序完成不同的任务吗?实现此目的的最佳方法是什么? 问题答案: 只需取消以下项返回的未来: 要注意的另一件事是,取消不会从计划程序中删除任务。它所确保的是isDone方法总是返回true。如果继续添加此
问题内容: 如何编写一个从先前编译的JAR中删除文件的ant任务? 假设我的JAR文件为: …并且我想要一个没有包的JAR文件版本,我需要使用ant剥离它,以便最终得到一个包含以下内容的JAR: 谢谢! 问题答案: 您是否尝试过使用任务? 例如:
问题内容: 我想让我的程序显示在任务栏中,但仍然没有传统的Windows寄宿生。我该怎么办?我知道 self.overrideredirect(1) ,但是这从任务栏中删除了我的程序。 这适用于Windows 7。 问题答案: 我没有断言这是“正确”的方法,但是请看这是否对您有用:
问题内容: 我正在制作音乐播放器GUI,但无法使其显示在任务栏或Alt- Tab中。我已将overrideredirect()设置为true以删除边框和标题。我也做到了,这样当用户执行“鼠标单击并拖动”操作时,窗口就会移动。这是代码: 有什么办法可以使其至少出现在Alt-Tab中? 问题答案: 经过一些研究,我发现有一种方法可以执行此操作,但是它涉及使用ctypes,并且是Windows的唯一解决
此任务用于删除单个文件,目录或子目录。 还可以通过指定文件集来删除文件集。 默认情况下它不会删除空目录,需要使用属性来删除空目录。 它具有下面列出的各种属性。 1. Apache Ant删除任务属性 属性 描述 必需 要删除的文件 资源(文件,目录) 要删除的目录 资源(文件,目录) 是否显示每个已删除文件的名称 否 如果资源不存在,则不显示任何消息 否 无法删除资源时显示错误 否 也删除空目录