2010-02-05 2 views
1

win32를 사용하여 글로벌 후크를 설치했지만 기본 응용 프로그램과 통신해야합니다. 어떻게해야합니까? 난 DLL을 내 애플 리케이션 HWND를 설정하고 후크 sendmessage 수있는 함수를 가질 수있을 것 같아요? 또는 창 제목을 검색하여 해당 응용 프로그램을 후크 및 sendmessage에서 찾으면 되나요? 가장 좋은 전략은 무엇이며 가장 좋은 방법을 sendmessage로 보내거나 전 세계적인 고리와 통신하기 위해 다른 것을 사용해야합니다.글로벌 훅에서 응용 프로그램으로 어떻게 통신합니까?

답변

1
  • 사용 PostMessage를하지 sendMessage 첨부 : sendMessage 첨부 시간이 걸릴 수 있으며,이 다른 응용 프로그램에서 지연의 원인이 될 수 있습니다.

  • 훅을 초기화 할 때 정의한 함수를 사용하여 훅 DLL에 응용 프로그램의 HWND를 제공하십시오. 이이처럼 DLL의 공유 데이터 세그먼트에 보관해야합니다 :이 here을 수행하기위한 전체 예제를 볼 수

    #pragma data_seg(".shared") 
    HWND hWndApp = NULL; 
    #pragma data_seg() 
    #pragma comment("linker, /section:.shared,rws") 
    
    void setAppWnd(HWND hWnd) { 
        hWndApp = hWnd; 
    } 
    

.

1

어떤 유형의 정보를 다시 앱에 보내시겠습니까?

SendMessage는 프로세스 경계에 걸쳐 DWORD를 넘어서는 모든 것을 전달할 수있는 기능이 없습니다 (예 : 한 프로세스의 메모리에 대한 포인터를 다른 프로세스로 전달할 수 없음). 그러나 실제로 수행해야하는 간단한 값만 전달하면됩니다. 충분히 잘 작동합니다.

@interjay와 같이 PostMessage는 더 나은 계획이지만 궁극적으로 여전히 동일한 제한이 있습니다.

관련 사항 : "Hazards of cross-process messages", "PasswordSpy - Retrieving lost passwords using Windows hooks"

관련 문제