AGB  ·  Datenschutz  ·  Impressum  







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

FindMemo, FindEdit

Ein Thema von derseitzer · begonnen am 7. Feb 2017 · letzter Beitrag vom 8. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2      
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#1

FindMemo, FindEdit

  Alt 7. Feb 2017, 17:54
Hallo Leute ,
ich habe (aus Testzwecken) zwei von sich unabhängige Delphiprogramme.
Ziel: auf Programm eins per Buttonklick einen Text in ein Editfeld oder Memo des zweiten Programms schreiben.
bin bereits bei dem Editfeld gescheitert und habe diese Codes probiert:
Randinformationen: -Ich weiß, dass der Fehler hierbei im Code steckt den ich hier schreibe. -Mein TEdit im Programm 2 heißt 'TextFeld'. -Appl2 ist auch korrekt, kann nicht daran liegen.
var
hbtn: Thandle;
[...]
in Prozedur:
hbtn:= FindWindowex(Appl2,0,nil,'Textfeld');
hbtn:= FindWindowex(Appl2,0,'Textfeld',nil);

Kurze und knappe Frage: wie findet er mein Textfeld ? und wäre es ähnlich bei einem Memo?
Danke im voraus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:06
Appl2.. Ist definitiv nicht das Handle des Edit, Memo.
Schau dir doch mal die Definition von FindWindowEx an.

gruss

Geändert von EWeiss ( 7. Feb 2017 um 18:11 Uhr)
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:12
appl2 ist der Parameter für mein zweites programm (application2) oder oft auch hwnd..
(Appl2 := FindWindow(nil, 'FormvonProgramm2');
aber wie gesagt.. daran liegt der Fehler nicht..
meine appl2 findet er aber mein 'Textfeld' nicht..
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:21
appl2 ist der Parameter für mein zweites programm (application2) oder oft auch hwnd..
(Appl2 := FindWindow(nil, 'FormvonProgramm2');
aber wie gesagt.. daran liegt der Fehler nicht..
meine appl2 findet er aber mein 'Textfeld' nicht..
Klar liegt der Fehler daran. Wo sonst?

1. Fenster (Child) enumerieren alle ChildWindows die sich auf der anderen Anwendung befinden.
2. Nachdem das korrekte Handle des Edit Feld gefunden wurde anhand seines Classen Namen "TEdit" zu 3
3.Beispiel: Text senden.

SendMessage(MeinEditHandle, WM_SETTEXT, 0, textstring);

Es nutzt dir gar nichts wenn du das Handle der Anwendung verwendest um eine Message an ein ChildWindow dieser Anwendung (In dem Fall TEdit) zu senden
ohne das Handle des besagten zu kennen.

gruss

Geändert von EWeiss ( 7. Feb 2017 um 18:26 Uhr)
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:31
Vielleicht hätte ich mehr Code zeigen sollen tut mir Leid..
Code:
Appl2 := FindWindow(nil, 'FormvonProgramm2');
if Appl2 <> 0 then                               //klappt:)
begin
  hbtn:= FindWindowex(Appl2,0,nil,'Textfeld');
    if hbtn<>0 then                              //klappt nicht:(... edit nicht gefunden.
    begin
    SendMessage(hbtn, WM_SETTEXT, 0, Textstring);
    end
  else showmessage('Edit nicht gefunden');
end
else showmessage ('appl2 nicht gefunden');
Mein Programm kommt garnicht zum Senden des Textes, da er das Edit nicht findet..
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:35
Verwende bitte die Delphi Formatierung für Delphi Code.. Danke.

Der Code kommt nur BIS zu deiner Anwendung.
Wie ich schon sagte du musst die ChildWindows enumerieren bis du das handle des TEdit erfahren hast.

Dann habe ich dich gebeten dir einmal die Funktion von FindWindowEx anzusehen. (Hast gemacht?)
Wenn ja dann würdest du verstehen warum FindWindowEx nicht funktioniert mit einem Handle 0 für das ChildWindow
Was also willst du finden mit einem 0 Handle ? Ohne das du in dem Fremden Fenster die ChildWindows enumerierst.

Zitat:
Retrieves a handle to a window whose class name and window name match the specified strings. The function searches child windows, beginning with the one following the specified child window. This function does not perform a case-sensitive search.
Wenn du das Handle nicht kennst in dem fall wenn du 0 übergibst must du das Window (Der Anwendung) enumerieren bis du das korrekte Handle in Erfahrung gebracht hast.
Wenn du 0 eingibst beginnt die suche nach dem Handle in der ZOrder so wie die Controls auf deinem Window abgelegt sind.


gruss

Geändert von EWeiss ( 7. Feb 2017 um 18:44 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:36
Mein TEdit im Programm 2 heißt 'TextFeld'

Code:
  hbtn:= FindWindowex(Appl2,0,nil,'Textfeld');

Fällt dir was auf?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:48
Beispiel. (copy\paste)

Delphi-Quellcode:
function EnumChildProc(AHandle: THandle; AItems: TStrings): BOOL; stdcall;
var
  buffer: array[0..255] of Char;
  caption: array[0..255] of Char;
begin
  Result := True;
  GetClassName(AHandle, buffer, SizeOf(buffer)-1);
  SendMessage(AHandle, WM_GETTEXT, 256, Integer(@caption));

  AItems.Add(Format('Handle: %d, Class: %s, Text: %s', [AHandle, buffer, caption]));
end;

//...

procedure TForm1.Button1Click(Sender: TObject);
var
  wHnd: THandle;
  wCls: PChar;
begin
  wCls := PChar('YourTopWindowClassName'); // ex. TForm1
  wHnd := FindWindow(wCls, nil);
  ListBox1.Clear;
  // Get window controls into the listbox
  EnumChildWindows(wHnd, @EnumChildProc, Integer(ListBox1.Items));
end;
gruss
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:51
Günter tut mir Leid beide heißen 'Textfeld'.. nicht 'TextFeld'.. mein Fehler
EWeiss hmm okay ich versuche es damit.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: FindMemo, FindEdit

  Alt 7. Feb 2017, 18:55
Günter tut mir Leid beide heißen 'Textfeld'.. nicht 'TextFeld'.. mein Fehler
Spielt keine Rolle solange der Namen stimmt, ob 'Textfeld' oder 'TextFeld' case sensitive sollte dabei nicht berücksichtigt werden.
Günther meint etwas anderes.. vergleiche doch einfach mal die Parameter die du mit FindWindowEx übergibst.

Zitat:
EWeiss hmm okay ich versuche es damit
Na ja es zwingt dich niemand dazu.

gruss

Geändert von EWeiss ( 7. Feb 2017 um 21:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:53 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