31

数年前、あるイベントでリセットされたときに、戦術的に配置されたデスクトップアイコンを元の場所にドラッグして戻すことにうんざりしていたため、無邪気に小さなアプリを作成して保存しようとしました。アイコンのデスクトップ位置を照会する方法を見つけるのに失敗し、保存とリセットを行うのに失敗したため、WAYを費やした後、私はあきらめました。

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

ありがとう、リチャード

4

5 に答える 5

17

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

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

于 2008-09-25T06:56:01.513 に答える
3

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

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

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

于 2008-09-25T11:43:53.287 に答える
1

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

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

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

于 2008-09-26T16:37:08.163 に答える
0

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

また、複数のモニターを使用する場合に最適なユーティリティであると言いましたか?

于 2008-09-25T06:16:08.893 に答える