Problem mit Globalem Keyhook



  • Hallo, nach diesem Beispiel hier: http://www.mpcforum.com/archive/index.php/t-78344.html
    habe ich einen Keylogger mit globalem Keyhook ohne dll geschrieben. Das Problem ist nun, dass der Keylogger zwar unter Vista einwandfrei läuft, aber unter XP keine Taste aufzeichnet. Hier erstmal der Code:

    #define _WIN32_WINNT 0x0400
    
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <windows.h>
    #include <time.h>
    
    using namespace std;
    
    fstream datei;
    char Buffer[50];
    
    HHOOK hHook;
    HINSTANCE hExe;
    
    __declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode,    WPARAM wParam,  LPARAM lParam)
    {
        if  ((nCode == HC_ACTION) && (wParam == WM_KEYDOWN))
        {
            KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam);
            char tile = (char)hookstruct.vkCode;
            sprintf(Buffer, "You have just pressed: %c", tile);
            MessageBox(0, Buffer, NULL, MB_OK);
        }
         return CallNextHookEx(hHook, nCode, wParam, lParam);
    }
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
    {
    hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, NULL);
    while(GetMessage(NULL,NULL,0,0));
    return UnhookWindowsHookEx(hHook);
    }
    

    Hat jemand ne Idee, warum der Keyhook nur unter Vista läuft?

    Bitte keine Antworten bezüglich 'Höf auf Malware zu programmieren' -> Das nervt, und vor allem mach ich das nicht, bin normalerweise in der Spieleprogrammierung tätig, wollte das hier nur mal ausprobieren 😃



  • Kann es sein, dass es etwas mit dem
    #define _WIN32_WINNT 0x0400
    zu tun hat?



  • Problem gelöst, es hatte nichts mit dem 0x400 zu tun:

    Nach dem einstündigen Suchen nach einer Lösung bin ich draufgekommen, dass das Originalprogramm auf XP läuft, also die übliche Problemanalyse: Zeile für Zeile vom funktionierenden Programm zum nichtfunktionierenden. Langwierig aber wirkungsvoll: Nach 30 Minuten hatte ich den Fehler:

    Diese Zeile:

    hExe = GetModuleHandle(NULL);
    

    gehört an den Anfang der WinMain.


  • Mod

    Arr0ws schrieb:

    Diese Zeile:

    hExe = GetModuleHandle(NULL);
    

    gehört an den Anfang der WinMain.

    Unfug! Du brauchst das gar nicht weil WinMain hInstance freiwillig mitliefert.


Anmelden zum Antworten