我需要知道任务栏是否已分配,但是已经选中了“自动隐藏任务栏”,并且暂时隐藏了任务栏。我有一个函数返回任务栏的高度(如果已分配)或否则返回零。
但是,如果设置了Windows“自动隐藏”选项,则功能仍然会返回任务栏的高度,尽管在光标移动到屏幕的下边缘之前它不可见。
当我开始 Image.Height:= Screen.Height-MyTaskbarHeight 它设置图像高度,好像任务栏一直可见。
在伪代码中,我需要的是
if Taskbar.Assigned then
if Taskbar.AutoHide.Checked then // Assume it is hidden
Image.Height:=Screen.Height else
Image.Height:=Screen.Height-MyTaskbarHeight;
有什么建议吗?
由于
答案 0 :(得分:7)
TAppBarData在ShellAPI中定义。
var
ABData : TAppBarData;
State: Cardinal;
begin
ABData.cbSize := sizeof(ABData);
State := SHAppBarMessage(ABM_GETSTATE, ABData);
Result := (State and ABS_AUTOHIDE) = ABS_AUTOHIDE;
end;
答案 1 :(得分:7)
您可以使用SHAppBarMessage
功能
Uses
ShellApi;
function IsTaskbarAutoHideOn : Boolean;
Var
ABData : TAppBarData;
begin
ABData.cbSize := SizeOf(ABData);
Result:= (SHAppBarMessage(ABM_GETSTATE, ABData) and ABS_AUTOHIDE)<>0;
end;
function GetTaskBarRect(var ARect: TRect): Integer;
var
ABData: TAppBarData;
begin
ABData.cbSize := SizeOf(ABData);
if SHAppBarMessage(ABM_GETTASKBARPOS, ABData) <> 0 then
Result := ABData.uEdge;
ARect := ABData.rc;
end;