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