Udostępnij za pośrednictwem


Pasek zadań

Interfejs systemu Windows zawiera specjalny pasek narzędzi aplikacji klasycznej nazywany paskiem zadań . Możesz użyć paska zadań dla takich zadań, jak przełączanie się między otwartymi oknami i uruchamianie nowych aplikacji.

Notatka

Aby uzyskać informacje na temat zmian wprowadzonych na pasku zadań w systemie Windows 7, zobacz Rozszerzenia paska zadań.

 

Ten temat zawiera następujące sekcje.

Informacje o pasku zadań

Pasek zadań zawiera następujące elementy:

  • Menu Start
  • Pasek szybkiego uruchamiania (tylko system Windows Vista i starsze)
  • Przyciski paska zadań
  • Paski narzędzi (opcjonalnie)
  • Obszar powiadomień

Menu Start zawiera polecenia, które mogą uzyskiwać dostęp do programów, dokumentów i ustawień. Te polecenia obejmują Wszystkie Programy , Dokumenty , Panel Sterowania , Gry , Pomoc i Obsługa Techniczna , Zamknij i Wyszukiwanie Programów i Plików .

Menu Start we wcześniejszych wersjach systemu Windows zawierało elementy, takie jak Find i Run, których funkcjonalność została uwzględniona w Wyszukaj programy i pliki w systemie Windows Vista i nowszych.

Pasek Szybkiego uruchamiania dostępny w wersjach systemu Windows starszych niż Windows 7 zawiera skróty do aplikacji. System Windows udostępnia domyślne wpisy, takie jak Windows Internet Explorer, a użytkownik może dodawać wszelkie wybrane skróty. Ikony w tym obszarze odpowiadają na pojedyncze kliknięcie. W systemie Windows 7 lub nowszym ta funkcja jest zawarta w przyciskach paska zadań.

Powłoka umieszcza przycisk na pasku zadań za każdym razem, gdy aplikacja tworzy niezautowane okno — czyli okno, które nie ma elementu nadrzędnego i ma odpowiednie bity stylu rozszerzonego (zobacz Zarządzanie przyciskami paska zadańponiżej). Aby przełączyć się do okna, użytkownik kliknie przycisk okna. Ta funkcja została znacznie rozszerzona w systemie Windows 7. Aby uzyskać więcej informacji, zobacz Rozszerzenia paska zadań.

Aplikacje mogą umieszczać ikony w obszarze powiadomień, aby wskazać stan operacji lub powiadomić użytkownika o zdarzeniu. Na przykład aplikacja może umieścić ikonę drukarki w obszarze powiadomień, aby pokazać, że zadanie drukowania jest w toku. Jednak w systemie Windows 7 lub nowszym niektóre informacje podane wcześniej w obszarze powiadomień powinny być udostępniane za pośrednictwem przycisku paska zadań aplikacji. Obszar powiadomień znajduje się na prawej krawędzi paska zadań (jeśli pasek zadań jest poziomy) lub u dołu (jeśli pasek zadań jest pionowy). Aby uzyskać więcej informacji, zobacz Powiadomienia i Obszar Powiadomień.

Obszar powiadomień wyświetla również bieżący czas, jeśli ta opcja jest zaznaczona. Ta opcja jest dostępna jako:

  • system Windows 7 lub nowszym: lista rozwijana zegara na liście rozwijanej Włączanie lub wyłączanie ikon systemowych ikony obszaru powiadomień aplikacji Panel sterowania (również dostępne za pośrednictwem właściwości obszaru powiadomień).
  • Windows Vista: pole wyboru Zegar na stronie Obszaru powiadomień w oknie właściwości paska zadań i menu Start.
  • windows XP: Pokaż zegar pole wyboru na pasku zadań i menu Start właściwości.

Użytkownik może kliknąć prawym przyciskiem myszy pasek zadań, aby wyświetlić menu skrótów. Menu skrótów zawiera polecenia do okien kaskadowych, okien stosu, wyświetlania okien obok siebie, wyświetlania pulpitu, uruchamiania Menedżera zadań i ustawiania właściwości paska zadań. Menu skrótów udostępnia również opcję dodawania lub usuwania zestawu pasków narzędzi z paska zadań. Nowe paski narzędzi można dodać do tego menu, rejestrując je w kategorii CATID_DeskBand. Aby uzyskać więcej informacji, zobacz Implementowanie obiektów pasmowych. Należy pamiętać, że od systemu Windows 7 pasek zadań i obszar powiadomień mają oddzielne menu skrótów. Te menu skrótów udostępniają niektóre opcje, takie jak układ okien i dodają inne.

Opcje wyświetlania paska zadań

Pasek zadań obsługuje dwie opcje wyświetlania: Auto-Hide i, tylko w systemie Windows Vista i starszych, Always On Top (pasek zadań jest zawsze w tym trybie w systemie Windows 7 i nowszych). Aby ustawić te opcje, użytkownik musi otworzyć menu skrótów paska zadań, kliknij Właściwości, a następnie zaznacz lub wyczyść Auto-hide the taskbar pole wyboru lub Zachowaj pasek zadań na innych oknach pole wyboru. Aby pobrać stan tych opcji wyświetlania, użyj komunikatu ABM_GETSTATE. Jeśli chcesz otrzymywać powiadomienia o zmianie stanu tych opcji wyświetlania, przetwarzaj komunikat powiadomienia ABN_STATECHANGE w procedurze okna. Aby zmienić stan tych opcji wyświetlania, użyj komunikatu ABM_SETSTATE.

Obszar roboczy jest częścią ekranu, która nie jest zasłonięta przez pasek zadań. Aby pobrać rozmiar obszaru roboczego, wywołaj funkcję SystemParametersInfo z zestawem wartości SPI_GETWORKAREA. Aby pobrać współrzędne prostokąta opisujące lokalizację paska zadań, użyj komunikatu ABM_GETTASKBARPOS.

Można zakryć pasek zadań przez jawne ustawienie rozmiaru prostokąta okna równego rozmiarowi ekranu z SetWindowPos. W przypadku systemów Windows 2000 lub nowszych okno musi nie mieć ani WS_CAPTION, ani WS_THICKFRAME, albo musi być zmienione na rozmiar, w którym obszar klienta obejmuje cały ekran. W szczególności w tych systemach, jeśli pasek zadań jest ustawiony na Zawsze na wierzchu, pozostanie ukryty tylko wtedy, gdy aplikacja znajduje się na pierwszym planie.

Dodawanie skrótów do menu Start

Aby dodać element do podmenu Programs w systemie Microsoft Windows NT 4.0, Windows 2000 lub nowszym lub Windows 95 lub nowszym, wykonaj następujące kroki.

  1. Utwórz łącze powłoki przy użyciu interfejsu IShellLink.
  2. Uzyskaj nazwę PIDL folderu Programy przy użyciu polecenia SHGetSpecialFolderLocation, przekazując CSIDL_PROGRAMS.
  3. Dodaj link Powłoka do folderu Programy. Możesz również utworzyć folder w folderze Programy i dodać link do tego folderu.

Zarządzanie przyciskami paska zadań

Powłoka tworzy przycisk na pasku zadań za każdym razem, gdy aplikacja tworzy okno, które nie jest przypisane do właściciela. Aby upewnić się, że przycisk okna jest umieszczony na pasku zadań, utwórz okno nieposiadające właściciela z WS_EX_APPWINDOW rozszerzonym stylem. Aby zapobiec umieszczeniu przycisku okna na pasku zadań, utwórz niezarządzane okno z rozszerzonym stylem WS_EX_TOOLWINDOW. Alternatywnie możesz utworzyć ukryte okno i ustawić to ukryte okno jako właściciela widocznego okna.

Powłoka usunie przycisk okna z paska zadań tylko wtedy, gdy styl okna obsługuje widoczne przyciski paska zadań. Jeśli chcesz dynamicznie zmienić styl okna na taki, który nie obsługuje widocznych przycisków paska zadań, musisz najpierw ukryć okno (wywołując ShowWindow z SW_HIDE), zmienić styl okna, a następnie wyświetlić okno.

Przycisk okna zazwyczaj zawiera ikonę i tytuł aplikacji. Jeśli jednak aplikacja nie zawiera menu systemowego, przycisk okna zostanie utworzony bez ikony.

Jeśli chcesz, aby aplikacja zwróciła uwagę użytkownika, gdy okno nie jest aktywne, użyj funkcji FlashWindow, aby poinformować użytkownika, że komunikat czeka. Ta funkcja miga przyciskiem okna. Gdy użytkownik kliknie przycisk okna, aby aktywować okno, aplikacja może wyświetlić komunikat.

Modyfikowanie zawartości paska zadań

W wersji 4.71 i późniejszych Shell32.dll dodano możliwość modyfikacji zawartości paska zadań. Z poziomu aplikacji można teraz dodawać, usuwać i aktywować przyciski paska zadań. Aktywowanie elementu nie powoduje aktywowania okna; wyświetla element, jak naciśnięty na pasku zadań.

Funkcje modyfikacji paska zadań są implementowane w obiekcie Modelu obiektów składowych (COM) (CLSID_TaskbarList ), który uwidacznia interfejs ITaskbarList (IID_ITaskbarList). Aby zainicjować obiekt, należy wywołać metodę ITaskbarList::HrInit. Następnie można użyć metod interfejsu ITaskbarList, aby zmodyfikować zawartość paska zadań.

Dodawanie, modyfikowanie i usuwanie ikon w obszarze powiadomień

Użyj funkcji Shell_NotifyIcon, aby dodawać, modyfikować lub usuwać ikony z obszaru powiadomień. Parametr dwMessageShell_NotifyIcon jest komunikatem na pasku zadań, który określa akcję do wykonania. Parametr pnid jest wskaźnikiem do struktury NOTIFYICONDATA używanej do identyfikowania ikony i przekazywania wszelkich dodatkowych informacji potrzebnych do przetworzenia komunikatu przez system.

Następujące akcje można wykonać za pomocą ikon obszaru powiadomień.

  • Aby dodać ikonę do obszaru powiadomień paska zadań, wywołaj Shell_NotifyIcon z parametrem dwMessage ustawionym na NIM_ADD. Struktura NOTIFYICONDATA służy do określania uchwytu i identyfikatora ikony oraz dowolnego tekstu etykietki narzędzia. Jeśli użytkownik wybrał pole wyboru Pokaż zegar we właściwościach paska zadań, system umieszcza ikonę bezpośrednio po lewej stronie zegara. W przeciwnym razie ikona jest wyświetlana po prawej stronie lub w dolnej części paska zadań. Wszystkie istniejące ikony są przesuwane po lewej stronie, aby zapewnić miejsce na nową ikonę.
  • Aby zmodyfikować informacje o ikonie, w tym jej uchwyt ikony, tekst podpowiedzi i identyfikator komunikatu zwrotnego, wywołaj Shell_NotifyIcon z dwMessage ustawionym na NIM_MODIFY.
  • Aby usunąć ikonę z obszaru powiadomień, wywołaj Shell_NotifyIcon za pomocą parametru dwMessage ustawionego na NIM_DELETE.

Po zakończeniu operacji interfejsu użytkownika wróć fokus do obszaru powiadomień, wywołując Shell_NotifyIcon za pomocą dwMessage ustawioną na NIM_SETFOCUS. Można to zrobić na przykład, gdy ikona paska zadań wyświetla menu skrótów, ale użytkownik anuluje go, naciskając ESCAPE.

Odbieranie komunikatów zwrotnych z paska powiadomień

Aplikacje często umieszczają ikony w obszarze powiadomień paska zadań, aby służyć jako wskaźniki stanu. Możesz podać dodatkowe informacje, gdy użytkownik wykonuje akcje myszy, takie jak przeniesienie wskaźnika myszy na ikonę lub kliknięcie ikony.

System powiadamia o zdarzeniach myszy i klawiatury, wysyłając komunikat wywołania zwrotnego zdefiniowanego przez aplikację, który jest skojarzony z określoną ikoną. W ten sposób system może powiadomić aplikację, gdy na przykład użytkownik kliknie ikonę lub wybierze ją, naciskając klawisz.

Podczas dodawania ikony do paska zadań należy zdefiniować komunikat wywołania zwrotnego ikony. Identyfikator komunikatu wywołania zwrotnego jest określony w uCallbackMessage członku struktury NOTIFYICONDATA przekazywanej z NIM_ADD. Gdy wystąpi zdarzenie, system wysyła komunikat wywołania zwrotnego do procedury okna określonego przez element członkowski hWnd. Parametr wParam komunikatu zawiera identyfikator ikony paska zadań, w którym wystąpiło zdarzenie. Parametr lParam przechowuje komunikat myszy lub klawiatury skojarzony ze zdarzeniem. Na przykład gdy wskaźnik myszy przechodzi na ikonę paska zadań, lParam zawiera WM_MOUSEMOVE.

Wyniki różnych zdarzeń myszy można podsumować w następujący sposób:

  • Gdy użytkownik przenosi wskaźnik myszy na ikonę, system wyświetla tekst etykietki narzędzia określony w NOTIFYICONDATA.
  • Gdy użytkownik kliknie ikonę, aplikacja otrzyma powiadomienie WM_LBUTTONDOWN.
  • Gdy użytkownik kliknie prawym przyciskiem myszy ikonę, aplikacja otrzyma powiadomienie WM_RBUTTONDOWN.
  • Gdy użytkownik kliknie dwukrotnie ikonę, aplikacja otrzyma powiadomienie WM_LBUTTONDBLCLK.

Zazwyczaj kliknięcie ikony powoduje, że aplikacja wyświetli okno z dodatkowymi informacjami, kliknięcie prawym przyciskiem myszy wyświetla menu skrótów, a dwukrotne kliknięcie wykonuje domyślne polecenie menu skrótów.

Aby zapoznać się z przykładem zmiany tekstu dymka podpowiedzi skojarzonego z ikoną obszaru powiadomień, zobacz Podpowiedzi dymkowe dla ikon paska stanu.

Wersje 5.0 i nowsze Powłoki obsługują Shell_NotifyIcon zdarzenia myszy i klawiatury w inny sposób niż wcześniejsze wersje powłoki w systemach Windows NT 4.0, Windows 95 i Windows 98. Różnice są następujące:

  • Jeśli użytkownik zażąda menu skrótów ikony powiadomień za pomocą klawiatury, Powłoka w wersji 5.0 wysyła do skojarzonej aplikacji komunikat WM_CONTEXTMENU. Wcześniejsze wersje wysyłają komunikaty WM_RBUTTONDOWN i WM_RBUTTONUP.
  • Jeśli użytkownik wybierze ikonę powiadomienia za pomocą klawiatury i aktywuje ją za pomocą klawisza spacji lub klawisza ENTER, powłoka w wersji 5.0 wysyła do skojarzonej aplikacji powiadomienie NIN_KEYSELECT. Wcześniejsze wersje wysyłają komunikaty WM_RBUTTONDOWN i WM_RBUTTONUP.
  • Jeśli użytkownik wybierze ikonę powiadamiania za pomocą myszy i aktywuje go przy użyciu ENTER, powłoka w wersji 5.0 wysyła skojarzoną aplikację powiadomienie NIN_SELECT. Wcześniejsze wersje wysyłają komunikaty WM_RBUTTONDOWN i WM_RBUTTONUP.
  • Jeśli użytkownik przekazuje wskaźnik myszy na ikonę, z którą skojarzona jest etykietka narzędzia balonowego, powłoka w wersji 6.0 (Windows XP) wysyła następujące komunikaty.
      • NIN_BALLOONSHOW — wysyłany po wyświetleniu balonu (balony są kolejkowane).
      • NIN_BALLOONHIDE — wysyłane, gdy balonik zniknie — na przykład, gdy ikona zostanie usunięta. Ten komunikat nie jest wysyłany, jeśli dymek jest odrzucany z powodu przekroczenia limitu czasu lub kliknięcia myszą.
      • NIN_BALLOONTIMEOUT — wysyłana, gdy balon jest odrzucany z powodu przekroczenia limitu czasu.
      • NIN_BALLOONUSERCLICK — wysyłana, gdy balon jest odrzucany z powodu kliknięcia myszą.

Możesz wybrać, w jaki sposób powłoka powinna zachowywać się, wywołując Shell_NotifyIcon za pomocą dwMessage ustawioną na wartość NIM_SETVERSION. Ustaw element członkowski struktury NOTIFYICONDATA, aby wskazać, czy chcesz używać zachowania w wersji 5.0 czy sprzed wersji 5.0.

Powiadomienie o utworzeniu paska zadań

W programie Microsoft Internet Explorer 4.0 lub nowszym powłoka systemowa powiadamia aplikacje o stworzeniu paska zadań. Po utworzeniu paska zadań rejestruje komunikat z ciągiem TaskbarCreated, a następnie emituje ten komunikat do wszystkich okien najwyższego poziomu. Gdy aplikacja paska zadań odbierze ten komunikat, powinna założyć, że wszystkie dodane ikony paska zadań zostały usunięte i dodaj je ponownie. Ta funkcja ma zwykle zastosowanie tylko do usług, które są już uruchomione po uruchomieniu powłoki. W poniższym przykładzie przedstawiono bardzo uproszczoną metodę obsługi tego przypadku.

W systemie Windows 10 pasek zadań emituje również ten komunikat, gdy dpi ekranu podstawowego ulegnie zmianie.

LRESULT CALLBACK WndProc(HWND hWnd, 
                         UINT uMessage, 
                         WPARAM wParam, 
                         LPARAM lParam)
{
    static UINT s_uTaskbarRestart;

    switch(uMessage)
    {
        case WM_CREATE:
            s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
            break;
        
        default:
            if(uMessage == s_uTaskbarRestart)
                AddTaskbarIcons();
            break;
    }

    return DefWindowProc(hWnd, uMessage, wParam, lParam);
}

Korzystanie z paska zadań

Ta sekcja zawiera przykłady, w których pokazano, jak dodawać ikony do obszaru powiadomień paska zadań oraz jak przetwarzać komunikaty wywołania zwrotnego dla ikon paska zadań.

Dodawanie i usuwanie ikon paska zadań w obszarze powiadomień

Możesz dodać ikonę do obszaru powiadomień paska zadań, wypełniając strukturę NOTIFYICONDATA, a następnie przekazując strukturę do Shell_NotifyIcon, gdzie dwMessage jest ustawione na NIM_ADD. Elementy członkowskie struktury muszą określić uchwyt do okna, które dodaje ikonę, a także identyfikator ikony i uchwyt ikony. Możesz również określić tekst pomocniczy dla ikony. Jeśli chcesz otrzymywać komunikaty myszy dla ikony, określ identyfikator komunikatu wywołania zwrotnego, którego system powinien użyć do wysłania komunikatu do procedury okna.

Funkcja w poniższym przykładzie pokazuje, jak dodać ikonę na pasku zadań.

// MyTaskBarAddIcon - adds an icon to the notification area. 
// Returns TRUE if successful, or FALSE otherwise. 
// hwnd - handle to the window to receive callback messages 
// uID - identifier of the icon 
// hicon - handle to the icon to add 
// lpszTip - tooltip text 

BOOL MyTaskBarAddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip) 
{ 
    BOOL res; 
    NOTIFYICONDATA tnid; 
 
    tnid.cbSize = sizeof(NOTIFYICONDATA); 
    tnid.hWnd = hwnd; 
    tnid.uID = uID; 
    tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; 
    tnid.uCallbackMessage = MYWM_NOTIFYICON; 
    tnid.hIcon = hicon; 
    if (lpszTip) 
        hr = StringCbCopyN(tnid.szTip, sizeof(tnid.szTip), lpszTip, 
                           sizeof(tnid.szTip));
        // TODO: Add error handling for the HRESULT.
    else 
        tnid.szTip[0] = (TCHAR)'\0'; 
 
    res = Shell_NotifyIcon(NIM_ADD, &tnid); 
 
    if (hicon) 
        DestroyIcon(hicon); 
 
    return res; 
}

Aby usunąć ikonę z obszaru powiadomień paska zadań, wypełnij strukturę NOTIFYICONDATA i wywołaj Shell_NotifyIcon z dwMessage ustawionym na NIM_DELETE. Podczas usuwania ikony paska zadań określ tylko cbSize, hWndi uID składowych struktury. Na przykład:

// MyTaskBarDeleteIcon - deletes an icon from the notification area. 
// Returns TRUE if successful, or FALSE otherwise. 
// hwnd - handle to the window that added the icon. 
// uID - identifier of the icon to delete. 

BOOL MyTaskBarDeleteIcon(HWND hwnd, UINT uID) 
{ 
    BOOL res; 
    NOTIFYICONDATA tnid; 
 
    tnid.cbSize = sizeof(NOTIFYICONDATA); 
    tnid.hWnd = hwnd; 
    tnid.uID = uID; 
         
    res = Shell_NotifyIcon(NIM_DELETE, &tnid); 
    return res; 
}

Odbieranie zdarzeń myszy

Jeśli określisz wiadomość zwrotną dla ikony paska zadań, system wysyła wiadomość do aplikacji za każdym razem, gdy w prostokącie ograniczenia ikony wystąpi zdarzenie myszy. Parametr wParam komunikatu określa identyfikator ikony paska zadań, a lParam parametr komunikatu określa komunikat wygenerowany przez system w wyniku zdarzenia myszy.

Funkcja w poniższym przykładzie pochodzi z aplikacji, która dodaje ikony baterii i drukarki do paska zadań. Aplikacja wywołuje funkcję, gdy otrzyma wiadomość zwrotną. Funkcja określa, czy użytkownik kliknął jedną z ikon, a jeśli wystąpiło kliknięcie, wywołuje funkcję zdefiniowaną przez aplikację, aby wyświetlić informacje o stanie.

// On_MYWM_NOTIFYICON - processes callback messages for taskbar icons. 
// wParam - first message parameter of the callback message. 
// lParam - second message parameter of the callback message. 

void On_MYWM_NOTIFYICON(WPARAM wParam, LPARAM lParam) 
{ 
    UINT uID; 
    UINT uMouseMsg; 
 
    uID = (UINT) wParam; 
    uMouseMsg = (UINT) lParam; 
 
    if (uMouseMsg == WM_LBUTTONDOWN) 
    { 
        switch (uID) 
        { 
            case IDI_MYBATTERYICON: 
 
                // The user clicked the battery icon. Display the 
                // battery status. 
                ShowBatteryStatus(); 
                break; 
 
            case IDI_MYPRINTERICON: 
 
                // The user clicked the printer icon. Display the 
                // status of the print job. 
                ShowJobStatus(); 
                break; 
 
            default: 
                break; 
        } 
     } 

     return; 
 }