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. … のページを見つけたのですが、C++なので私にはよく解らず、試しに*や&のところを、refを使ってそれなりに動くようにしましたが、やはり値は返ってきませんでした。
デスクトップのアイコンの位置をC#で取得する方法を御存知でしたら、教えてください。お願いします。
No.2ベストアンサー
- 回答日時:
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/arc …
この回答への補足
遅くなりまして申し訳ございませんでした。
LV_ITEMを全てPOINTに書き換え、少しコードをいじったところ、きちんと動きました。
(しかし、何故これで動くのか、というのは、私には難しすぎて解りませんでした(汗
回答、大変有り難うございました。
返答有り難うございます。
しかし、唯今時間が無く、チェックできないです。すみません。(学校が中間考査なんです・・・)
ソースを見る限りでは、凄く難しそうなことをしていますが・・・ 考査終了後、試してみます。
No.1
- 回答日時:
この回答への補足
返信遅れてすみません。
このクラスはどのように使えばよいのでしょうか??
Formの中での使い方ならなんとなく解ったのですが、デスクトップでの使い方が解りません・・・
お教え願います・・
(訂正。C#のバージョンは2002ではなく2003でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
デスクトップ上のアイコンの位置の取得
Visual Basic(VBA)
-
デスクトップ上のアイコン名の取得方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(Swing)JTextFieldを半角のみ入...
-
メインが含まれていません
-
javaでcsvファイル読込時の改行...
-
「配列定数は、イニシャライザ...
-
C#で「型または名前空間名 'int...
-
コード中の謎のエラー
-
Java(AES)多重の暗号化・復号化...
-
ビープ音をなめらかに鳴らしたい
-
式の型は配列型で int に解決済...
-
アンマネージDLLで、ダイアログ...
-
ファイルの入出力について
-
SwingでJtableのヘッダ行が表示...
-
java spring でエラーが出て困...
-
シンボルを見つけられません
-
【C#】フォームをなめらかに移動
-
DataSet(DataTable)の使い方
-
Sobelフィルタがうまく作れません…
-
デスクトップのアイコンの位置...
-
C++からC#のdllを参照する際、...
-
時間の比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
JAVA エラー 式の開始が不正で...
-
式の型は配列型で int に解決済...
-
メインが含まれていません
-
DataSet(DataTable)の使い方
-
javaでcsvファイル読込時の改行...
-
C++からC#のdllを参照する際、...
-
java spring でエラーが出て困...
-
c# デリゲート関連の命名について
-
JUnit4のアノテーションについて
-
SwingでJtableのヘッダ行が表示...
-
Java エラーについて
-
6桁の数字を重複なしでランダム...
-
C#で実行時にメソッドの返り値...
-
JAVAでCの関数ポインタのような...
-
IN演算子の中身を動的に生成
-
行の途中から読み込む方法
-
javaでカレンダー作成
-
初心者ですが、今javaで簡単な...
-
ビープ音をなめらかに鳴らしたい
おすすめ情報