2

現在のユーザーの次のレジストリ キーにエントリを追加するスクリプトをまとめる必要があるシナリオがあります。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\

このキーで許可される値の最大数を見つけようとしているので、スクリプトで別の値を最後に追加できます。値の名前はアルファベットの先頭から始まりますが、「Z」で終わるとは想定したくありません。

背景: 独自の (つまり、独自のものではなく、ソースにアクセスできない) アプリケーションを再パッケージ化し、デフォルトの [ファイル] -> [開く] の場所を設定しようとしています。面倒なスナップショットと File/Regmon セッションを何度も行った後、これが適切な方法のようです。私はそれが非常にハックであることを知っていますが、うまくいきます。理論を手動でテストしました。そうは言っても、アプリケーションがこれを行う独自のより優れたメカニズムを持っていないという仮定の下で、よりWin32に適した方法でこれを行う方法についての提案には、私は間違いなくオープンです.

4

3 に答える 3

8

このレジストリ キーは、実行可能ファイル名ごとに、そのアプリケーションが最後に名前を付けて保存したディレクトリを保持します (おそらく保存もわかりません)。

各文字には 1 つの実行可能ファイルの情報が保持されMRUList、 には順序が保持されます (これは重要です)。

私のものは「y」で最大になり、私のMRUListものはsxahmcjierfobglyuqpdtwvkn.

実験から、既に存在するアプリケーションから SaveAs を実行すると、その文字の情報が置き換えられ、MRUList.

アプリケーションがそこになく、すべての文字が にあるわけではない場合、アプリケーションはMRUList最初に利用可能な文字を取得し、情報をその文字に配置してから、その文字を の先頭に配置しMRUListます。

アプリケーションがそこになく、すべての文字が使用されている場合は、 の最後のMRUList文字を取得し、情報をその文字に配置してから、 の先頭に移動しMRUListます。

まったく新しいアプリケーションに対して SaveAs を実行しても文字が返されないことに注意してくださいz。「MRUList」の最後のものを再利用します。

キー自体は UCS-2 (16 ビット Unicode、私のオーストラリア バージョンの Windows では null バイトが散在する ASCII、国際的なバリアントではマイレージが異なる場合があります) のように見え、null で終わる実行可能ファイル名、次に null で終わる実行可能ファイル名を保持します。ディレクトリ。

そして、そのアプリケーションのソースにアクセスできないというあなたのコメントに関しては、それは問題ではありません. これらのキーを変更するのはそのアプリケーションではありません。ComDlg32 は、Windows 自体の共通ダイアログ (開く、名前を付けて保存、印刷設定など) です。

特定のアプリケーションの MRU を設定する場合は、次の手順に従います。

1/ 文字キーでそのアプリケーションを検索します。見つかった場合は、手順 3 に進みます。

2/ にない次の使用可能な文字を取得しますMRUList。にすべての文字がMRUListすでに含まaれているy 、それが常に最後の文字であると確信できないy場合 (レジストリの別の場所で構成できる場合があります)、 の末尾にある最後の文字を取得しますMRUList

3/ これで手紙ができました。アプリケーションとディレクトリの UCS-2 データを使用してその文字キーを変更または作成します (どちらも null で終了)。

4/ を変更しMRUListて、文字を前面に配置します。

そこには。それはそれを行う必要があります。

于 2009-05-12T04:45:46.290 に答える
2

あなたの状況を誤解していない限り、標準の Windows OpenFileDialog にはInitialDirectory、ダイアログを開くディレクトリを指定する というプロパティが必要です。

于 2009-05-06T01:16:59.450 に答える
0

他のものは重要ですか?他のものを削除するか、最初または最後のものを再利用することを検討します。(私はまた、どんなキャラクターでも試してみますが、運が良ければうまくいくかもしれません。)

于 2009-05-15T20:01:43.683 に答える