こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

C#.net 2002を使っています。
デスクトップのアイコンの位置をとりたいのですが、解らずに困っています。

まず、SendMessageを使い、LVM_GETITEMPOSITIONを送ってみた“ SendMessage(hWnd, LVM_GETITEMPOSITION, iD, ref pt) ”のですが、値が帰ってきませんでした。(ptはPOINT型)

次に、ネットで検索し、http://www.est.hi-ho.ne.jp/getchan/junks/junk01.html のページを見つけたのですが、C++なので私にはよく解らず、試しに*や&のところを、refを使ってそれなりに動くようにしましたが、やはり値は返ってきませんでした。

デスクトップのアイコンの位置をC#で取得する方法を御存知でしたら、教えてください。お願いします。

投稿日時 - 2004-10-03 05:18:51

QNo.1026496

暇なときに回答ください

質問者が選んだベストアンサー

using System.Runtime.InteropServices;

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string strclassName, string strWindowName);

[DllImport("user32", EntryPoint="FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);

public const int LVM_GETITEMCOUNT = 0x1004;

と宣言しておいて、

IntPtr hWnd;

hWnd = FindWindow("Progman", "Program Manager");
hWnd = FindWindowEx(hWnd, IntPtr.Zero, "SHELLDLL_DefView", null);
hWnd = FindWindowEx(hWnd, IntPtr.Zero, "SysListView32", null);

int nItemCount = SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);

で、デスクトップのアイコンの数が取れます。こんな感じで、示されているページのソースをC#に変換して行けば良いでしょう。下のページを参考にしてみて下さい。残りの使用するAPIが載っています。がんばって下さい。時間が無いので私は出かけます(意地悪じゃありませんよ(^^;)

私が前に示したページは、あんまり役に立たなかったかもしれませんね。アイコンはListViewに格納されているので、ListViewをコントロールすれば良いかと思ったのですが、共有メモリ等あって、そう簡単ではないようです。すみませんでした。

参考URL:http://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/05/31.aspx

投稿日時 - 2004-10-17 10:15:59

補足

遅くなりまして申し訳ございませんでした。
LV_ITEMを全てPOINTに書き換え、少しコードをいじったところ、きちんと動きました。
(しかし、何故これで動くのか、というのは、私には難しすぎて解りませんでした(汗

回答、大変有り難うございました。

投稿日時 - 2004-10-24 20:37:02

お礼

返答有り難うございます。
しかし、唯今時間が無く、チェックできないです。すみません。(学校が中間考査なんです・・・)
ソースを見る限りでは、凄く難しそうなことをしていますが・・・ 考査終了後、試してみます。

投稿日時 - 2004-10-18 23:25:28

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

hpp

時間が無くて実際にサンプルコードをかけませんでしたが、以下のページが参考になりそうです。

参考URL:http://www.csharpfr.com/code.aspx?id=20517

投稿日時 - 2004-10-03 08:26:13

補足

返信遅れてすみません。

このクラスはどのように使えばよいのでしょうか??
Formの中での使い方ならなんとなく解ったのですが、デスクトップでの使い方が解りません・・・
お教え願います・・

(訂正。C#のバージョンは2002ではなく2003でした。

投稿日時 - 2004-10-16 23:50:54

あなたにオススメの質問