一、显示和隐藏任务栏
要想对任务栏进行操作,首先当然需要获得任务栏的句柄,所以首先利用FindWindow获取句柄,再操作
示例:
1、隐藏任务栏
hWnd:integer;
hWnd := FindWindow('Shell_TrayWnd',nil);
ShowWindow(hWnd,SW_HIDE);
2、显示任务栏
hWnd:integer;
hWnd := FindWindow('Shell_TrayWnd',nil);
ShowWindow(hWnd,SW_SHOW);
二、自动隐藏任务栏和取消自动隐藏任务栏(隐藏与自动隐藏不同自动隐藏是鼠标离开时就隐藏,进入时就显示)
需要利用一个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 边缘的位置
RECT rc; // see below 矩形区域
LPARAM lParam; // see below 状态
ABS_AUTOHIDE;//自动隐藏ABS_ALWAYSONTOP;//取消自动隐藏
} APPBARDATA, *PAPPBARDATA;