Получить количество приложений в панели задач - PullRequest
5 голосов
/ 28 марта 2010

Мне было интересно, как это сделать целую вечность. Я создаю небольшое приложение, и мне нужно выяснить, сколько приложений или окон отображается на панели задач.

Я еще не нашел никакой информации по этому вопросу, я был бы признателен за любую помощь.

Спасибо:)

Ответы [ 4 ]

2 голосов
/ 28 марта 2010

Здесь - статья, показывающая, как получить окна, которые отображаются при использовании комбинации клавиш ALT + TAB.

По сути, вы получите те же окна, которые отображаются на панели задач (если это не окно инструментов, которое не отображается), но опять же, вы всегда можете проверить против WS_EX_TOOLWINDOW (не показано) и WS_EX_APPWINDOW (показано).

1 голос
/ 29 марта 2010

Вы можете посмотреть мой предыдущий ответ здесь ; основное отличие здесь в том, что вам просто нужно сосчитать окна, соответствующие заданным требованиям.

0 голосов
/ 30 марта 2010

Как уже говорили другие, вам нужно перечислить через окна, используя функцию 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);
0 голосов
/ 28 марта 2010

Насколько я знаю, нет управляемого способа доступа к панели задач. Вот ссылка , которая описывает, как получить доступ к панели задач через Windows API. Однако я при быстром сканировании не показывал ни «количество предметов», ни что-то подобное. Тем не менее это может указывать вам в правильном направлении.

...