2014-11-06 2 views
0

다른 응용 프로그램에서 특정 창 메시지 (RegisterWindowMessage로 등록 된 사용자 지정 메시지)를 브로드 캐스트하는 경우 해당 구성을 다시로드해야하는 셸 확장이 있습니다.셸 확장자에서 창 메시지를 가로 채는 방법

  • , Windows 탐색기의 창에서 창 서브 클래스 콜백을 설치 SetWindowSubclass를 사용하여 :

    나는 메시지를 가로 채기 위해 여러 가지 방법을 시도했다. Windows 7에서는 작동하지만 Windows 8에서는 작동하지 않습니다. 왜냐하면 DllMain이 주 스레드에서 호출되지 않고 SetWindowSubclass이 다른 스레드에서 작동하지 않기 때문입니다. 이것은 문서에서 언급 한 : 당신은 SetWindowsHookEx를 사용하여, CALLWNDPROC에 대한 후크를 설치 스레드

  • 에 걸쳐 창을 하위 클래스로 서브 클래 싱 도우미 기능을 사용할 수 없습니다

    . 전체 시스템의 속도를 늦추고 싶지 않기 때문에 특정 스레드 (탐색기의 주 스레드)에 대한 후크 만 설치합니다. 이것은 Windows 8에서 작동하지만 Windows 7에서는 작동하지 않습니다 ... 잘못된 스레드에서 연결하고 있기 때문에 이것이 의심 스럽지만 확실하지 않습니다. 어쨌든이 접근법은 지나치게 관입 적이기도합니다.

  • 메시지를 처리하기위한 메시지 전용 창 만들기. 메시지 전용 창은 브로드 캐스트 메시지를 수신하지 않기 때문에 전혀 작동하지 않습니다.

셸 확장에서 신뢰할 수있는 방법으로 창 메시지를받을 수 있습니까?

처음에는 창 메시지가 셸 확장에 통보하는 가장 쉬운 방법 인 것처럼 보였지만 다른 메커니즘이 더 적절할 것이라고 생각되면 제안에 대한 답변을 제공합니다.

+0

어떤 종류의 셸 확장입니까? –

+0

@SimonMourier, 아이콘 오버레이 및 컨텍스트 메뉴 핸들러 –

답변

2

숨겨진 창을 만들고 해당 창 프로 시저에서 메시지를 수신합니다.

  1. 창 프로 시저 및 클래스 이름을 제외한 모든 필드의 기본값을 갖는 창 클래스를 등록하십시오. 창은 절대 보이지 않으므로 창 클래스에 다른 것을 지정할 필요가 없습니다.
  2. 창을 만들 때 창 스타일에 0을 전달합니다. 특히 WS_VISIBLE은 제외하십시오.
  3. 창을 만들 때 WndParent에 대해 0을 전달하십시오. 이렇게하면 최상위 창으로 표시되어 브로드 캐스트 메시지를받을 수 있습니다.
+0

감사합니다. 시도해 보겠습니다. –

+0

완벽하게 작동합니다. 감사합니다! –

관련 문제