본문 바로가기
프로그래밍

👨‍💻 [MFC - ChatGPT] SetWindowsHookEx 메시지로 WH_KEYBOARD, WH_MOUSE 를 정상 설정 했는데, 이벤트가 발생하지 않는 경우에는 어떻게 해야할까?

by 밝음의기둥 2024. 8. 23.
반응형

👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

윈도우의 키보드, 마우스 입력을 후킹해서 입력이 일정 기간 없을 경우 프로그램의 상태를 변경하는 기능을 구현했는데요. 지금까지 잘 동작하다가, 특정 PC 한대가 동작을 하지 않아서, 해결책을 찾아보게 되었습니다. 아래 ChatGPT의 답변 중 7, 8 번 위주로 찾아봐야 할 것 같네요. ㅠㅠ


질문 > SetWindowsHookEx 메시지로 WH_KEYBOARD, WH_MOUSE 를 정상 설정 했는데, 이벤트가 발생하지 않는 경우에는 어떻게 해야할까?

ChatGPT 답변>

SetWindowsHookEx를 사용하여 WH_KEYBOARD 또는 WH_MOUSE 후킹을 설정했음에도 불구하고 이벤트가 발생하지 않는 경우, 문제를 해결하기 위해 다음 단계를 고려할 수 있습니다:

  1. 후크 절차의 올바른 구현 확인:
    • 후크 프로시저가 올바르게 구현되었는지 확인하십시오. 후크 프로시저는 이벤트가 발생할 때 호출되므로, 이 함수가 정상적으로 동작하는지 확인해야 합니다. 후크 프로시저 내에서 오류가 발생하거나, 적절한 매개변수를 받지 못하는 경우 이벤트가 제대로 처리되지 않을 수 있습니다.
  2. 메시지 루프 존재 확인:
    • 후킹이 올바르게 작동하려면 메시지 루프가 필요합니다. 후크는 메시지 큐를 통해 메시지를 받아서 처리하므로, 메시지 루프가 제대로 실행되고 있는지 확인해야 합니다. GetMessage 또는 PeekMessage 같은 함수로 메시지를 처리하는 루프가 실행되고 있는지 확인하십시오.
    MSG msg;
    while (GetMessage(&msg, nullptr, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    
  3. DLL에서 후크를 설정한 경우:
    • 후크 프로시저가 DLL에 있는 경우, DLL이 올바르게 로드되었는지 확인하십시오. 후크 프로시저를 실행하는 프로세스에서 DLL이 메모리에 로드되지 않으면 이벤트가 발생하지 않을 수 있습니다.
  4. 올바른 쓰레드 및 프로세스에 후크 설정:
    • SetWindowsHookEx 호출 시, 올바른 쓰레드나 프로세스에 후크가 설정되었는지 확인하십시오. 시스템 전체에 후크를 걸기 위해 NULL을 사용하거나, 특정 쓰레드에 후크를 걸 경우 해당 쓰레드 ID를 정확히 지정해야 합니다.
  5. 후크 체인 유지:
    • 후크 프로시저 내에서 CallNextHookEx를 호출하여 후크 체인을 유지하는 것이 중요합니다. 이를 호출하지 않으면 다른 후크가 정상적으로 동작하지 않을 수 있으며, 시스템 전체에 영향을 미칠 수 있습니다.
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
        if (nCode >= 0) {
            // 후크 처리 코드...
        }
        return CallNextHookEx(NULL, nCode, wParam, lParam);
    }
    
  6. 관리자 권한 확인:
    • 후킹을 시도하는 프로세스가 필요한 권한을 가지고 있는지 확인하십시오. 특정 후킹 작업은 관리자 권한이 필요할 수 있습니다.
  7. 디버그 및 로그 추가:
    • 후크 프로시저 내에 로그를 추가하여 이벤트가 전달되는지, 또는 예상치 못한 오류가 발생하는지 확인할 수 있습니다. 이는 문제의 원인을 진단하는 데 도움이 됩니다.
  8. 충돌 또는 호환성 문제 확인:
    • 다른 프로그램이나 후크가 충돌을 일으킬 수 있습니다. 특히 시스템 전체 후크의 경우, 다른 후크와의 충돌을 피하기 위해 후크의 위치와 후크 체인의 순서 등을 확인해야 합니다.

위의 단계를 하나씩 점검하면서 문제를 진단해 나가면, 후킹 설정 후 이벤트가 발생하지 않는 문제를 해결할 수 있을 것입니다.


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com


반응형