当前位置:首页 > Windows程序 > 正文

[delphi技术]隐藏/显示任务栏

2021-03-29 Windows程序

var  h:THandle; //变量
h:=FindWindow(‘Shell_TrayWnd‘,nil);
ShowWindow(h,SW_hide);


2.显示任务条
h:=FindWindow(‘Shell_TrayWnd‘,nil);
ShowWindow(h,SW_SHOW);

 

3.怎样在Delphi中调用API函数使任务不在任务栏中显示出来

SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);

ShowWindow(Application.Handle, SW_HIDE);

 

PS.在 delphi 中如何找到任务栏的句柄?
hTray:=FindWindow(‘Shell_TrayWnd‘,nil);

ShowWindow(hTray,SW_HIDE);

至于类名 Shell_TraWnd,要用工具来找比较快,Delphi装好后会有一个Win32Sight,可以查找桌面、任务栏、任何应用程序窗体的类名。


4、自动隐藏任务栏和取消自动隐藏任务栏(隐藏与自动隐藏不同自动隐藏是鼠标离开时就隐藏,进入时就显示)
需要利用一个API函数:SHAppBarMessage
WINSHELLAPI UINT APIENTRY SHAppBarMessage( DWORD dwMessage,PAPPBARDATA pData);
APPBARDATA结构体

示例:
1、 设置任务栏自动隐藏或者取消自动隐藏
procedure TForm1.AutoHideTaskBar(bHide: BOOL);
const ABM_SETSTATE = 10 ;  // 0x0000000a  必须的,因为Delphi中不存在;
var
    apBar: APPBARDATA;
begin
    apBar.cbSize := sizeof(apBar);
    apBar.hWnd := FindWindow(‘Shell_TrayWnd‘, nil);
    if  apBar.hWnd >0  then
    begin
        if (bHide = TRUE) then
            apBar.lParam := ABS_AUTOHIDE //自动隐藏
       else
            apBar.lParam := ABS_ALWAYSONTOP; //取消自动隐藏
       SHAppBarMessage(ABM_SETSTATE, apBar); //设置任务栏自动隐藏
    end;
end;

调用: AutoHideTaskBar(True);  //设置为自动隐藏   或者 AutoHideTaskBar(False);  //取消自动隐藏
注意: Delphi的dwMessage的参数中不存在ABM_SETSTATE,而windows的API中存在,,其值为0x0000000a  ;
所以在此设置ABM_SETSTATE,并且传入即可。直接使用ABM_SETAUTOHIDEBAR代替ABM_SETSTATE,是不起作用的。  

2、判断任务栏是否自动隐藏
function TForm1.IsTaskbarAutoHideOn : boolean;
var
    ABData : TAppBarData;
begin
     ABData.cbSize := sizeof(ABData);
     Result := (SHAppBarMessage(ABM_GETSTATE, ABData) and ABS_AUTOHIDE) > 0;
end; 

三、API函数SHAppBarMessage的说明:
WINSHELLAPI UINT APIENTRY SHAppBarMessage(
    DWORD dwMessage,   //消息名名
    PAPPBARDATA pData   //AppBarData结构指针
   );参数说明:
dwMessage   可以为下列参数
ABM_ACTIVATE                通知系统一个 appbar 已经激活;
ABM_GETAUTOHIDEBAR   检索屏幕边缘的 appbar
ABM_GETSTATE                检索最顶层的Microsoft Windows任务栏的状态
ABM_GETTASKBARPOS     检索Windows任务栏的边界矩形
ABM_NEW                        注册一个新的appbar,该系统并发送一消息给appbar
ABM_QUERYPOS              appbar 大小和屏幕位置
ABM_REMOVE                  取消注册一个 appbar,并从系统内部列表移出
ABM_SETAUTOHIDEBAR   在屏幕边缘注册或取消注册自动隐藏appbar
ABM_SETPOS                   设置appbar 的大小和屏幕位置
//ABM_SETSTATE              设置appbar为最顶层,设置状态 Delphi中没有
ABM_WINDOWPOSCHANGED 当appbar得状态发送改变时向系统发送消息
pData                               一个APPBARDATA结构体
APPBARDATA结构体,结构跟参数说明:
typedef struct _AppBarData { // abd 
    DWORD  cbSize;                  // sizeof(APPBARDATA) 
    HWND   hWnd;                    // handle of appbar 任务栏句柄、
    UINT   uCallbackMessage;   // see below callback指针
    UINT   uEdge;                      // see below 边缘的位置s
    RECT   rc;                             // see below 矩形区域
    LPARAM lParam;                   // see below 状态
    ABS_AUTOHIDE;                   //自动隐藏ABS_ALWAYSONTOP;//取消自动隐藏
} APPBARDATA, *PAPPBARDATA;


 

2.================================================================

 

   

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69655.html