2009-11-24 3 views
0

파일을 열 때 탐색기 호출 (더블 클릭, 상황에 맞는 메뉴 열기 등)을 시도하고 있지만 어떤 기능인지 알 수 없습니다.탐색기가 파일을 여는 데 사용하는 것은 무엇입니까?

원래 ShellExecute라고 생각했는데, 그것은 내가 말할 수있는 한 똑같은 일을하지만, 새 익스플로러 창이 열렸을 때만 사용된다는 것을 배웠습니다.

어떤 아이디어가 작동해야합니까?

+1

확실하게 ShellExecuteEx를 선택 했습니까? :) 그렇지 않으면, 그냥 CreateProcess 마음에 온다 ... – OregonGhost

+0

목적은 무엇입니까? 사용자가 특정 파일을 열지 못하게합니까? –

+0

CreateProcess 알림을 수신 할 장치 드라이버를 작성하는 것이 대안입니다. 우리 프로그램이 수정 한 이후 사용자가 파일을 열 었는지 여부를 추적하는 것이 목적입니다 (분명히 100 % 정확하지는 않지만 이것이 내가 생각할 수있는 가장 좋은 방법입니다). –

답변

0

이러한 항목을 가로 채려면 쉘 항목의 기본 동사로 등록하십시오. 다음은 일부 samples입니다.

누군가가 관심있는 파일을 변경했는지 알고 싶다면 FindFirstChangeNotification() 및 관련 API를 통해 변경 알림을 등록해야합니다.

+0

우리는 가로 채기를 사용하지 않고 기본 동작을 완전히 덮어 쓴다는 가정하에 알림을 원합니다. 나는 이것을 ShellExecute에 전달하는 것으로 생각했지만, 익스플로러는 그렇게하지 않았기 때문에 조금 피곤했다. 우리는 기본 동작 _at all_을 변경하고 싶지 않습니다. –

+0

나는 파일이 변경되는 것에 관심이 없다. 사용자가 탐색기에서 파일을 열 때를 ​​알고 싶습니다. –

0

ShellExecute 후크가 있지만 지금은 (XP 이후) 모든 사람들이 가장 이상한 목적으로 사용하기 때문에 더 이상 사용되지 않습니다. 더 자세한 내용은 this을 참조하십시오. 일부 문서는 this입니다.

+0

예, 원래 이것을 사용했습니다. 우리는 Vista 이상에서 작동하는 솔루션을 찾으려고 노력하고 있습니다. 따라서 어떤 함수가 무엇인지를 알고 있고 함수가 동적으로 링크 된 라이브러리의 일부인 것으로 가정하면 함수가 호출되는 곳으로 연결됩니다. –

0

AppInit_DLLs 레지스트리 키가 충분해야합니다.

간단한 DLL을 만들고 DllMain 함수에서 GetCommandLine()을 호출하여 실행중인 응용 프로그램에 대한 전체 명령 줄을 가져옵니다.

+0

CreateProcess 함수의 알림을 구독 할 수있는 장치 드라이버를 작성하는 것이 더 간단합니다. 그러나 탐색기 호출에 대한 일반 훅은 우리가 선호하는 방법입니다. –

-1

MS 조사 도구 detours은 장치 드라이버 작성보다 훨씬 간단하지만 재미는 적습니다. 재미있어!

+0

Detours는 어떤 기능을 사용해야하는지 잘 모르기 때문에 유용하지 않습니다. (기능은 탐색기에서 노출되지 않았다고 결론을 냈습니다.) 매우 작은 기능을 추가하기 위해 라이센스를 구매해야합니다. 그 위에, 나는 이미 함수를 후크하기위한 코드를 작성했다. –

+0

흠. . . 그거 터프 하네. . . - 내가 제안한대로 우회 할 것임 - 차단 된 파일 열기 시스템 호출 코드에 중단 점 설정 - 스택 추적에서 funcs를 확인합니다. . . 그러면 실제 가로 채기 기능을 사용할 수 있습니다. . . 나는 결코 이것을 한 적이 없다. . 그것이 효과가 있을지 모른다. 아마! TheErudite 집게 – TheEruditeTroglodyte