AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sendmessage an Eingabefeld

Ein Thema von Thomas2017 · begonnen am 12. Dez 2022 · letzter Beitrag vom 14. Dez 2022
Antwort Antwort
Thomas2017

Registriert seit: 7. Mär 2017
7 Beiträge
 
#1

Sendmessage an Eingabefeld

  Alt 12. Dez 2022, 09:52
Hallo,
ich möchte an ein anderes Nichtdelphiprogramm, welches aus einem Eingabefeld und 2 Buttoms besteht,
einen Text in das Einabefeld senden und anschließend einen der beiden Button automatisiert
betätigen.
Mein nachfolgender Ansatz bewirkt lediglich, das ich den Titel des Fensters der anderen Anwendung
"umschreibe".

Delphi-Quellcode:
 
TheWindowHandle := FindAWindow('fremdesprogramm.exe:', '');
 windows.SendMessage(TheWindowHandle, WM_Settext,0,Integer(PCHAR('test')));
Kann mir jemand auf die Sprünge helfen, wie ich das Eingabefeld erreiche.
Wäre auch über den Hinweis auf eine diesbezügliche verständliche Doku
sehr dankbar.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Sendmessage an Eingabefeld

  Alt 12. Dez 2022, 10:00
Such doch einmal nach WinSpy, das Tool kann Dir sogar Code generieren, mit dem Du das Handle des Eingabefelds ermitteln kannst (sofern es sich um Standard-Controls mit Windows-Handle handelt, bei Java-Programmen etc. wird es wohl nicht funktionieren).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

AW: Sendmessage an Eingabefeld

  Alt 12. Dez 2022, 10:36
Genau, dein Code macht das, was du da tust.
Fenster suchen und bei ihm den Text (Titel) ändern.


Mit FindWindowEx in dem Fenster weitersuchen, nach Edit und Button.

Falls es ein "Dialog" ist, dann kann man auch mit dem Fensterhandle (Dialoghandle) und der Komponenten-ID via SetDlgItemText (statt SetWindowText).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Thomas2017

Registriert seit: 7. Mär 2017
7 Beiträge
 
#4

AW: Sendmessage an Eingabefeld

  Alt 12. Dez 2022, 13:16
Ich habe mir Winspy besorgt und darin das Edit-Fenster ausgewählt sowie mittels des integrierten Code-Generatos den Quelltext erzeugt.
Wenn ich diesen ausführe, blinkt das Edit kurz auf, es wird jedoch nichts an das Edit gesandt. Es wird jedoch das Eingabefenster aktiviert,
wenn ich
SetForeGroundWindow(wndMain); setze .
Hier der von Winspy generierte Programmcode:

Delphi-Quellcode:
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('#32770','Eingabe');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'Edit', nil);
    if wndChild <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
      FlashControl(wndChild); // internal function
    end;
  end;
  SetForeGroundWindow(wndMain);
end.
Mir fehlt im Grunde der Befehl, um Text an das "wndChild" zu senden.
Der Befehl
SetWinText(wndChild, 'test'); macht nichts...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#5

AW: Sendmessage an Eingabefeld

  Alt 12. Dez 2022, 13:26
Was ist FindAWindow und SetWinText, bzw. wo kommt das her?

MSDN-Library durchsuchenSetWindowText oder MSDN-Library durchsuchenWM_SETTEXT (am Besten mit Delphi-Referenz durchsuchenSendTextMessage anstatt MSDN-Library durchsuchenSendMessage)

Zitat:
Integer(PCHAR('test'))
Und solltest du irgendwann mal auf 64 Bit umstellen wollen, wird dir so ein Mist wie Integer-Casts das Genick brechen.

Hier, beim SendMessage/PostMessage, nimmt man für sowas die richtigen Typen, wie
LPARAM(PChar('test')) (ja genau, jenen Typen, mit welchem dieser Parameter im SendMessage deklariert wurde)
oder notfalls z.B.
IntPtr(PChar('test'))
NativeInt(PChar('test'))
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Thomas2017

Registriert seit: 7. Mär 2017
7 Beiträge
 
#6

AW: Sendmessage an Eingabefeld

  Alt 14. Dez 2022, 09:13
Hallo,
das
Zitat:
Was ist FindAWindow und SetWinText, bzw. wo kommt das her?
war noch aus den vorherigen Versuchen. Sorry für die Vermischung.

Vielen Dank für eure fachkundige Unterstützung.
Es läuft...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz