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/)
-   -   Delphi Eingabefeld einer fremden Anwendung ausfüllen (https://www.delphipraxis.net/12528-eingabefeld-einer-fremden-anwendung-ausfuellen.html)

Bunke 29. Nov 2003 11:26


Eingabefeld einer fremden Anwendung ausfüllen
 
Folgendes Problem:

Anwendung 1 start eine zweite Anwendung (PGPDISK wenn es jemand genau wissen will) diese soll eine Verzweichnis auf der Festplatte entschlüsseln, benötigt dazu aber die Eingabe einer Passwortphrase. Dieses muss/will ich nun automatisieren, ein Handle auf das Fenster der zweiten Anwendung habe ich auch schon. Den OK und den Cancel Button kann ich auch schon fernsteuern, jedoch bekomme ich die Eingabe in das Feld für die Passwortphrase nicht hin.

Hoffe mir kann da jemand helfen.

Luckie 29. Nov 2003 13:08

Re: Eingabefeld einer fremden Anwendung ausfüllen
 
WM_SETTEXT heißt das Zauberweort bzw. die Zaubernachricht.

Delphi-Quellcode:
var
  s: String;
begin
  s := 'Hello world.';
  SendMessage(hEdt, WM_SETTEXT, 0, Integer(@s[1]));

Spock 2. Dez 2003 21:18

Re: Eingabefeld einer fremden Anwendung ausfüllen
 
Wie bekommst du den das Handle deiner Fremdanwendung ?

Ich schreibe an soetwas ähnlichem, aber habe das über den Tastaturpuffer direkt realisiert. Nur für das Handle habe ich noch keine vernünftige Lösung..... :gruebel:

Luckie 2. Dez 2003 21:28

Re: Eingabefeld einer fremden Anwendung ausfüllen
 
Mach dich mal über folgende API's schlau: Hier im Forum suchenFindwindow, Hier im Forum suchenFindWindowEx, Hier im Forum suchenEnumWindows, Hier im Forum suchenEnumChildwindows.

Pseudemys Nelsoni 3. Feb 2004 15:03

Re: Eingabefeld einer fremden Anwendung ausfüllen
 
Zitat:

Zitat von Luckie
WM_SETTEXT heißt das Zauberweort bzw. die Zaubernachricht.

Delphi-Quellcode:
var
  s: String;
begin
  s := 'Hello world.';
  SendMessage(hEdt, WM_SETTEXT, 0, Integer(@s[1]));


hallo luckie,

wieso "Integer(@s[1]);"
statt "Integer(s);"


ist @ ein zeiger? und wenn ja, wieso setzt man nicht einfach nur "s" statt "@s" ein?
achja und nochwas, wieso eigentlich "integer"? woher weiss die funktion welchen text sie übergeben muss wenn es ein integer ist?

Christian Seehase 3. Feb 2004 15:15

Re: Eingabefeld einer fremden Anwendung ausfüllen
 
Moin Pseudemys Nelsoni,

mit integer(s) würdest Du den Wert der Adresse der Variablen übergeben die die Adresse des Strings enthält, mit integer(@s[1]) ist es die Adresse des ersten Zeichens des Strings. Dieser wird intern automatisch nullterminiert, so dass eine API Funktion etwas damit anfangen kann.
Ersatzweise ginge auch integer(PChar(s)).

Der Typecast mit integer ist notwendig, da Borland die Funktion so importiert, dass man dort nicht direkt die Adresse eines Strings angeben kann.

[EDIT]
Durch die Nachricht WM_SETTEXT sollte die WindowsProc die die Message auswertet "wissen", dass der Wert von LParam die Adresse eines nullterminierten Strings bedeutet.
[/EDIT]

Pseudemys Nelsoni 3. Feb 2004 16:38

Re: Eingabefeld einer fremden Anwendung ausfüllen
 
danke, für die erklärung, christian :thuimb:

Das bringt mich auf ne neue Frage (neuen Thread :cheers: )


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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