<erledigt>Virtual-Key Code umwandeln... und SendMessage Problem



  • Hallo

    Ich komme heute einfach nicht in die Gänge und find momentan keine Lösung, darum bitte ich Euch um Hilfe.

    Ich danke Euch schon mal im vorraus fürs helfen.

    Problem 1:

    Ablaufbeschreibung:
    Ich setzte ein Hook mit WH_KEYBOARD auf mein Ziel-Fenster und fange dessen Messages ab.

    Problembeschreibung:
    Nun zum eigentlichen Problem, in der LRESULT CALLBACK Funktion empfang ich folgende Variable"LPARAM".
    Diese Variable enthält in meinem Beispiel die Tastatur Eingaben als Virtual-Key Code.
    Nun wollt ich wissen ob man den Virtual-Key Code direkt umwandeln kann oder muss ich alles per if abfragen und selbst umwandeln.

    Etwa so:

    if(strcmp((0xFF0000&LPARAM)>>16) == (0x41))
       std::cout << "Ist ein A" << std::endl;
    

    *(Der Code ist einfach so aus dem Ärmel geschüttelt, keine Ahnung ob er funktioniert.)
    *

    Gibt es da eine andere Möglichkeit?

    Problem 2:

    Wie oben beschrieben erhalte ich die Messages des Ziel-Fenster in meiner Hook.dll, nun wollte ich diese Informationen weiterleiten zu meinem Main-Programm mittels der SendMessage. (Wenn es eine bessere Möglichkeit als diese gibt, dann sagt das mir ruhig...)

    Das mache ich wie folgt:

    check = SendMessage(g_hWnd, WM_COPYDATA, 0, (LPARAM)(VOID*)&CDS);
    
    //g_hwnd ist der Handler von meinem Main-Programm
    

    Im Main-Programm sollte ich diese Message abfangen..

    LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch( msg )
    	{
    		case WM_COPYDATA:
    		{
    			MessageBox(hWnd, TEXT("COPYDATA"), TEXT("COPYDATA"), MB_OK);
    		}
    }
    

    Nur kommt da nie was an leider...
    Ich habe mit Spy++ nachgeschaut ob eine Nachricht kommt, aber leider ohne erfolg.. (Könnte ja sein das ich es falsch abfange)

    Ist dieses Verfahren möglich mittels SendMessage die Daten zu meinem Main Programm zu schicken? Und ist es sinnvoll und effizient?
    Wisst ihr per zufall wieso es nicht lauft *MagischeKugelFrag*

    Nochmals Danke fürs helfen.

    PS: Das Programm dient zum Üben von der WinAPI, vielleicht entwickle ich es noch weiter das ich die Console Messages von Counter-Strike Source abfange und die dann auswerte (Kills/Death Statistik). Aber das ist eher sinnlos, da es besser wäre das über ein Server-Plugin zu lösen..

    MSDN Link:
    http://msdn.microsoft.com/en-us/library/ms674714(VS.85).aspx


  • Mod



  • Hallo,

    MapVirtualKey:

    http://msdn.microsoft.com/en-us/library/ms646306(VS.85).aspx

    MfG,

    Probe-Nutzer



  • Danke für die schnellen antworten.

    @Martin Richter
    GetKeyNameText <-- liefert ScanCode zurück.. (habe ich schon mal ausprobiert)

    @Probe - Nutzer

    messagel = MapVirtualKey(Event.lParam, MAPVK_VK_TO_CHAR);
    

    Der Compiler kennt den Bezeichner MAPVK_VK... nicht, aber ich werde gleich noch schauen weshalb..

    Hat wer noch eine Idee zu meinem 2 Problem? (SendMessage)

    Gruess Manu



  • Ich habe hier auch nur das Platform SDK für VS 2005, dort sind diese Bezeichner auch noch nicht verfügbar, kann also gut sein, dass man das aktuellste SDK benötigt, um damit zu arbeiten. Ansonsten gibt es hier:

    http://blogs.msdn.com/michkap/archive/2006/08/29/729476.aspx

    die entsprechenden Werte, wie sie wohl auch in das SDK übernommen worden sind.

    MfG,

    Probe-Nutzer



  • Danke Probe - Nutzer!

    Es läuft jetzt.

    MapVirtualKey((0xFF0000&Event.lParam)>>16, 1);

    Mir ist aufgefallen das es sich um ScanCode handelt und nicht um Virtual-Key Code. Deshalb steht auch als 2 Parameter eine 1 und nicht eine 2.

    Danke Nochmals.



  • 2 Problem habe ich behoben..

    Ich habe vergessen den Windows Handler vom Main Programm im Data Segment zu Definieren.. das es für die DLL überall Aufrufbar ist..

    #pragma data_seg(".shared")
    
    HANDLE g_DllHandle = 0;
    HHOOK  g_hMyHook = 0;
    
    HWND	g_hWnd = 0;   //NEU
    
    #pragma data_seg()
    #pragma comment(linker, "/SECTION:.shared,RWS")
    

    Korrigiert mich wenn ich falsch liege bitte..

    Globale Variablen funktionieren bei DLL ansonsten nicht? Oo


Anmelden zum Antworten