Thema: Delphi Probleme mit keybd_event

Einzelnen Beitrag anzeigen

stephan3309

Registriert seit: 16. Aug 2006
15 Beiträge
 
#1

Probleme mit keybd_event

  Alt 5. Aug 2009, 10:24
Guten Morgen!

Ich möchte von meinem Programm aus einen String, den ich von einer RS232 Schnittstelle einlese
an ein externes Programm senden.
Leider habe ich noch ein kleines Problem mit der Übergabe an ein externes Programm.
Die Handles der externen Programme habe ich erfolgreich mit Win-Spy finden können.

Nach dem ich Google und Foren-Suchen gequält habe, kam folgendes dabei raus:

Delphi-Quellcode:
procedure TForm1.B_SendClick(Sender: TObject);
var
  wndMain, wndChild: HWND;
  i: integer;
  s : string;
begin
  s := E_Rx_String.Text;


  wndMain := FindWindow('Notepad','Unbenannt - Editor');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'Edit', nil);
    if wndChild <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
       SetForegroundWindow(wndChild);
          for i := 1 to length(s) do
            if VkKeyScan(s[i])>255 then begin
              keybd_event(VK_SHIFT, 0, 0, 0);
              keybd_event(VkKeyScan(s[i]), 0, 0, 0);
              keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
              end else keybd_event(VkKeyScan(s[i]), 0, 0, KEYEVENTF_KEYUP);
       end;
    end else ShowMessage('Fenster nicht gefunden!');
end;
Wenn unterschiedliche Buchstaben/Zahlen eingegeben werden, funktioniert das auch wunderbar,
wenn in dem Editfeld aber gleiche Zeichen nebeneinander stehen, werden die nicht ausgegeben.
Beispiel:
Eingabe im Delphi Programm -> Ausgabe in Notepad
'111' -> 1
'A111' -> A1
Sind jedoch unterschiedliche Zeichen nebeneinander, funktioniert das ganze wunderbar:
'123' -> 123

Kann mir einfach nicht erklären warum das so ist .
Die Länge des Strings wird (in der For-Schleife/length(s)) korrekt ermittelt.

Vielleicht könnt Ihr mir einen Tip geben, woran das liegt,...und wie ich das Problem vielleicht
beseitigen kann.

Einen schönen Tag noch,

stephan
  Mit Zitat antworten Zitat