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을 종료하자마자 시스템이 후크를 잊어 버린 것처럼() 함수를 호출합니다.
누구든지이 문제에 대해 밝힐 수 있습니까? 나는 일하기 위해 노력하면서 며칠 동안 머리카락을 꺼내 왔지만 운이 없었습니다.
감사합니다. 그 프로그램은 약간 짜증나는데, 이제는 멋진 4 줄부터 100 줄까지 모든 윈도우의 것들을 초기화 할 수있었습니다. 그러나 그것이 효과적이기 때문에 기쁩니다. – Oliver