Taste filtern



  • OK, dann nochmal: Wie geht das denn mit dem Keyboard Hook, am besten wäre es, wenn einer gleich den Code umschreiben würde. Ich blicke das echt nicht 😞



  • Wo genau liegt das Problem? Hier gibts auch ein Beispiel: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644960.aspx#system_events



  • Ich habe doch schon gesagt, dass ich das nicht verstehe. Deshalb würde ich mich ja freuen, wenn jemand meinen Code so ändern könnte, dass es funktioniert. Du scheinst das ja alles zu verstehen, ich NICHT!

    PS: Könntest du das bitte wirklich machen?



  • Ich helf dir gerne dabei es zu verstehen. Dazu müsstest du allerdings erstmal konkret sagen was genau du nicht verstehst...



  • Ich verstehe nicht an welcher Stelle ich meine Schleife einbauen soll. Und Außerdem bringt dev c++ die Fehlermeldung das app.h nicht gefunden wurde.



  • Du brauchst keine Schleife. Du registrierst den Hook beim System und deine Hookprozedur wird dann jedesmal wenn eine Taste gedrückt wird vom Betriebssystem aufgerufen.
    Was Dev-C++ angeht, kann ich dir nur schwer dazu raten, dir eine bessere IDE zu suchen.



  • OK. Ich habe das jetzt mit Visual C++ versucht und festgestellt, dass auch der die app.h nicht findet. Was soll ich jetzt machen, bzw. wo bekomm ich die her?



  • Wofür brauchst du die überhaupt?



  • das steht doch da direkt im header. die app.h ist eigebunden und wenn ich die rauslasse spuckt der compiler ne menge fehler aus und es geht nicht
    und wenn es drin ist dann findet er sie nicht und dann geht es nicht.

    kannst du nicht einfach wirklich den code hier posten
    damit ich sehe wie es aussehen muss



  • Der Code in der MSDN ist ein Beispiel, das die Verwendung von Hooks demonstriert und natürlich nicht die Copy&Paste Lösung für dein Problem.

    Ich gehe davon aus, dass die Motivation für dieses kleine Projekt das Interesse daran ist, wie so etwas funktioniert. Zweifellos könnte ich dir eine fertige Lösung vorwerfen. Dann hättest du aber absolut nichts dabei gelernt. Darum werd ich das nicht tun. Konkrete Fragen werd ich dir aber, wie gesagt, gerne und nach bestem Wissen und Gewissen beantworten 😉



  • also so vom reinen ablauf.

    1. alle header einbinden die ich brauche
    2. den hook reinkopieren
    3. dann meinen code dahinter
    4. perfekter halfscope?



  • Ich versteh nicht ganz. Was meinst du mit Hook reinkopieren und deinem Code dahinter? Den Hook wirst du selber schreiben wollen, damit du deinen Code in den Hook reintun kannst.

    Sag mal, mir kommts irgendwie so vor, als würd es dir noch massiv an Programmiergrundlagen fehlen. Vielleicht solltest du erstmal ordentlich C bzw. C++ lernen bevor du dich an solche Dinge wagst?



  • ich werd noch wahnsinnig.
    Dann erklär mir doch bitte den Ablauf/aufbau des hooks. ich habe jetzt schon so oft gesagt das ich das nicht verstehe. Ich möchte doch nur das du das mal erklärst.

    ich wusste auch nicht das das so kipliziert ist.



  • Du definierst eine Callbackfunktion wo du deinen Code reinschreibst, der ausgeführt werden soll, wenn die Taste gedrückt wird. Und diese Funktion übergibst du dann per SetWindowsHookEx() an Windows, das die dann aufruft, wann immer eine Taste gedrückt wird.

    Was genau verstehst du daran nicht?



  • also. ich muss mich erstmal bedanken für deine geduld. ich bin da etwas schwierig.

    hier ist jetzt der code, aber irgendwas stimmt noch nicht.

    #include "stdafx.h"
    
    void halfscope(void)
    {
    	int i=0;
    
        do 
    	{
    		POINT punkt;
    		int taste;
    		int x, y;
    
    		HWND fenster=FindWindowA("ConsoleWindowClass",0);
    		ShowWindow(fenster,0);
    
    		taste=getchar();
    		if(taste==0||taste==224)
    		{
    			taste=getchar();
    			if(taste==133) 
    			{
    					GetCursorPos(&punkt);
    					x=punkt.x;
                        y=punkt.y;
    
                        mouse_event(MOUSEEVENTF_RIGHTDOWN,x,y,0,0);
                        Sleep(1000);
                        mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0);
                        mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0);
                        mouse_event(MOUSEEVENTF_RIGHTUP,x,y,0,0);
    			}
    
    		}
    	} while(i==0);
    }
    
    int main() 
    {
    	SetWindowsHookEx(halfscope);
    
    	return EXIT_SUCCESS;
    }
    

    ist das jetzt wenigstens vom prinzip her richtig?^^



  • SetWindowsHookEx() will mehr als einen Parameter. Wofür brauchst du die Schleife und das FindWindow() und ShowWindow() und die ganzen getchar() und if-Abfragen? Dein Programm beendet sich sofort nachdem es den Hook gesetzt hat wieder.



  • Also:

    Es geht um das Spiel Modern Warfare 2.
    Ich wollte einen Bot erstellen, der bei einer bestimmten Taste, also hier F11, immer einen perfekten und immer gleichen Schuss durchfrührt, mit anvisieren. Damit nicht bei jeder taste gehalfscoped wird, die getch() und if() sachen.

    und die Endlosschleife dachte ich braucht man, damit sich das Programm nicht beendet.

    Welche Parameter hätte den die Funktion noch gerne?

    Die f11 taste lege ich dann auf meine maustasten damit ich da nicht immer hin muss^^



  • Na die Dokumentation zur Funktion hab ich ja in meinem ersten Beitrag schon verlinked. Dass du eine Schleife brauchen wirst damit dein Programm nicht sofort wieder beendet stimmt schon. Allerdings wirst du diese Schleife nicht im Callback haben wollen, sondern im Hauptthread. getch() wird nichts bringen, denn das liest ein Zeichen aus der Konsole. Das ist aber überhaupt nicht was du willst.



  • Welche Parameter brauche ich denn da?
    Und wie kann ich das mit getch() ändern, also welche Funktion ist das dann?

    PS: Die Schleife ist jetzt umgebaut
    PPS: Beim ersten ist es die WH_KEYBOARD_LL nech?



  • Versuch mal genau zu verstehen was ein Callback ist und was SetWindowsHookEx() für dich tut. Wenn dir das Konzept eines Callback nicht klar ist, dann ist jede weitere Diskussion zu dem Thema sinnlos.

    Edit: WH_KEYBOARD_LL klingt schonmal nicht schlecht.


Anmelden zum Antworten