2010-03-02 4 views
1

Windows API를 배우려고합니다. 현재 나는 갈고리가 작동하도록하는 데 많은 어려움을 겪고 있습니다. 나는 몇 일간 섞여있는 샘플 코드를 가지고있다 - GUI에 C# 또는 무엇인가, 그리고 C++로 된 dll이있다.SetWindowsHookEx(), 훅이 유지되지 않습니까? (아마도)

bool __declspec(dllexport) InstallHook(){ 
    g_hHook  = SetWindowsHookEx(WH_CBT, (HOOKPROC) CBTProc, g_hInstance, 0); 
    return g_hHook != NULL; 
} 

CBT PROC 또한 DLL에, 이것이다 : 나는이 사람의 코드를 실행하면

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam){ 
    if (nCode < 0) 
     return CallNextHookEx(g_hHook, nCode, wParam, lParam); 
    /* Something should go here to do stuff when certain nCodes are recieved.*/ 
    return 0; 
} 

이 모든 것이 잘 작동 DLL은 외부화이 기능을 가지고있다. 그는 C# GUI의 어딘가에 묻혀있는 InstallHook()에 대한 호출을 가지고 있으며 CBTProc 함수에 중단 점을 넣으면 시스템에서 반복해서 호출된다는 것을 알 수 있습니다. 난 정말 C#을 이해하지 않기 때문에, 나는 다음과 같은 (작은) 콘솔 응용 프로그램과 함께 그것을 잘라하는 것을 시도하고있다 :

int _tmain(int argc, _TCHAR* argv[]){ 
    bool bbbb = InstallHook(); 
    Sleep(2000); 
    return 0; 
} 

내 문제는 내가이 작업을 수행 할 경우, 후크가 더 이상 작동하지 않습니다. 디버거를 사용하면 InstallHook()이 올바르게 호출되고 해당 함수의 g_hHook이 null이 아니지만 CBTProc 함수가 전혀 호출되지 않는다는 것을 알 수 있습니다. InstallHook을 종료하자마자 시스템이 후크를 잊어 버린 것처럼() 함수를 호출합니다.

누구든지이 문제에 대해 밝힐 수 있습니까? 나는 일하기 위해 노력하면서 며칠 동안 머리카락을 꺼내 ​​왔지만 운이 없었습니다.

답변

1

콘솔 응용 프로그램이 있고 시스템이 콘솔 창을 활성화, 생성, 이동하는 것과 관련된 알림을 보내지 않기 때문입니다. 정상적인 Windows 응용 프로그램을 만들어보십시오.

+0

감사합니다. 그 프로그램은 약간 짜증나는데, 이제는 멋진 4 줄부터 100 줄까지 모든 윈도우의 것들을 초기화 할 수있었습니다. 그러나 그것이 효과적이기 때문에 기쁩니다. – Oliver

관련 문제