verschiedene Fragen zu hotkeys, sendkeys,...



  • hallo,
    hab da mal nen paar fragen, hoffe hier kann mir jemand helfen

    Ich hab mit VC++ 2003 Standard nen kleines Programm geschrieben, das mir erlauben soll mit ner Tastenkombination, z.B. Alt+Q, einfach die Anwendung bzw. das Spiel mittels ::DestroyWindow(hwnd); zu schließen. Außerdem wollte ich damit z.B. mit Alt+1 nen Tastendruck simulieren, wodurch man z.B. Cheatcodes eingeben lassen oder ne automatische Steuerung erreichen könnte. Jedoch hab ich damit ein paar Probleme.

    1. Die meisten Anwendungen machen die Alt+Q Sache ohne Probleme mit und schließen sich. Jedoch hab ich z.B. bei DTM RaceDriver2 das Problem, dass das Spiel die Hotkeys blockiert (oder so), egal was ich als Hotkey definiere, es passiert nichts wenn ich es im game drücke, sobald ich raustappe funktioniert es einwandfrei. Hab da schon in nem englischen Forum gefragt, die meinten irgendwas mit Hooking, allerdings scheiterte ich dort irgendwann mit meinem mangelhaften englisch und die Befehle, die mir genanntwurden kannte mein compiler nicht mal (MSDN ebenfalls nicht).

    2. Das Senden von einzelnen Keys ist ja kein Problem, kann z.B. den Cheat "Panzer" an GTA-VC senden und bekomm dann im Spiel meinen Panzer/Rhino. Aber was muss ich machen um z.B. Tab/Enter zu senden? Beim manchen Spielen (z.B. Heroes of Might and Magic 4) muss man erst Tab drücken, dann den Cheat eingeben, dann Enter drücken -> fertig. Die einzelnen Keys bekomme ich gesendet aber egal wie ich Tab (und Enter) senden will, das will nicht klappen.
    (Tab und Enter gehen nicht, das N klappt, hab auch schon zum Test mal WM_SYSKEYDOWN etc. verwendet)

    hwnd = ::FindWindow(NULL, "Heroes 4");
    //TAB
    ::SendMessage(hwnd,WM_KEYDOWN,0x09,0);
    ::SendMessage(hwnd,WM_CHAR,0x09,0);
    ::SendMessage(hwnd,WM_KEYUP,0x09,0);
    //N
    ::SendMessage(hwnd,WM_KEYDOWN,0x4E,0);
    ::SendMessage(hwnd,WM_CHAR,0x4E,0);
    ::SendMessage(hwnd,WM_KEYUP,0x4E,0);
    //ENTER
    ::SendMessage(hwnd,WM_KEYDOWN,0x0D,0);
    ::SendMessage(hwnd,WM_CHAR,0x0D,0);
    ::SendMessage(hwnd,WM_KEYUP,0x0D,0);

    danke für alle Hinweise/Tips/Hilfe/...



  • hat keiner eine idee? 😞


Anmelden zum Antworten