7

ユーザーがファイルの名前を変更したときにプログラムをフックする方法はありますか?

例: ユーザーがファイルの名前を変更し、Enter キーを押して (またはクリックして離して)、名前変更アクションを確認します。ファイルの名前が実際に変更される前に、私のプログラムはこのイベントを「リッスン」し、「C:\test\file.txt の名前を C:\test\test.txt に変更してもよろしいですか?」というメッセージを表示します。

私は、これが C++、C#、または .NET で可能であると考えています/期待しています..しかし、どこを探すべきか手がかりがありません。

4

3 に答える 3

5

おそらく、.NETFrameworkのFileSystemWatcherクラスを使用してこれを解決できます。

クラスの発言から:

ファイルまたはディレクトリの名前の変更、削除、または作成を監視できます。たとえば、テキストファイルの名前の変更を監視するには、Filterプロパティを "* .txt"に設定し、パラメータにRenamedを指定してWaitForChangedメソッドを呼び出します。

于 2008-08-23T22:31:11.813 に答える
0

私の推測では、これは不可能です。フォルダの操作(名前の変更を含む)を監視するためのものであることがわかりましたが、ファイルに対して同様の方法はないようです。

@ Richard、FileSystemWatcherは、変更を監視するだけでよい場合に適していますが、変更を中断する必要がありますが、変更はできません。

于 2008-08-23T22:21:11.713 に答える
0

IFileOperationProgressSink.PreRenameItem私が知っている中で最もサポートされているものです。IFileOperation残念ながら、これは Explorer へのフックではないため、独自のアクションにのみ使用できます。必要に応じて、シェル拡張を作成して独自のConfirmRename(または何かを) 実行し、そこから分岐することができます。

そうでなければ、あなたはフックを見ているSHFileOperationと思います。これは、Explorer.exe に読み込まれるため、アンマネージ コードで行う必要があります。Vista の場合、これはIFileOperation- に変更されました。これはおそらく、その作成をフックしてモックを渡す必要があることを意味します。

個人的には改名の話なので、変更に確認し、必要に応じて元に戻すというヴィルヘルムテルの考えが一番いいと思います。

于 2008-08-24T01:37:02.163 に答える