获取TaskBar中的应用程序数量

时间:2010-03-28 17:07:19

标签: c# .net windows taskbar

我一直想知道如何做多年。我正在创建一个小应用程序,我需要弄清楚在TaskBar中显示了多少个应用程序或窗口。

我还没有找到任何关于此的信息,我会感激任何帮助。

谢谢:)

4 个答案:

答案 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);