Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: String erkennen und Tastendrücke simulieren

  Alt 13. Jun 2007, 16:08
ok, zum verständnis das ganze nochmal mit kommentaaren.
Delphi-Quellcode:
procedure EnterText(AText: String);
var lCount : Integer;
    lScanCode : Smallint;
    lWithAlt,
    lWithCtrl,
    lWithShift : Boolean;
begin
  //Alle bustaben des Strings durchgehen (schließlich soll jeder getippt werden)
  for lCount := 1 To Length(AText) Do
  begin
    //VkKeyScan gibt uns zurück welche Tasten auf der Tastatur gedrückt werden müssen
    //in den ersten 8 bit ist die eigentliche Taste und die anderen Bits sind gesetzt je nach dem welche
    //Tasten notwendig sind
    lScanCode := VkKeyScan(AText[lCount]);
    //Ermitteln ob Shift gedrückt wurde (wenn 9tes bit gesetzt ist)
    lWithShift := lScanCode and (1 shl 8) <> 0;
    //Ermitteln ob Strg gedrückt wurde (wenn 10tes bit gesetzt ist)
    lWithCtrl := lScanCode and (1 shl 9) <> 0;
    //Ermitteln ob Alt gedrückt wurde (wenn 11tes bit gesetzt ist)
    lWithAlt := lScanCode and (1 shl 10) <> 0;

    //wenn für das Zeichen die Shifttaste notwendig ist müssen wir diese drücken (nicht loslassen)
    if lWithShift then
      keybd_event(VK_SHIFT, 0, 0, 0);
    //wenn für das Zeichen die Strgtaste notwendig ist müssen wir diese drücken (nicht loslassen)
    if lWithCtrl then
      keybd_event(VK_CONTROL, 0, 0, 0);
    //wenn für das Zeichen die Alttaste notwendig ist müssen wir diese drücken (nicht loslassen)
    if lWithAlt then
      keybd_event(VK_MENU, 0, 0, 0);

    //Jetzt drücken wir die eigentliche Taste - bei A also a
    //die eigentliche Taste sind zwar nur die ersten 8 bit, allerdings müssen wir diese nicht
    //abspalten da keybd_event die restlichen bits vernachlässigt - besser wäre lScanCode auf
    //Byte zu casten damit die anderen Bits verschwinden
    keybd_event(lScanCode, 0, 0, 0);
    //Jetzt lassen wir die eigentliche Taste los - bei A also a
    keybd_event(lScanCode, 0, KEYEVENTF_KEYUP, 0);

    //Wenn wir für die Darstellung des Zeichens die Alttaste drücken mussten lassen wir diese jetzt wieder los
    if lWithAlt then
      keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
    //Wenn wir für die Darstellung des Zeichens die Strgtaste drücken mussten lassen wir diese jetzt wieder los
    if lWithCtrl then
      keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    //Wenn wir für die Darstellung des Zeichens die Shifttaste drücken mussten lassen wir diese jetzt wieder los
    if lWithShift then
      keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
  end;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat