Ich habe folgende Funktion:
Delphi-Quellcode:
function SendText( Command:
String ): HWND;
var
Handle, Handle1: HWND;
i: Integer;
begin
Handle1 := FindWindow('
SphereSvr', '
SphereServer V0.56b-Nightly - MyShard (Running) ');
//FindWindow('SphereSvr',nil);
if ( Handle1 = 0 )
then
Handle1 := FindWindow( '
sphereSvr',
nil );
if Handle1 = 0
then
begin
Result := 0;
Application.MessageBox( PChar( '
Ultima Online Client must be started!'),'
UO Commander - Error!', MB_OK+MB_ICONERROR );
exit;
end;
Handle := GetDlgItem(Handle1, 11);
//FindWindowEx(Handle,0,'Edit',nil);
// Send an enter first
SendMessage(
Handle, WM_CHAR, 13, 0 );
for i := 0
to length( Command )
do
SendMessage(
Handle, WM_CHAR, Ord( Command[i] ), 0 );
// Send an enter at the end
sleep(2000);
SendMessage(
Handle, WM_CHAR, 13, 0 );
Result :=
Handle;
end;
Ich habe die Klasse des Fensters, und die ID des Edit-fensters innerhalb dieses Programmes per XSpy herausgefunden.
Sende ich nun einen Text per
SendText('fgfdgdfgfdgd');
an dieses Edit-Feld, was auch klappt.
Normalerweise sendet die funktion danach ein Return. Das "sleep(2000);" habe ich Testweise mal eingebaut, weil ich dachte, dass das Return am Ende einfach zu schnell gesendet wird.
Aber dies klappt nicht. Der Text bleibt in dem Edit-Feld stehen, aber wird nicht bestätigt. Wenn ich nun manuell die Return Taste drücke, funktioniert es.
Was mache ich falsch?