Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Enter-Taste im Java-fenster simulieren (https://www.delphipraxis.net/152194-enter-taste-im-java-fenster-simulieren.html)

Pegasus0211 14. Jun 2010 17:52

Enter-Taste im Java-fenster simulieren
 
Hallo,

ich positioniere einen Text, der sich in der Variablen s befindet, in ein Edit-Feld eines Java-Fensters, das funktioniert prima.

Mein Versuch, die Eingabe automatisch per ENTER-Taste abzuschließen, ist nach mehreren Versuchen
kläglich gescheitert.

Dieser Code funktioniert nicht:

Delphi-Quellcode:
SendMessage(wndChild, WM_SETTEXT, 0, Integer(PChar(s)));
SendMessage(wndChild,WM_Char,VK_Return,0); //Enter Taste simulieren
Hat Jemand weitere Ideen, wie ich die Aufgabe erledigen kann?
Danke für Eure Antworten.


Grüße aus der Nordheide

Bernd

mkinzler 14. Jun 2010 18:54

AW: Enter-Taste im Java-fenster simulieren
 
Das funktioniert so nicht, da Java ja keine Windowsobjekte (Fenster) verwendet. Das ist auch gar nicht gewünscht, dass man die UI Elemente von aussen bedient. Java implementiert ja eine Sandbox

Pegasus0211 14. Jun 2010 19:03

AW: Enter-Taste im Java-fenster simulieren
 
Zitat:

Zitat von mkinzler (Beitrag 1028857)
Das funktioniert so nicht, da Java ja keine Windowsobjekte (Fenster) verwendet. Das ist auch gar nicht gewünscht, dass man die UI Elemente von aussen bedient. Java implementiert ja eine Sandbox

Hallo,

danke für Deine schnelle Antwort.

Der Text wird aber fehlerfrei positioniert.


Hier ist der komplette Code.
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);

 var
  wndMain, wndChild: HWND;
  i  : Integer;
  s  : string;
 begin
  wndMain := FindWindow('SunAwtFrame','Channel: /test');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'SunAwtCanvas', nil);
    wndChild := FindWindowEx(wndChild, 0, 'Edit', nil);
    if wndChild <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
    s := 'ABC';
    SendMessage(wndChild, WM_SETTEXT, 0, Integer(PChar(s)));
    SendMessage(wndChild,WM_Char,VK_Return,0); //Enter Taste simulieren

    end;
  end;
 end;

Gruß Bernd

daywalker9 14. Jun 2010 19:34

AW: Enter-Taste im Java-fenster simulieren
 
Wenn überhaupt:

Delphi-Quellcode:
SendMessage(handle,WM_KEYDOWN,VK_RETURN,0);
SendMessage(handle,WM_KEYUP,VK_RETURN,0);

Pegasus0211 14. Jun 2010 20:54

AW: Enter-Taste im Java-fenster simulieren
 
@daywalker9

Danke für den Tipp; aber auch das funktioniert nicht; der Text steht im Editfeld und wird nicht gesendet.

Gruß Bernd

hph 4. Sep 2010 09:25

AW: Enter-Taste im Java-fenster simulieren
 
Ich hatte bis eben das gleiche Problem. Text lässt sich an ein externes Fenster senden, aber die Return-Taste wird nicht oder nicht jedesmal korrekt übertragen. Jetzt habe ich das Problem gelöst. Man muss vor dem Abschicken der RETURN-Taste sicherstellen, dass das Java-Fenster auch den Focus besitzt!
Mit

SetForegroundWindow(hWndParent);
Keybd_Event(vk_Return,0,0,0);
Keybd_Event(vk_Return,0,KEYEVENTF_KEYUP,0);

simuliere ich jetzt zuverlässig das Drücken und Loslassen der RETURN-Taste!

hWndParent müsste bei dir das Handle des Java-Fensters sein.

Ich hoffe das hilft weiter!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz