デスクトップのアイコン位置の取得 – プログラミング – Home

デスクトップのアイコン位置の取得
 
通知
すべてクリア

デスクトップのアイコン位置の取得


JAPAN
 JAPAN
(@JAPAN)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

デスクトップのアイコンの位置を取得したいのですが、

POINT point;
CListCtrl ListCtrl;
CRect rect(0,0,500,500);
CWnd wnd;
wnd.Attach(hWndProgman);
int n;
n = ListCtrl.Create(LVS_ICON,rect,&wnd,0);
TRACE(%d,n);
ListCtrl.GetItemPosition(0, &point );
TRACE(%p,point);

  以上のようなソースコードですが、動きません。
  どこが違うのでしょうか?おねがいします


引用解決済
トピックタグ
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

hWndProgmanが何なのか書かれていませんが、これがデスクトップの
ウィンドウハンドルであるとして話を進めます。
デスクトップはリストビューコントロールなので、ウィンドウハンドル
が取得できれば、リストビューコントロールの機能を呼び出すことは
出来ます。
ListView_GetItemCount()とか、ListView_GetItemPosition()など
ですね。最も、ListView_GetItemPosition()は別の理由からうまく
いきませんが。(後述します)


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

失礼。途中で送信してしまいました。続きです。

では、ListView_GetItemCount()はうまく出来るのに、
ListView_GetItemPosition()はできない理由を説明
します。二つの違いは何でしょう。
ListView_GetItemCount()は値を返してくる仕様です
が、ListView_GetItemPosition()はアドレスを渡して
値を入れてもらう仕様です。ところが、Win32では、
プロセス毎にメモリが独立しているので、アドレスを
渡しても意味がないのです。(というかこの場合は危険)
何らかの方法でプロセス間でメモリの受け渡しをする
必要があります。
たぶん、VirtualAllocEx()でデスクトップ側のプロ
セスにメモリを割り付けて、そこに結果を書き込ませ、
ReadProcessMemory()で読めば出来ると思います。
おっと、VirtualAllocEx()って9x系にはないなあ。
ご存知の方、フォローお願いします。

追伸
どうしてもCListCtrl使いたければ、
CListCtrl list;
list.Attach(hWndDeskTop);
やりたい処理
list.Detach();
とかすれば出来るかもしれません。
(プロセス間のメモリ問題はいっしょだが)


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました