Windowsエクスプローラーの名前変更イベントを使用してプログラムをフックする
質問
どの言語でも、ユーザーがファイル名を変更したときにプログラムをフックする方法はありますか?
例えば:ユーザーはファイルの名前を変更し、Enter キーを押して (またはクリックして)、名前変更アクションを確認します。ファイルの名前が実際に変更される前に、私のプログラムはこのイベントを「リッスン」し、「C: est\file.txt の名前を C: est est.txt に変更してもよろしいですか?」というメッセージをポップアップ表示します。
これは C++、C#、または .NET で可能だと考えています/期待しています。しかし、どこを探せばいいのか全く分かりません。
解決
おそらくこれを使用することでこれを解決できます FileSystemWatcher クラス .NETフレームワークで。
クラスの発言より:
ファイルまたはディレクトリの名前の変更、削除、または作成に注意することができます。たとえば、テキストファイルの名前変更を監視するには、フィルタープロパティを「*.txt」に設定し、そのパラメーターに指定された名前付きのWaitforChangedメソッドを呼び出します。
他のヒント
私の推測では、これは ない 可能性があります、私は見つけました これ これはフォルダーに対する操作 (名前の変更を含む) を監視するためのものですが、ファイルに対して同様の方法はないようです。
@Richard、FileSystemWatcherは、変更を監視することだけが必要な場合には適していますが、変更を中断する必要がありますが、それは実行できません。
IFileOperationProgressSink.PreRenameItem
私が知っている中で最も近いサポート内容です。残念ながら、これは Explorer へのフックではないため、独自の目的でのみ使用できます。 IFileOperation
行動。ニーズに応じて、独自のシェル拡張機能を作成できます。 ConfirmRename
(または何か)、そこから分岐します。
そうでなければ、フッキングを検討していることになります SHFileOperation
, 、 私は思う。Explorer.exe に読み込まれるため、これはアンマネージ コードで行う必要があります。Vista の場合、これは次のように変更されました。 IFileOperation
- これはおそらく、その作成をフックしてモックを配布する必要があることを意味します。
個人的には、あなたが名前の変更について話しているので、 ウィルヘルムテルのアイデア 確認の 後 必要に応じて変更を元に戻すことが最善の方法です。