C++ Konsolen-Anwendung



  • Guten Abend,

    zuerst Hintergrund-Infos:
    Sprache: C/C++
    System: Windows 7 64Bit
    Studiere Elektro-und Informationstechnik im 3.Semester
    Wissen: 1 Semester C (Grundlagen) - 2 Semster C++ (zurzeit bei Klassen, nur Konsole)

    Nun zu meinem Problem:
    Ich möchte ein "Cheat" Programm für das Spiel Age of Empires 2 schreiben.
    Vorgehen:
    - Eine Konsolenanwendung schreiben, die meine AOE.exe startet (erfolgreich getestet). Die Anwendung bleibt so lange aktiv, bis AOE.exe geschlossen wird(erfolgreich getestet). Während AOE.exe läuft checkt meine Anwendung die Tastatureingaben und wenn eine bestimmte Taste gedrückt wird, führe aus:
    drücke [ENTER] gebe einen cheat-code ein (bereits im Programm definiert) und drücke wieder [ENTER].
    Meine Problem ist nun, sobald meine Konsole nicht mehr aktiv angeklickt ist, reagiert sie nicht auf Tastatur-Eingaben.

    Ich bitte nun um Hinweise, wie meine Konsole die Tastatureingaben checkt, wenn ein anderes Fenster aktiv im Vordergrund ist. Wie komplex wird meine Anwendung dabei und ist das Problem überhaupt mit einer Konsolen-Anwendung lösbar?

    Vielen Dank

    Edit: Für die simulation von Tastatur-Eingaben habe ich bereits eine Funktion, sprich das [Enter] drücken und einen Text eingeben, sollte soweit funktionieren.



  • falsches forum
    richtig winapi: key hook

    aber bevor du da postest, beschäftige dich mal damit:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx

    wenn du dazu dann fragen hast, postest du im winapi forum

    bb



  • Okay, vielen Dank für den Hinweis!
    Ich habe mir den Link angeschaut & versuche nun, ein kleines Übungsprogramm damit zu schreiben.

    Wäre ein mod bitte so nett, meinen Beitrag zu verschieben? Danke!



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo

    for(int key=0;key<256;key++){
    
     if(GetAsyncKeyState(key) == -32767)
     {
       cout<<key; 
     }
    
    }
    
    while(1)
    {
     if(GetAsyncKeyState(31) == -32767 ) // 31 stand glaub ich für 1 (nicht numblock)
     {
       cout<<"Du hast die 1 gedrueckt"<<endl;
     }
    }
    

    Um alles ohne Zahlen zu machen schau dir mal das hier an:

    while(1)
    {
      Sleep(10);
      for(key=0;key<256;key++)
     {
    
        if(GetAsyncKeyState(key)==-32767)
    
        {
           scan=MapVirtualKeyEx(key,0,GetKeyboardLayout(0));
           GetKeyNameText(scan << 16,szKey,MAX_PATH);
           cout<<szkey;
        }
      }
    }
    

    Globaler Keyboard Hook:

    #include <iostream>
    #include <windows>
    #include <fstream>
    using namespace std;
    
    static HHOOK hhookSysMsg;
    bool un;
    HOOKPROC lpfn;
    long mouse_pos_X;
    long mouse_pos_Y;
    
    WPARAM wParam;
    MOUSEHOOKSTRUCT m_struct;
    
    LRESULT CALLBACK GlobalKeyboardHook(int nCode, WPARAM wParam, LPARAM lParam);
    
    int main(int argc, char* argv[])
    {
    
    HHOOK g_Hook;
    HANDLE g_evExit;
    
    MSG msg;
    DWORD status;
    
    	 g_evExit = CreateEvent(0, TRUE, FALSE, 0);
         if (!g_evExit) 
         { 
    		 cerr << "CreateEvent error: " << GetLastError() << endl;
    		 system("PAUSE");
    		 return 0;
    	 }
    
    	hhookSysMsg = SetWindowsHookEx(WH_KEYBOARD_LL , (HOOKPROC)GlobalKeyboardHook, GetModuleHandle(0), 0 );
    	if ( hhookSysMsg == 0 )
    	{
    		cerr<<"set hook error: "<<GetLastError()<<endl;
    		system("PAUSE");
    		return 0;
    	}
    
    	while(1)
    	{
    	   // geht auch mit: GetMessage(&msg, 0, 0, 0);
    		PeekMessage(&msg, 0, 0, 0, PM_REMOVE);
    		DispatchMessage(&msg);
    	}
    
    system("PAUSE");
    	return 0;
    }
    //---------------------------------------------------------------------------
    
    LRESULT CALLBACK GlobalKeyboardHook(int nCode, WPARAM wParam, LPARAM lParam )
    {
    
    if(nCode == HC_ACTION)
    {
    
      cout<<(( KBDLLHOOKSTRUCT * ) lParam )-> vkCode<<endl; // Typekonvertierung von LPARAM auf KBDLLSTRUCT
    
     }
    
       return CallNextHookEx(hhookSysMsg , nCode, wParam, lParam);
    }
    


  • Vielen Dank für deinen ausgesprochen hilfreichen Beitrag!!

    Sollten sich noch andere dafür interessieren, ich habe eine gute Auflistung von so ziemlich allen Tastatur-Codes gefunden.
    Ich werde nun versuchen, diese Elemente in mein Programm zu integrieren.
    Sobald es etwas neues gibt, melde ich mich wieder.

    Danke!



  • Hier gibts noch mehr Tastaturcodes 🙂

    http://msdn.microsoft.com/en-us/library/ms927178.aspx



  • sry, verklickt... Gibt es keine Löschfunktion?


Anmelden zum Antworten