Witam.
Mam następujący problem, po przeczytaniu kilku tematów z forum, a także pogrzebaniu w msdn'nie dalej nie wiem w czym problem.
Platforma: Windows XP
IDE: DevC++
Język: C++
Zakładam globalny hook w bibliotece DLL. Wygląda to tak:
/* Replace "dll.h" with the name of your header */
#include "dll.h"
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
hDllInst = hInst;
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
void DLLIMPORT HookConsole()
{
MessageBox(NULL, "W HookConsole.", "_Msg", MB_OK);
hHook = SetWindowsHookEx(WH_KEYBOARD, &KeyProc, hDllInst, 0);
}
void DLLIMPORT UnhookConsole()
{
MessageBox(NULL, "W UnhookConsole.", "_Msg", MB_OK);
UnhookWindowsHookEx(hHook);
}
LRESULT CALLBACK DLLIMPORT KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
if(code < 0) return CallNextHookEx(hHook, code, wParam, lParam);
if(wParam == VK_RETURN) MessageBox(NULL, "To jest enter", "MSG", MB_OK);
else MessageBox(NULL, "To nie enter", "MSG", MB_OK);
return CallNextHookEx (0, code, wParam, lParam);
}
W deklaracjach (dll.h) wszystko ujęte jest w extern "C"{}
Tak wyglądają funkcje w DLL. Komunikaty o zakładaniu z funkcji Hook i Unhook Console widać. Natomiast nie dzieje się nic poza tym. Nie reaguje na wciskane klawisze. Oczywiście bibliotekę ładuję i funkcje zakładające i zdejmujące hooka. Zakładam w WM_CREATE, zdejmuję w WM_DESTROY.
Pytanie:
Dlaczego to nie działa ? Hook globalny, założony w DLL. Powinno śmigać, a nie śmiga. Po kompilacji DLL'ki wyskakuje ostrzeżenie, że nie zdefiniowano Host Application, to może być powód ? (I jeśli tak, to jak to mam podczepić, co wpisać tam gdzie trzeba, bo pisze, że można to ustawić w jakiś tam parametrach).
Pozdrawiam
Mrówa.