Delphiメモ

No030:有効スクリーンサイズを取得する

デスクトップ全体の大きさを調べるなら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;

ということになる。

トップに戻る

関連ページ