デスクトップのアイコンを取得したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Cir
記事: 32
登録日時: 13年前
住所: 近畿地方

デスクトップのアイコンを取得したい

#1

投稿記事 by Cir » 13年前

こんばんは。
デスクトップのアイコンを取得しようしようとして、以下のようなコードを書きました。

コード:

//デスクトップのリストビューコントロールに登録されているイメージリストを取得
//hDeskはデスクトップのリストビューコントロールのウィンドウハンドル(FindWindowで得られたハンドル)
HIMAGELIST hImageList = ListView_GetImageList(hDesk, LVSIL_NORMAL);
//イメージリストからアイコンを取得
HICON hIcon = ImageList_GetIcon(hImageList, 0, ILD_TRANSPARENT);
このコードでは動作しませんでした。
そこでいろいろと調べてみると、他プロセスのイメージハンドルを取得するには、どうやらVirtualAllocEx関数を利用して、他プロセスにメモリを確保し、そこにイメージハンドルを書き込んでから自プロセスに移す、という作業をしなければならないようで、

コード:

//リストビューコントロールのプロセスにメモリを用意する
//hProcessはリストビューコントロールのプロセスのハンドル
HIMAGELIST *vimg = (HIMAGELIST *)VirtualAllocEx(hProcess, NULL, sizeof(HIMAGELIST), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
//イメージリストを取得
HIMAGELIST hIconImageList;
HIMAGELIST rimglst = ListView_GetImageList(hDeskWnd, LVSIL_NORMAL);	
WriteProcessMemory(hProcess, vimg, &rimglst, sizeof(HIMAGELIST), NULL);
ReadProcessMemory(hProcess, vimg, &hIconImageList, sizeof(HIMAGELIST), NULL);
//イメージリストからアイコンを取得
HICON hIcon = ImageList_GetIcon(hIconImageList, 0, ILD_TRANSPARENT);
//使ったらきちんと返しましょう
VirtualFreeEx(hProcess, vimg, 0, MEM_RELEASE);
とコードを書いて試してみたのですが、hIconがNULLになってしまいました(アイコンを取得できていない)。
WriteProcessMemory, ReadProcessMemory関数の戻り値は共にTRUEでした。

どのようにすれば、デスクトップアイコンを取得することが出来るのでしょうか。
ご教示のほどよろしくお願いいたします。

環境:WindowXP HomeEdition SP3
VisualStudio2008、Win32APIを使用しています。

“C言語何でも質問掲示板” へ戻る