Tutorial: Tastatureingaben global abfangen und simulieren
Teil I: Tastatureingaben global abfangen
Wenn man Tastatureingaben global (also ohne dass die eigene Anwendung im Vordergrund läuft) lediglich auswerten, aber nicht manipulieren will, funktioniert dass ganz einfach mit
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:
 | if GetAsyncKeyState(VK_TASTE) < 0 then TuIrgendWas;					 | 
		
	  
Die VK_* - Codes findet ihr in der Delphi-Hilfe (Einfach irgendeinen VK_* - Eintrag auswählen).
Wenn die Eingabe kontinuierlich abgefragt werden soll, verwendet man am besten einen Timer (eine Endlosschleife frisst Unmengen an Resourcen):
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 
 | procedure TForm1.Timer1Timer(Sender: TObject);begin
 if GetAsyncKeyState(VK_TASTE) < 0 then TuIrgendWas;
 end;
 | 
		
	  
und setzt "Interval" auf eine Zahl kleiner 20.
Wenn die Eingaben manipuliert werden sollen, muss man allerdings den weit komplizierteren Weg über Hooks nehmen (Davon gibt's in dieser Kategorie ein Tutorial).
Teil II: Tastatureingaben global simulieren
Das simulieren eines Tastendrucks funktioniert recht einfach mit
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 
 | keybd_event(VK_TASTE, Scancode, 0, 0); keybd_event(VK_TASTE, Scancode, KEYEVENTF_KEYUP, 0); 					 | 
		
	  
Die erste Zeile drückt hier die Taste, die zweite lässt sie wieder los.
Um einen ganzen String "einzutippen", verwentet man am besten diese Methode:
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 
 | procedure SendKeyString(KStr: String);var
 Scan: SHORT;
 key: Byte;
 i: Integer;
 begin
 for i := 0 to length(KStr) do begin
 key := Byte(Kstr[i]);
 Scan := MapVirtualKey(key, 0);
 keybd_event(key, Scan, 0, 0);
 keybd_event(key, Scan, KEYEVENTF_KEYUP, 0);
 end;
 end;
 | 
		
	  
Um nur ein einziges Zeichen zu senden, diese:
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | procedure SendKeyPress(KChar: Char);var
 Scan: SHORT;
 key: Byte;
 begin
 key := Byte(KChar);
 Scan := MapVirtualKey(key, 0);
 keybd_event(key, Scan, 0, 0);     keybd_event(key, Scan, KEYEVENTF_KEYUP, 0); end;
 | 
		
	  
Dabei ist zu beachten, dass der String bzw. das Zeichen ausschließlich aus Tatsächlich vorhandenen Tasten bestehen darf: Beispielsweise ist "H" und "4" eine Taste, "z" und "@" aber keine!
 
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat