Windows 탐색기의 이름 바꾸기 이벤트로 내 프로그램 연결하기
문제
사용자가 파일 이름을 바꿀 때 어떤 언어로든 내 프로그램을 연결하는 방법이 있습니까?
예를 들어:사용자는 파일 이름을 바꾸고 Enter 키를 누르거나 클릭하여 이름 바꾸기 작업을 확인합니다.파일 이름이 실제로 변경되기 전에 내 프로그램은 이 이벤트를 "수신"하고 "C: est\file.txt의 이름을 C: est est.txt로 바꾸시겠습니까?"라는 메시지를 표시합니다.
나는 이것이 C++, C# 또는 .NET에서 가능하다고 생각/희망하고 있습니다.하지만 어디서 찾아야 할지 전혀 모르겠습니다.
해결책
아마도 다음을 사용하여 이 문제를 해결할 수 있습니다. FileSystemWatcher 클래스 .NET 프레임워크에서.
수업 발언에서:
파일 또는 디렉토리의 이름을 바꾸거나 삭제하거나 생성 할 수 있습니다.예를 들어, 텍스트 파일의 이름을 바꾸는 것을 확인하려면 필터 속성을 "*.txt"로 설정하고 매개 변수에 이름이 이름 바뀌면서 WaitforCchanged 메소드를 호출하십시오.
다른 팁
내 추측으로는 이것이다. ~ 아니다 가능해요, 찾았어요 이것 이는 폴더에 대한 작업(이름 바꾸기 포함)을 모니터링하기 위한 것이지만 파일에 대해서는 유사한 방법이 없는 것 같습니다.
@Richard, FileSystemWatcher는 변경 사항을 모니터링하기만 하면 좋지만 변경 사항을 중단해야 할 경우 유용합니다.
IFileOperationProgressSink.PreRenameItem
내가 아는 가장 가까운 지원입니다.불행하게도 이는 Explorer에 연결되지 않으므로 자신만의 용도로만 사용할 수 있습니다. IFileOperation
행위.필요에 따라 쉘 확장을 작성하여 직접 수행할 수 있습니다. ConfirmRename
(또는 뭔가) 그리고 거기에서 분기합니다.
그렇지 않으면, 당신은 후킹을 보고 있는 것입니다. SHFileOperation
, 제 생각에는.Explorer.exe로 로드되므로 이 작업은 비관리 코드에서 수행되어야 합니다.Vista의 경우 이는 다음으로 변경되었습니다. IFileOperation
- 이는 아마도 생성을 연결하고 모형을 전달해야 함을 의미합니다.
개인적으로 이름 변경을 말씀하신 이후로 빌헬름텔의 생각 확인의 ~ 후에 변경하고 필요한 경우 실행 취소하는 것이 가장 좋습니다.