1. 程式人生 > >VC實現顯示、自動隱藏工作列(SHAppBarMessage)

VC實現顯示、自動隱藏工作列(SHAppBarMessage)

一、顯示和隱藏工作列

要想對工作列進行操作,首先當然需要獲得工作列的控制代碼,所以首先利用FindWindow獲取控制代碼,再操作
示例程式碼:
1、隱藏工作列
HWND hWnd = FindWindow(_T("Shell_TrayWnd"),NULL);
ShowWindow(hWnd,SW_HIDE);
2、顯示工作列
HWND hWnd = FindWindow(_T("Shell_TrayWnd"),NULL);
ShowWindow(hWnd,SW_SHOW);

二、自動隱藏工作列和取消自動隱藏工作列(隱藏於自動隱藏不同)
需要利用一API函式:SHAppBarMessage
UINT_PTR SHAppBarMessage(      
    DWORD dwMessage,
    PAPPBARDATA pData
);

引數說明:
dwMessage   可以為下列引數
ABM_ACTIVATE                           啟用一個 appbar 
ABM_GETAUTOHIDEBAR               檢索螢幕邊緣的 appbar
ABM_GETSTATE                           檢索最頂層的Microsoft Windows工作列
ABM_GETTASKBARPOS                 檢索工作列
ABM_NEW                                    註冊一個新的appbar,該系統併發送一訊息給appbar 
ABM_QUERYPOS                           appbar 大小和螢幕位置 
ABM_REMOVE                               取消註冊一個 appbar,並從系統內部列表移出
ABM_SETAUTOHIDEBAR                在螢幕邊緣註冊或取消註冊appbar
ABM_SETPOS                               設定appbar 的大小和螢幕位置 
ABM_SETSTATE                           設定appbar為最頂層
ABM_WINDOWPOSCHANGED         當appbar得狀態傳送改變時向系統傳送訊息

pData 
一個APPBARDATA結構體

示例程式碼:

void AutoHideTaskBar(BOOL bHide)
{
      //這三句視情況加於不加
      #ifndef   ABM_SETSTATE 
      #define   ABM_SETSTATE             0x0000000a 
      #endif

       LPARAM lParam;
       if(bHide == TRUE)
       {
              lParam = ABS_AUTOHIDE;//自動隱藏
       }
       else
       {
              lParam = ABS_ALWAYSONTOP;//取消自動隱藏
       }

       APPBARDATA apBar; 
       memset(&apBar,0,sizeof(apBar)); 
       apBar.cbSize = sizeof(apBar); 
       apBar.hWnd = FindWindow("Shell_TrayWnd", NULL);
       if(apBar.hWnd != NULL) 
       { 
              apBar.lParam   =   lParam; 
              SHAppBarMessage(ABM_SETSTATE,&apBar); //設定工作列自動隱藏
       }   
}

呼叫 AutoHideTaskBar(TRUE);//or 
       AutoHideTaskBar(FALSE);//