Zeichen und Tastennachrichten darstellen



  • Das liegt daran, dass deine Zeigervariable pmsg
    Siehe hier:

    // Definition:
    static PMSG pmsg;
    // Verwendung in deinem WM_KEYDOWN-Handler:
    pmsg.lParam=lParam;
    

    vorher nicht mit einem gültigen Speicherbereich initialisiert wurde.
    Du kannst entweder mit new/malloc Speicher allokieren, oder du verzichtest
    hier vollständig auf den Zeiger (meines Erachtens die bessere Wahl 😉 ).



  • aha.

    und wie weiß ich ihr zuerst einen gültigen Speicherbereich zu?



  • pmsg = new MSG;
    

    oder eben gar keinen Pointer sondern so:

    MSG msg;
    

    Wenn du einen Pointer hast greifst du mit -> auf die Member zu, wenn du direkt eine Instanz / Struktur / etc. hast, dann nimmst du dazu .

    Wobei ich bei deinem Beispielcode nicht so ganz verstehe, wozu du das mit der MSG-Struktur überhaupt machst und nicht gleich so:

    GetKeyNameText(lParam, szKeyName, sizeof(szKeyName) /sizeof (TCHAR));
    

    Zeichnen sollte man außerdem normalerweise nur in WM_PAINT...



  • ich machs mit dem pointer, damit ich das ein bisschen üben kann,
    wie du siehst bin ich da noch ziemlich unsicher...

    wenn ich das mit new mach kommen folgende 4 Fehler/Warnungen:

    C:\Programme\Microsoft Visual Studio\MyProjects\WinApi\Keylogger_v1\Keylogger_v1.c(56) : error C2065: 'new' : nichtdeklarierter Bezeichner
    C:\Programme\Microsoft Visual Studio\MyProjects\WinApi\Keylogger_v1\Keylogger_v1.c(56) : warning C4047: '=' : Anzahl der Dereferenzierungen bei 'struct tagMSG *' und 'int ' unterschiedlich
    C:\Programme\Microsoft Visual Studio\MyProjects\WinApi\Keylogger_v1\Keylogger_v1.c(56) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'MSG'
    C:\Programme\Microsoft Visual Studio\MyProjects\WinApi\Keylogger_v1\Keylogger_v1.c(56) : error C2275: "MSG" : Ungültige Verwendung dieses Typs als  Ausdruck
            c:\programme\microsoft visual studio\vc98\include\winuser.h(1236) : Siehe Deklaration von 'MSG'
    

    ich machs so:

    static PMSG pmsg;
    //anderer Quelltext
    pmsg= new MSG;
    pmsg->lParam=lParam;
    //ausgabe:
    GetKeyNameText(pmsg->lParam, szKeyName, sizeof(szKeyName) /sizeof (TCHAR));
    TextOut(hdc, 20,20, szBuffer,wsprintf(szBuffer, "%s", szKeyName));
    


  • flenders schrieb:

    Wenn du einen Pointer hast greifst du mit -> auf die Member zu, wenn du direkt eine Instanz / Struktur / etc. hast, dann nimmst du dazu .

    Ergänzend: Das wär auch noch möglich:

    PMSG pMsg = new MSG;
    (*pMsg).lParam = ...;
    // oder wie flenders schon gesagt hat, mit dem Pfeiloperator:
    pMsg->lParam = ...;
    

    Aber der Pfeiloperator bietet sich natürlich mehr als an :p .

    PS: Was hast du für einen Compiler ?



  • ich hab Microsoft Visual C++

    wieso?



  • roozy schrieb:

    ich hab Microsoft Visual C++

    Hm weil ich mich Frage, warum er 'new' nicht kennt...
    Welche Version ?



  • 6.0



  • Oh, jo ist klar....Fällt mir jetzt erst auf:
    Du musst, wenn du C++ verwendest, als Dateiendung '*.cpp' angeben. Oder du benutzt malloc ( ➡ memory allocation). Das wäre C, ist aber natürlich 'etwas veraltet' 😉 .



  • ich tippe, du hast eine Datei .c und nicht .cpp und da new eben C++ ist musst du dem Compiler auch sagen, dass du das als C++ kompilieren willst (oder du verwendest eben malloc) 🙄

    edit: zu langsmam...



  • 4 Sekunden 😃 ...



  • mit malloc(sizeof(MSG)); hats super hingehauen.

    danke nochmal an alle die mir geholfen haben

    mfg


Anmelden zum Antworten