witam, mam problem. przegladalem wiele watkow na ten temat i wiele z nich nie rozwiazuje mojego problemu. po pierwsze, jak to rozwiazac: gdy laduje moja biblioteke do konsoli otrzymuje komunikat pozytywny (ze hook zostal zaladowany), ale gdy wylaczam konsole ukazuje mi sie komunikat, ze hooka nie udalo sie zdjac. Po kilku sekund (mimo, ze konsola jest wylaczona) pisze, ze zaladowano hooka. Znow za pare chwil informuje mnie ze zdjeto hooka pozytywnie. I to w dowolnych momentach. Co tu jest grane?! Kod:

void Main();

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
HHOOK hook;
HINSTANCE hInst;

bool APIENTRY DllMain(HINSTANCE hInstance, DWORD reason, LPVOID reserved)
{
    hInst = hInstance;
    switch (reason)
    {
        case DLL_PROCESS_ATTACH: Main();
        case DLL_PROCESS_DETACH: 
        {
             if(UnhookWindowsHookEx(hook))
             MessageBox(NULL,L"UDALO sie! zdjeto HOOK",L"",NULL);
             else
             MessageBox(NULL,L"nie udalo sie zdjac hook",L"",NULL);
        }
    } 
    return true;
}

void Main()
{
    hook = SetWindowsHookEx(WH_KEYBOARD,&KeyboardProc,hInst,0);
    if(hook)
        MessageBox(NULL,L"PRAWIDLOWO zalozono HOOK",L"",NULL);
    else
        MessageBox(NULL,L"Niestety nie udalo sie zalozyc HOOK'a",L"",NULL);
}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode < 0) 
        return CallNextHookEx(hook,nCode,wParam,lParam);

    if(wParam == 0x48)
    {
        if((lParam & 0x80000000) == 0)
            MessageBox(NULL,L"KEY_UP (H KEY)",L"",NULL);
        else
            MessageBox(NULL,L"KEY_DOWN (H KEY)",L"",NULL);
    }

    return CallNextHookEx(hook,nCode,wParam,lParam);
}
  1. chcialbym sie dowiedziec takze , jak sprawdzac czy klawisz zostal wcisniety, czy zwolniony. Wiem byly takie tematy, ale zwykle w tych tematach userzy przekierowuja do tych tematow co wygasły ;/

    
        if(wParam == 0x48)
    {
        if((lParam & 0x80000000) == 0)
            MessageBox(NULL,L"KEY_UP (H KEY)",L"",NULL);
        else
            MessageBox(NULL,L"KEY_DOWN (H KEY)",L"",NULL);
    }

    Taka operacja zwraca tylko wartosc 0 czyli, ze klawisz zostal zwolniony. Co na to poradzic?