(Moderator)
Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
Delphi 2006 Professional
|
Re: String erkennen und Tastendrücke simulieren
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
|
|
Zitat
|