2012-09-09 2 views
0

현재 하나의 응용 프로그램에 대한 플러그인을 만들고 있는데 WM_MBUTTONDOWN 메시지를 처리하지 않기 때문에 WNDPROC를 연결하기로 결정했으나 다른 플러그인에서도이 플러그인을 후크하여 응용 프로그램 사전 순으로 플러그인을로드하면 WNDPROC를 마지막으로 연결하지 않아서 다른 플러그인이 메시지를 먼저 처리 할 수 ​​있습니다. 이것은 WNDPROC가 메시지를 수신 할 수 있도록 마지막으로 연결해야한다는 것을 의미합니다.프로 시저 마지막으로 연결하기

마지막으로 프로 시저를 마지막으로 연결하는 신뢰할 수있는 방법 (알파벳 순서에 의존하지 않음)이 있습니까?

EDIT : 후킹은 SetWindowLong 함수를 사용하여 윈도우의 DWL_WNDPROC 속성을 주소 후크 프로 시저로 변경하여 수행됩니다. 원래 DWL_WNDPROC는 CallWindowProc을 사용하여 후크 프로 시저에서 호출됩니다. 이 일을 분명히하지 않아서 미안 해요!

감사합니다. 툰 투니.

+0

내가 아는 어떤 방법도 아니며, 레이몬드의 한 블로그에서 그런 식으로 설정되지 않은 것 같습니다. – chris

+0

@chris 그 기사에 대한 링크를 제공 해줄 수 있습니까 (아니면 오해 했습니까?). – Tuntuni

+0

찾을 수 있을지 확실하지 않지만 [Win16에서 작동하는 방법] (http://blogs.msdn.com/b/oldnewthing/archive/2006/08/09/693280.aspx)을 참조하십시오.). – chris

답변

1

글쎄, 설치된 창 proc 콜백에서 GetWindowLongPtr 전화하여 현재 창 proc을 확인할 수 있고 다른 사람이 변경 한 경우 SetWindowLongPtr으로 proc을 다시 설치할 수 있습니다. 물론, 위험하고 무한 재귀를 피하기 위해 창 프로 시저를 재진입 (일반적으로 정적 카운터 사용)으로부터 보호해야합니다. WH_MOUSE 또는 WH_MOUSE_LL 후크 대신 WH_CALLWNDPROC -

또한 대신 윈도우 서브 클래 싱의 SetWindowsHookEx API 기능에 의해 설치된 시스템 전반에 걸친 후크를 사용을 시도 할 수 있습니다. 윈도우 프로 시저가 호출되기 전에 (GetMessage 또는 LL 훅용 마우스 메시지 게시에서도) 호출되어야하므로 WH_CALLWNDPROC 훅이 호출되기 전에 호출되어야합니다.

+0

응용 프로그램이 GetMessage와 CallWindowProc을 각각의 플러그인 (로드 할 때) 사이에서 호출하기 때문에 이것이 잘 작동하는지 잘 모르겠습니다. 당신이 생각할 수있는 다른 방법이 있습니까? – Tuntuni

+0

@ Tuntuni 귀하의 요점을 이해하지 못했습니다. 다른 플러그인이'WH_CALLWNDPROC' 훅을 사용하면 실제 훅 설치 순서를 무시하고'WH_MOUSE' 훅이 항상 호출 될 것입니다. 적어도 그것은 문서에 따라야합니다 (실제로 시도하지 않았습니다). – Rost

+0

후킹이 어떻게 이루어 졌는지 설명하는 것을 잊어 버렸습니다. 나는 매우 미안 해요. 나는 그 질문을 편집했다. – Tuntuni