任务栏可见吗?

use*_*145 1 delphi taskbar visible

我需要知道任务栏是否已分配,但已选中"自动隐藏任务栏"并暂时隐藏任务栏.我有一个函数返回任务栏的高度(如果已分配),否则返回零.

但是,如果已设置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;
Run Code Online (Sandbox Code Playgroud)

有什么建议?

谢谢

Arj*_*pek 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;
Run Code Online (Sandbox Code Playgroud)


RRU*_*RUZ 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;
Run Code Online (Sandbox Code Playgroud)