我一直想知道如何做多年。我正在创建一个小应用程序,我需要弄清楚在TaskBar中显示了多少个应用程序或窗口。
我还没有找到任何关于此的信息,我会感激任何帮助。
谢谢:)
答案 0 :(得分:2)
Here是一篇文章,展示了如何使用ALT + TAB组合键显示的窗口。
基本上,您将获得任务栏中显示的相同窗口(除非它是未显示的工具窗口),但是再次,您可以始终检查 WS_EX_TOOLWINDOW (未显示) )和 WS_EX_APPWINDOW (显示)。
答案 1 :(得分:1)
您可以查看我之前的回答here;这里的主要区别是你只需要计算符合给定要求的窗口。
答案 2 :(得分:0)
据我所知,没有可访问任务栏的托管方式。这是一个link,它描述了如何通过Windows API访问任务栏。但是,我快速扫描没有显示任何“项目数量”或类似的东西。它仍然可能指向正确的方向。
答案 3 :(得分:0)
正如其他人所说,你需要使用Win32 EnumWindows函数通过窗口进行枚举,并以这种方式计算。
您还可以使用Process.GetProcesses();
枚举进程。但是,不是单独进程的浏览器窗口等窗口将不会显示在该列表中。
int appCount = 0;
public bool EnumerateWindows(IntPtr hwnd, IntPtr lParam)
{
if (IsWindowVisible(hwnd))
{
StringBuilder sb = new StringBuilder();
string text = "";
GetWindowText(hwnd, sb, 1024);
text = sb.ToString();
if (text != string.Empty && text != "Program Manager")
{
appCount++;
}
}
return true;
}
private int GetAppCount()
{
appCount = 0;
EnumWindows(EnumerateWindows, new IntPtr(0));
return appCount;
}
internal delegate bool EnumThreadWindowsCallback(IntPtr hwnd, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
internal static extern bool IsWindowVisible(IntPtr hwnd);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern int GetWindowText(IntPtr hWnd, [Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpString, int nMaxCount);