Last Updated 2003/08/06
Programming Tips Windows デスクトップ  索 引 
デスクトップのアイコン位置
2003/08/06

メモリマップドファイルで共有メモリを確保して SendMessage すればアイコン位置を取得できる.

  HWND hWndDesktop;
  HANDLE hFileMap;
  LPVOID lpView;
  POINT FAR *pos;
  hFileMap = CreateFileMapping(
                    (HANDLE)0xFFFFFFFF,
                    NULL,
                    PAGE_READWRITE,
                    0,
                    4096,
                    __TEXT("ShareData"));
  lpView = MapViewOfFile(hFileMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); 
  pos = (POINT FAR *)lpView;
  SendMessage(hWndDesktop, LVM_GETITEMPOSITION, 1, (LPARAM)pos);
  //
  // pos->x
  // pos->y
  //
  UnmapViewOfFile( (LPVOID)lpView );


デスクトップのウィンドウハンドル(hWndDesktop)は GetDesktopWindow() で取得するのではなく,SysListView32 から取得する.(実際にアイコンがあるウィンドウ)

  hWnd = FindWindow("Progman", "Program Manager");
  hWnd = FindWindowEx(hWnd, NULL, "SHELLDLL_DefView", NULL);
  hWnd = FindWindowEx(hWnd, NULL, "SysListView32", NULL);

アイコンの座標(pos)はプロセス間で共有できる場所になければならない.
(共有メモリやマップドファイル)

SendMessage() の台引数はアイコンへのインデックスである.(0から)


参照
前後のTips
デスクトップのアイコン位置

DSS ProgrammingTipsCGI Ver2.02