お気に入りメニューの並び替えについて

以前から散々出来ないだのやりたくないだの言ってきたんですが、正直こちらとしてもこの機能は欲しかったので、暇を見て情報収集等をしてました。それで何とか出来そうだという光が見えたので他の要望そっちのけで作業に入りました。(皆さんごめんなさい)

まず、メニューをドラッグ&ドロップする仕組みが必要だったんですが、それはWindows2000以降にあるWM_MENUDRAGとWM_MENUGETOBJECTメッセージを使うことで何とかしました。この時点で98系を切り捨ててしまうことになってしまいましたが、やむを得ずというところです。これ以外の方法は時間的にも能力的にも正直選択不可能でした。

ドラッグ&ドロップの機構に必要なものは既にDonutのソースにまとまっていたので、後作るものはIEメニューの並び順の取得、操作、書き込みでした。独自定義フォルダについては今回考えないことにしました。独自の方が設計が簡単になるんですが私が使いたいのはIE互換だったもので。IEお気に入りの並び順はレジストリにあって、仕様不明のバイナリデータになっていますが、先人が解析したデータを残されているのでそれにしたがってプログラムを書きました。自分でも再解析してみましたがおおよそ同じ構造でした。

残った問題はデータの変更に対する柔軟さです。IEを操作したり、お気に入りファイルに対して、移動、改名、削除または追加などをしたりするとデータとファイルが一致をしなくなったりするので、データをファイルに合わせて修正や再構築したりしてなんとかしのぎます。まだいろいろと想定していない操作パターンとかがあるはずなので一通り何とかしないと実用になりませんね。

とりあえず今のところ出来てるのがこれです。
http://www5.ocn.ne.jp/~minute/tab/MenuOrderTest.zip

本音を言うと安心して使えるものじゃないなぁと思いますが、一応動くことは動くのでないよりはましです。

試す場合は適当なフォルダを作って適当なお気に入りをいくつか追加してから、そのフォルダ内で並び替えてみるのがいいかと思います。