Панель задач видна?

Мне нужно знать, назначена ли панель задач, но был ли установлен флажок «Автоматическое скрытие панели задач», и панель задач временно скрыта. У меня есть функция, которая возвращает высоту панели задач, если она была назначена, или ноль, если нет.

Но если был установлен параметр 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;

Какие-либо предложения?

Спасибо


person user983145    schedule 21.11.2011    source источник
comment
Почему бы вам не сравнить рабочую область с областью рабочего стола? Но я не могу представить, зачем вам вообще нужна эта информация.   -  person David Heffernan    schedule 21.11.2011
comment
Второе замечание Дэвида — почти самостоятельный ответ, потому что, если вам нужна эта информация, вы, скорее всего, делаете что-то нехорошее.   -  person Andreas Rejbrand    schedule 21.11.2011
comment
Хотя первое предложение в моем комментарии - бред!   -  person David Heffernan    schedule 21.11.2011
comment
Делать что-то плохое? Какой бессмысленный бред. Поскольку ваши крошечные умы не могут придумать творческих приложений, вы предполагаете, что я делаю что-то плохое. ДУХ!   -  person user983145    schedule 22.11.2011
comment
Креативный подход, ахахаха, хорошая попытка, парень!   -  person OnTheFly    schedule 24.11.2011


Ответы (2)


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;
person Arjen van der Spek    schedule 21.11.2011
comment
Спасибо и тебе, Арьен. Именно то, что я был после. - person user983145; 22.11.2011

вы можете использовать функцию 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;
person RRUZ    schedule 21.11.2011
comment
+1 благодаря ссылке и тесту <>0, который я считаю немного более естественным. - person Andreas Rejbrand; 21.11.2011
comment
Спасибо, RRUZ, я тоже проверю эту ссылку, но код выглядит хорошо. - person user983145; 22.11.2011