Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: keybd_event und spezialzeichen (/ , .)

  Alt 12. Jun 2006, 16:47
Du hast die Funktion noch nicht richtig verstanden.
Der erste Parameter der Funktion keybd_event verlangt nicht ein Zeischen sondern einen Tastencode.
um ein "a" oder ein "A" darzustellen ist der Tastencode gleich (ist schließlich die gleiche Taste auf der Tastatur). Wenn du jedoch ein großes "A" haben willst musst du zuvor die Shift-Taste drücken und danach wieder los lassen.

Daraus ergibt sich dann das Ord(AText[xInd]) an dieser Stelle falsch ist denn ord('a') und ord('A') ergeben obwohl "a" und "A" auf der gleichen Taste liegt.

Ord gibt dir also nur den Ascii-Wert des Zeischens (oder wars Ansi - ist aber egal).
den Tastaturcode eines zeischens bekommst du mit
VkKeyScan(AText[xInd]) in diesem Tastaturcode ist auch enthalten ob die Shifttaste dazu gedrückt sein muss etc.

Mit
Delphi-Quellcode:
for xInd := 1 To Length(AText) Do
begin
  lByte := VkKeyScan(AText[xInd]);
  keybd_event(lByte, MapVirtualKey(Ord(AText[xInd]),1), 0, 0 );
  keybd_event(lByte, MapVirtualKey(Ord(AText[xInd]),1), KEYEVENTF_KEYUP, 0 );
  Application.ProcessMessages;
end;
bekommst du aber noch nicht das gewünschte Ergebnis da hier nicht berücksichtigt wird das Shift etc. mit gedrückt werden muss.
Wenn also AText = "ABCabc" ist würdest du bei diesem Beispiel dann noch "abcabc" bekommen weil eben die Shifttaste nicht gedrückt wird. Du musst also noch die Bits von lByte auswerten welche festlegen ob die shifttaste, strg-Taste oder Alttaste mit gedrückt werden muss.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat