1

FileSystemWatcher を使用して、監視対象のディレクトリに新しいディレクトリが作成されているかどうかを確認しています。ユーザーがエクスプローラーごとに作成すると、->右クリック->新しいフォルダー最初に、ユーザーがすぐに名前を変更できるディレクトリ「新しいフォルダー」が作成されます。それにもかかわらず、私は処理できる「新しいフォルダー」で Created イベントを取得します。私の問題は、異なる方法でローカライズされた Windows マシンでソフトウェアを実行すると、「新しいフォルダー」をチェックできなくなることです。現在の言語でエクスプローラーが使用する新しいフォルダーの名前を取得するにはどうすればよいですか。

ありがとう。

4

1 に答える 1

3

これらを参照してください。

あなたがする必要があるのは、「新しいフォルダー」に使用される文字列の「ID」を発見することです....それを使用LoadStringして、内部の文字列テーブルリソースからロードできますShell32.dll

ただし、ID は必ずしも安定しているわけではなく、Windows のエディション間で変更されています。

たとえば... XP では、次のように設定された文字列テーブルがあります。

Windows 7 64 ビットでは...「新しいフォルダー」文字列の ID は 16888 です。

この ID 検出を行うには、次の 2 つの方法を試すことができます。

1. サポートする Windows の各エディションで、「新しいフォルダー」文字列の ID を事前に検出することにより、

Windows の各英語/米国版 (XP、Vista、Windows 7 など) でこの関数を呼び出すだけのユーティリティを作成して、ID を調べる必要があります。

UINT new_folder_id = FindResourceStringId(shell_handle, L"新しいフォルダー", 0x409);


次に、実行中の Windows の現在のバージョンに応じて、正しい ID を使用するコード内で切り替えを行うことができます。

2. 実行時に動的に

英語のリソースで「新しいフォルダー」文字列を検索して、その ID を見つけます。ただし、これには英語の MUI 言語パックをシステムにインストールする必要があります。


この C# コードを使用して、特定の ID を指定して特定の「文字列」を読み込みます。

コードが機能しているかどうかをテストするには、MUI 言語パックをインストールしてから、別のロケールの文字列を読み込もうとすることができます。


SHChangeNotifyRegisterまたは、「シェル内」で行われた変更をリッスンするために使用できます...特定のことを行うときにExplorer呼び出します。SHChangeNotify

ここでコードを使用します。

SHCNRF_ShellLevel、SHCNE_MKDIR などの適切なフラグを使用します。

于 2013-08-22T11:22:13.750 に答える