Windows デスクトップのアイコンの位置をプログラムで操作するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/131690

質問

数年前、私は無邪気に、戦略的に配置したデスクトップ アイコンを保存する小さなアプリを作成しようとしました。何らかのイベントでデスクトップ アイコンがリセットされたときに、アイコンをドラッグして元の場所に戻すのがうんざりしたからです。アイコンのデスクトップ上の位置をクエリする方法、ましてや保存やリセットする方法を見つけることができずに、あまりにも多くの時間を費やして諦めました。

Windows がこの情報を保持する場所と、それらを設定する API があるかどうかを知っている人はいますか?

ありがとう、リチャード

役に立ちましたか?

解決

私の記憶が間違っていなければ、デスクトップは単なる ListView なので、 LVM_SETITEMPOSITION デスクトップのハンドルにメッセージを送信します。

C# コードについて少しグーグルで検索しましたが、例は見つかりませんでしたが、次の記事を見つけました。 トーリー:...デスクトップアイコンの位置を取得/設定しますか?. 。これは Delphi コードですが、非常に読みやすく、いくつかの P/Invoke を使用して C# に変換できると思います。

他のヒント

デスクトップは単なる ListView コントロールであり、LVM_SETITEMPOSITION を使用してハンドルを取得し、メッセージを送信してアイコンを移動できます。

ただし、LVMGETITEMPOS を使用してアイコンの位置を取得するのは少し複雑です。LPARAM として POINT 構造体へのポインターを渡す必要があります。これを実行しようとすると、エクスプローラーがクラッシュする可能性があります。問題は、コントロールにアドレス空間内のポインターを渡し、コントロールがそれをエクスプローラーのアドレス空間内のポインターとして解釈したことです。ああ!

私が使用した解決策は、DLL を Explorer プロセスに挿入し、そこからメッセージを送信することです。次に、位置情報をプロセスに戻す方法が必要になります。

私はまだこれを調査中ですが、最終的に何かが動作するようになったら、結果を投稿します。Davy の投稿のおかげで間接的に、古典的な VB 実装も見つけたので、これを投稿しています。

プロセス間メモリ通信を使用したデスクトップ アイコンのシャッフル

そしてそれがおそらく私のコードの基礎となるでしょう。

API についてはまったくわかりませんが、ウルトラモンについては知っています (http://www.realtimesoft.com/ultramon/)には、アイコンの位置を保存する機能が含まれています(アイコンの位置を保存するために使用したことはありませんが、マルチモニターの使用には不可欠です)。最新のベータ リリースは Vista では問題なく動作し (最初に RDP 経由でマシンにログインするときに 1 つか 2 つの小さな不具合が発生する場合を除いて)、もちろん XP では何の問題もありません。もう4年以上使っています。

それが複数のモニターの使用に最適なユーティリティであることは言いましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top