クイック起動ツールバーのアイテムの順序をプログラムで決定することは、本質的に脆弱です。このために公開されている API はありません。つまり、Windows の将来のバージョンで変更される可能性があり、文書化されていない実装の詳細に関する仮定に依存していたコードが壊れる可能性があります。
ただし、この特定のケースでは、クイック起動ツールバーがもう存在しない (または、少なくとも誰も使用していない) ため、通常よりも問題は少なくなります。クイック起動ツールバーを使用した Windows の最後のバージョンは Vista だったので、コードが Vista 以前と互換性があることを確認すれば問題ありません。とにかく、新しいバージョンでは動作しません。
クイック起動ツールバーの項目の位置は、レジストリの次のキーに保存されます。
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop
そこから情報を抽出し、解析して解釈し、好きなように使用できます。あなたが言及したように、この情報はプレーンテキスト形式で保存されません。これは、シェルがそれ自体を読み込んで解析するのが非常に遅くなるためです。これは文書化されておらず、クライアントが使用するように設計されていないため、ユーザー (または開発者) にとって使いやすいものにすることに特に利点はありませんでした。重要なのは、シェルにとって何が最も効率的であるかだけであり、その内部構造からバイナリ情報を保存することは当然の選択です。
役に立つようにするには、これをリバース エンジニアリングする必要があります。おそらく、クイック起動バーにいくつかの項目を特定の順序で並べてテスト環境をセットアップし、レジストリから情報をエクスポートし、項目の 1 つを移動し、更新された情報をレジストリを確認し、エクスポートされた 2 つのレジストリ ファイルを比較して、何が変更されたかを確認します。パターンを推測するために必要な回数だけすすぎ、繰り返します。(本当に多くの開発者が、Windows の文書化されていない側面をリバース エンジニアリングするために実際に時間を割くのはなぜだろうと思いますよね?)
もう 1 つのオプションは、Spy++ を使用して、タスク バーとそのクイック起動ツールバーを実装するウィンドウを調査することです。私は Windows 7 より前のシステムを持っていませんが、あなたは既にこれを行っており、クイック起動ツールバーが標準の ListView を使用して実装されていると判断したように思えます。そのウィンドウの名前 (およびその祖先ウィンドウの名前) がわかっている場合は、それらのウィンドウを調べて、関心のあるウィンドウへのハンドルを取得できます。その後、ウィンドウ内の項目の順序を決定できます。独自のアプリケーションの標準的な ListView であるかのように。
ListView コントロールのドキュメントはこちらです。それはあなたを正しい方向へと導くはずです。LVM_GETITEMTEXT
メッセージを送信すると、サブアイテムの 1 つのテキストを取得できます。
これはおそらくそれを行う最も簡単な方法です。同じ警告が適用されます.Windowsの将来のバージョンがこれらのウィンドウの名前やタスクバーの実装方法を変更するのを妨げるものは何もありません.変更される可能性は低いです)、これは大きな問題ではないかもしれません。
もう一度言いますが、Quick Launch ツールバーが陳腐化しているという事実を考えると、なぜこの試みに開発者の時間を費やす価値があるのか、私には理解できません。
また、このプログラムをすべて作成してインストールした後でも、ユーザーがクイック起動ツールバーに新しい項目を追加したり、既存の項目を再配置したりするとどうなるかを検討してください。ユーティリティはどのようにしてそれを認識し、それに応じてキーボード ショートカットを調整するのでしょうか? インストーラーがクイック起動ツールバーの項目を追加/削除した場合はどうなりますか?