C#-获取打开的任务列表
我正在试图找到一种方法来获取C#中的开放任务。我一直在谷歌上搜索,只能找到如何获得进程列表。我只希望任务显示在任务栏上 此外,如果我能得到与任务相关联的流程,那就太酷了。如果可能,获取Vista用于ALT-TAB菜单的缩略图,如下图所示: 我假设我将不得不使用pinvokes,因为它看起来真的没有任何库可以做到这一点。有什么想法吗?从API(Win32)的角度来看,没有任务(至少不是Windows任务管理器/Alt选项卡显示的任务) 这些“任务”实际上是顶级窗口 因此,为了获得这些信息的列表,您需要(这里是它的详细信息)C#-获取打开的任务列表,c#,.net,taskbar,task,C#,.net,Taskbar,Task,我正在试图找到一种方法来获取C#中的开放任务。我一直在谷歌上搜索,只能找到如何获得进程列表。我只希望任务显示在任务栏上 此外,如果我能得到与任务相关联的流程,那就太酷了。如果可能,获取Vista用于ALT-TAB菜单的缩略图,如下图所示: 我假设我将不得不使用pinvokes,因为它看起来真的没有任何库可以做到这一点。有什么想法吗?从API(Win32)的角度来看,没有任务(至少不是Windows任务管理器/Alt选项卡显示的任务) 这些“任务”实际上是顶级窗口 因此,为了获得这些信息的列表,
然后查看窗口的样式,以确定它们是否实际上是顶级窗口。我还没有尝试过,但我怀疑是这样的:
using System.Diagnostics;
static void MyFunc()
{
Process[] processes = Process.GetProcesses();
foreach(Process p in processes)
{
if (p.MainWindowHandle != 0)
{ // This is a GUI process
}
else
{ // this is a non-GUI / invisible process
}
}
}
p.ProcessName != "explorer"
关键是要检查每个进程的WindowHandle。@abelenky17
我怀疑这并不能涵盖所有情况,例如,有些进程有几个顶级窗口(都出现在任务管理器中)。
例如,考虑Firefox、Windows资源管理器、IE等。这些应用程序可以在桌面上有多个窗口。
此外,它不会正确处理终端会话场景(因为您枚举了系统中运行的所有进程)
@丹C
这样做:
using System.Diagnostics;
static void MyFunc()
{
Process[] processes = Process.GetProcesses();
foreach(Process p in processes)
{
if (p.MainWindowHandle != 0)
{ // This is a GUI process
}
else
{ // this is a non-GUI / invisible process
}
}
}
p.ProcessName != "explorer"
你觉得还好吗?闻起来很难闻。这篇文章应该告诉你该做什么,它展示了如何构建自己的任务开关,包括枚举所有窗口并确定它们是否为“任务”所需的代码,还展示了如何使用PrintWindow api在XP上获得预览
此外,这里还讨论了用于确定Alt+Tab视图中显示内容的算法。基本上,您需要检查WS_EX_APPWINDOW和WS_EX_TOOLWINDOW,以及该窗口是否有所有者。闻起来,我想看看其他选项:)同意。回答问题的目的不是为了涵盖所有情况,也不是为了编写“玫瑰色”的代码,而是为了回答问题:即提供足够的缺失信息,以便原始提问者能够清除细节。正确。回到问题上来,我已经检查过了,关于firefox没有为新实例生成新流程的说法你是对的。因此,如果需要同一应用程序的每个单独窗口,那么唯一的选项就是枚举窗口。通过枚举窗口,我可以恢复最小化的窗口吗?“if(p.MainWindowHandle!=0)”错误,但“if(p.MainWindowTitle!=””有效,即使这有点麻烦。