AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Handle: Button von app2 aus app1 klicken
Thema durchsuchen
Ansicht
Themen-Optionen

Handle: Button von app2 aus app1 klicken

Ein Thema von Praktikant · begonnen am 11. Nov 2003 · letzter Beitrag vom 13. Nov 2003
Antwort Antwort
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#1

Handle: Button von app2 aus app1 klicken

  Alt 11. Nov 2003, 13:27
ich habe 2 Programme geschrieben, dabei wird app2 von app1 aus aufgerufen und wieder beendet.
Aber wie kann ich jetzt einen buttonklick (ist in app2) von app1 aus ausführen?
Bekommt der button einen eigenen handle?! Woher bekomme ich den.
Das Prog ist auf der Grundlage von Jens Schumanns Bsp.-Prog aufgebaut (s. http://www.delphipraxis.net/internal...ct.php?t=12085)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Handle: Button von app2 aus app1 klicken

  Alt 11. Nov 2003, 19:26
Moin Praktikant,

ein normaler TButton hat ein Handle, dass Du, wie bei jedem anderen Fenster auch mit Hilfe, z.B. von FindWindow, bekommen kannst. Dann noch ein SendMessage mit BM_CLICK an diesen Button geschickt, und das war's.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Handle: Button von app2 aus app1 klicken

  Alt 12. Nov 2003, 10:15
thx! Das ist meist mein großes Problem, die ganzen Befehle zu finden.
Gibt's da eine Bibliothek wo alle Handle Befhele drin stehen, da ja jedes Objekt mit einem anderen Befehl angesprochen wird.

Aber mein momentnes Problem ist noch, dass ich keine Handle Adresse zurück bekomme (immer 0), hab schon alles mögliche ausprobiert aber ändert sich nix.

Sieht inzwischen folgendermassen aus:
Delphi-Quellcode:
  for i:=1 to 100000 do //keine while mehr da sonst Endlosschleife
        hWindow := FindWindow(nil,'Kommunikation beenden'); //Caption des TButtons, Name geht aber auch nicht
  Sleep(1000);
  Label4.Caption:=IntToStr(hWindow); //ausgeben der Handle Adresse
Wo ist mein grundlegender Fehler, habe den button auch schon an der vorderen stelle gehabt und auch mein formularname anstelle von nil eingetragen, aber nie findet er den button. Programm läuft natürlich schon!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Handle: Button von app2 aus app1 klicken

  Alt 12. Nov 2003, 14:56
Mit FindWindow das Hauptfenster finden, mit FindWindoEx den Button und dann ein BM_CLICKED schicken. Parameter der Befehle können hier: www.msdn.microsoft.com nachgeschlagen weden.

Sollte der Button nicht direkt auf dem Hauptfenster liegen hilft wohl nur noch eins, mit EnumChildWindows alle Kindfenster enumerieren, bis der Button gefundne wurde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Handle: Button von app2 aus app1 klicken

  Alt 12. Nov 2003, 16:53
ok, danke für den Hinweis mit FindWindowEx!
Bekomme jetzt auch ein Handle zurück, aber irgendwie nicht das Richtige.

Habe wieder herum probiert:
Bekomme mal ein Handle selbst wenn das Prog nicht läuft, bzw. mal geht er in die while-endlosschleife.
Wenn ich das Prog offen habe dann wechselt er bei jedem button klick die handle adresse, das ist doch auch nicht normal?!

Naja, wenn ich dann mit sendmessage mein bmclick schicke passiert zumindest nie etwas.

Mein Progaufbau sieht nun folgendermassen aus, wo habe ich da noch ein Fehler?
Delphi-Quellcode:
 
private
  ButtonKommBeendenHwnd : THandle;
[...]
var
  hWindow : DWORD;
  hButton : DWORD;
begin
  hWindow := 0;
  while hWindow = 0 do
    hWindow := FindWindow(nil,'FormKommunikation');
  // Die Child Windows durchgehen
  hButton := 0;
  while hButton = 0 do
  hButton := FindWindowEx (hWindow,ButtonKommBeendenHwnd,0,0); //ButtonKommBeenden ist Name des Button der geklickt werden soll
  // Wenn hButton <> 0 ist, wurde der Button gefunden
  Label4.Caption:=IntToStr(hButton);

  if hButton = 0 then exit;
  // und kann angeklickt werden
  SendMessage(hButton,BM_CLICK,0,0);
So wie der code jetzt steht scheint die handle adressierung zu funzen, nur mein prog reagiert nicht auf die sendmessage
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Handle: Button von app2 aus app1 klicken

  Alt 12. Nov 2003, 21:19
Moin Praktikant,

es könnte sein, dass der Button nicht direkt auf dem Formular, liegt, sondern auf einem anderen Element, das wiederum auf dem Formular liegt.
Such' hier mal nach Hier im Forum suchenEnumWindows, Hier im Forum suchenEnumChildWindows.
Da müsstest Du auf Beispiele stossen, wie man sich alle Fenster und Unterfenster heraussuchen lassen kann, sowie deren Caption, und Klassenname.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Handle: Button von app2 aus app1 klicken

  Alt 12. Nov 2003, 21:37
Sonst kannst du ja auch mal hier schauen.
Thomas
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Handle: Button von app2 aus app1 klicken

  Alt 13. Nov 2003, 08:23
der Button liegt direkt auf dem Hauptformular, da ist kein Button oder sonstiges dazwischen. Ist ja mein Programm, von daher weiß ich das sicher

Schau mir jetzt mal den link an und hoffe ich komme weiter.

Edit2:
Geschafft
Nach weiteren 3Std. probieren hat es jetzt endlich geklappt.
Weiß zwar nicht 100% weshalb es vorher nicht funktioniert hat aber hauptsache es geht endlich.
Ein Problem war dass ich beim send/postmessage nicht den expliziten buttonnamen angegeben habe -> sendmessage(HandleForm,HandleButton,0,'Name des Buttons')

Dann noch ein paar if Abfragen, da u.a. die while Schleife nicht mehr durchlaufen werden darf wenn ich den Hanlde bekommen habe, dann findet er nämlich den Button nicht mehr
  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 12:17 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