使用 C# 在没有 P/Invoke 的情况下枚举 Windows XP 中任务栏上的窗口
有没有什么方法可以只检索任务栏上的窗口?
我想制作一个自定义“任务栏”,它将按任何顺序对应用程序进行分组(而不仅仅是像默认 Windows 任务分组那样按常见顺序)。
Is there any method of retrieving only windows on the taskbar?
I want to make a custom "taskbar" that will group APPs in any order (not just in common order like default windows task grouping).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须使用 P/Invoke。不幸的是,没有标准方法来确定窗口是否出现在任务栏(或 alt+tab 中):您只能猜测。
这是 VB 中一个相当古老的示例: http://www.thescarms.com/VBasic/alttab.aspx
在 OnTopReplica 中,我以类似的方式实现了它。您可以查看源代码(查看
OnTopReplica/WindowSeekers/ TaskWindowSeeker.cs
)。You'll have to use P/Invoke. Unfortunately, there is no standard way to determine whether a window would appear in the taskbar (or in alt+tab): you can only guess.
Here's a pretty old example in VB: http://www.thescarms.com/VBasic/alttab.aspx
And in OnTopReplica, I implemented it in a similar manner. You can take a look at the source code (check out
OnTopReplica/WindowSeekers/TaskWindowSeeker.cs
).一般来说,如果没有 P/Invoke,则不会。
但是,如果您只关心 .NET 进程内的托管 Windows 窗体窗口,则可以循环遍历
Application.OpenForms
并检查属性,尤其是Form.ShowInTaskbar
。对于 WPF,它是Application.Windows
。Generally, without P/Invoke -- no.
However, if you only care about managed, Windows Forms windows that are within your .NET process, you can loop through
Application.OpenForms
and examine properties, especiallyForm.ShowInTaskbar
. For WPF, it isApplication.Windows
.