デスクトップ全体の大きさを調べるならTScreenオブジェクトを使えばいい。
ただそこから得られる幅と高さはタスクバーも込みであるというもの。
それらを除去した値が欲しい時にはSystemParametersInfo APIを使う。
function SystemParametersInfo(uiAction, uiParam: UINT; pvParam: Pointer; fWinIni: UINT): BOOL; stdcall;
定義を見ても何がなにやらなので実際知っておけばいいことは、
第1引数にSPI_GETWORKAREA、
第3引数にTRect型の変数の前に@演算子を付けて指定すればいい。
次に、タスクバーの設定が「自動的に隠す」や「常に手前に表示」等になっているかどうかをチェックするには、
SHAppBarMessage APIを使う。
ShellAPI.pasに宣言されているのでuses節に追加する必要がある。
function SHAppBarMessage(dwMessage: DWORD; var pData: TAppBarData): UINT; stdcall;
第1引数にはやたらと指定するもんがあるので解説はしない。
今回はとりあえずABM_GETSTATEを指定すればOK。
第2引数はAPPBARDATA型のレコードを指定する。
判定はちとややこしいのでコードを示すと、
var
AD: TAPPBARDATA;
Buffer: Integer;
begin
AD.cbSize:= Sizeof(AD);
Buffer:= SHAppBarMessage(ABM_GETSTATE,AD);
if (Buffer and ABS_AUTOHIDE) = 1 then
begin
ShowMessage('[自動的に隠す]はON');
end
else
begin
ShowMessage('[自動的に隠す]はOFF');
end;
if (Buffer and ABS_ALWAYSONTOP) = 2 then
begin
ShowMessage('[常に手前に表示]はON');
end
else
begin
ShowMessage('[常に手前に表示]はOFF');
end;
end;
ということになる。