// Hiermit wird ein angeblicher Tastendruck (Tastendrücke) an eine
// Komponente oder ein anderes Fenster geschickt.
// Siehe auch
Einen Buttonclick simulieren

// Getestet mit D4 unter XP

// 1. Einfache Variante

procedure tastendruck(T, ZS: Word; TWC: TWinControl); 
begin 
  if TWC <> nil then 
    TWC.setfocus; 
  keybd_event(ZS, 0, 0, 0); 
  keybd_event(T, 0, 0, 0); 
  keybd_event(T, 0, keyEventF_keyUp, 0); 
  keybd_event(ZS, 0, keyEventF_keyUp, 0); 
end; 
 
// Es wird eine "1" in Edit1 eingetragen 
procedure TForm2.Button4Click(Sender: TObject); 
begin 
  tastendruck(49, 0, Edit1); 
end; 
 
// Die Buchstaben a..z und A..Z werden eingetragen 
procedure TForm2.Button5Click(Sender: TObject); 
var x: integer; 
begin 
  for x := 65 to 90 do tastendruck(x, 0, Edit1); 
  for x := 65 to 90 do tastendruck(x, vk_shift, Edit1); 
end; 
 
// Die Anwendung wird mit ALT+F4 geschlossen 
procedure TForm2.Button6Click(Sender: TObject); 
begin 
  tastendruck(vk_F4, vk_menu, application.mainform); 
end; 
 
// Ein unbenanntes Notepad-Fenster wird geleert 
// und mit Zahlen und Zeichen gefüllt 
procedure TForm1.Button2Click(Sender: TObject); 
var 
  x: integer; 
  h: HWND; 
begin 
  h := findwindow(nil, 'Unbenannt - Editor'); 
  if h = 0 then exit; 
  showwindow(h, sw_shownormal); 
  setforegroundwindow(h); 
// Alles markieren------ 
  tastendruck(ord('B'), VK_MENU, nil); 
  tastendruck(ord('M'), 0, nil); 
// ---------------------- 
  for x := 48 to 57 do tastendruck(x, 0, nil); 
  for x := 48 to 57 do tastendruck(x, vk_shift, nil); 
end;
 

// -----------------------------------------------------------------

// 2. Variante mit Virtual-Key Ermittlung
//    In Variante 1 muss man den "virtual-key code" kennen, um ein Zeichen
//    zu senden. Hier wird nun dieser Code zuerst ermittelt.
//    Als Beispiel wird eine ganze Zeichenkette an ein
unbenanntes
//    Notepad-Fenster
gesendet.

function CharToVK(source: Char; var shift, ctrl, alt: boolean): smallint; 
var 
  Code: smallint; 
begin 
  Code := VkKeyScan(source); 
  result := lo(Code); 
  Code := hi(Code); 
  shift := Code and 1 > 0; 
  ctrl := Code and 2 > 0; 
  alt := Code and 4 > 0; 
end; 
 
procedure SendText(s: string); 
var 
  x: integer; 
  T: smallint; 
  shift, ctrl, alt: boolean; 
begin 
  for x := 1 to length(s) do begin 
    T := chartovk(s[x], shift, ctrl, alt); 
    if shift then keybd_event(vk_shift, 0, 0, 0); 
    if ctrl then keybd_event(vk_control, 0, 0, 0); 
    if alt then keybd_event(vk_menu, 0, 0, 0); 
    keybd_event(T, 0, 0, 0); 
    keybd_event(T, 0, keyEventF_keyUp, 0); 
    if alt then keybd_event(vk_menu, 0, keyEventF_keyUp, 0); 
    if ctrl then keybd_event(vk_control, 0, keyEventF_keyUp, 0); 
    if shift then keybd_event(vk_shift, 0, keyEventF_keyUp, 0); 
  end; 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  h: THandle; 
  s: string; 
begin 
  s := 'Das ist ein Test mit verschiedenen Zeichen: #~,{}[]()\/&%"_;@ÄÖÜß'; 
  h := findwindow(nil, 'Unbenannt - Editor'); 
  if h <> 0 then begin 
    showwindow(h, sw_shownormal); 
    setforegroundwindow(h); 
    sendText(s); 
  end else showmessage('Ziel-Fenster nicht gefunden'); 
end; 


Zugriffe seit 6.9.2001 auf Delphi-Ecke