デスクトップにあるアイコンの数と位置を知りたい。
|
通常デスクトップには色々なアイコンがありますが、それらの数とそれらが置かれている位置(X,Y座標)をアプリケーション中で把握したいのです。
デスクトップを覆っているリストビューコントロールに対して、メッセージを投げるなりAPIを発行するなりしてください。
Commctrl.pas の ListView_XXXXXX関数は、結構豊富です。テストすることをお勧めします。
以下サンプルプログラムです。
uses Commctrl;
// デスクトップリストビューのハンドル所得
function GetDesktopListView: HWnd;
var
Hdl:HWnd;
begin
Hdl := FindWindow('Progman', 'Program Manager');
if not (Hdl = 0) then
begin
Hdl := FindWindowEx(Hdl, 0, 'SHELLDLL_DefView', '');
if not (Hdl = 0) then
begin
result := FindWindowEx(Hdl, 0, 'SysListView32', '');
exit;
end;
end;
result := 0;
end;
// アイコンの表示数をえる
procedure TForm1.Button1Click(Sender: TObject);
var
hLView:Hwnd;
begin
hLView := GetDesktopListView;
if not (hLView = 0) then
Label1.Caption := AnsiString('Count: ')
+ IntToStr(ListView_GetItemCount(hLView))
else
Label1.Caption := 'ハンドルの取得に失敗しました';
end;
詳細は、Win32 SDK Referenceを調べてください。
また、IE4&Active Desktopをインストールしている環境では動かないかもしれません。 |
|