Delphi Tips 
-----------------------------

0108  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.2
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/09/27 西坂良幸 編集
デスクトップにあるアイコンの数と位置を知りたい。

通常デスクトップには色々なアイコンがありますが、それらの数とそれらが置かれている位置(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をインストールしている環境では動かないかもしれません。
参照: [builder:5968] <Windows> <アイコン>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp