AGB  ·  Datenschutz  ·  Impressum  







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

FindWindow

Ein Thema von derseitzer · begonnen am 3. Feb 2017 · letzter Beitrag vom 8. Feb 2017
Antwort Antwort
derseitzer

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

FindWindow

  Alt 3. Feb 2017, 10:11
Hallo Leute,
Ich habe mir 2 Delphi Programme gemacht und möchte nun vom Prog1 das Prog2 steuern.
im Prog1 steht unter anderem dieser Buttonclick:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  hWnd: THandle;
  hBtn: THandle;
begin
  hWnd := FindWindow(nil, 'Gesteuert');
  if hWnd <> 0 then
  begin
    hBtn := FindWindowEx(hWnd, 0, nil, 'Button');
    if hBtn <> 0 then
    begin
      SendMessage(hBtn, BM_CLICK, 0, 0);
    end
    else
      ShowMessage(SysErrorMessage(GetLastError));
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
end;
im Prog2 habe ich aus Testzwecken nur einen Button. Name UND caption des Buttons(eig ja Panel aber egal) ist 'Button' und der Formname von Prog2 UND caption ist "Gesteuert".
Ich bekomme KEINE showmessage, was mich sehr verwirrt.. wenn ich andere Sachen eingeben bekomme ich die showmessage. Das, was passieren soll, wenn ich auf den "Button" klicke, passiert nicht..
Wo liegt denn mein Fehler?

P.s. Code ist von "Luckie" hier aus der Delphi-Praxis )

Geändert von derseitzer ( 3. Feb 2017 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: FindWindow

  Alt 3. Feb 2017, 10:25
Der Doku zu BM_CLICK nach wäre es eine Idee mal zu schauen ob es daran liegt dass dein "Prog2" wohl nicht aktiv ist. Wie soll in einem nicht-aktiven Fenster auch ein Button gedrückt werden können?

Nur so als Idee...
  Mit Zitat antworten Zitat
derseitzer

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

AW: FindWindow

  Alt 3. Feb 2017, 10:38
Hört sich nach einem guten Grund an.. habe mal einen Timer vorgeschaltet, dann die andere Form angeklickt und gewartet.. passiert allerdings auch nichts .
Dann muss ich das wohl mit tasten simulationen machen? nicht sehr elegant

Also wie es scheint hat es schon jemand hinbekommen mit dem oben genannten befehl sendmessage(....)
http://www.delphipraxis.net/158316-b...anwendung.html

Geändert von derseitzer ( 3. Feb 2017 um 10:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: FindWindow

  Alt 3. Feb 2017, 11:18
Das sind deine Programme, also können/sollen sie sich "intern" unterhalten und garnicht erst versuchen ihre GUI zu misshandeln.

Stichwort: Inter-Process Communication (IPC) -> Pipes/NamedPips, MailSlots, MemoryMappedFiles (MMF), TCP/IP, richtige Messages (MSDN-Library durchsuchenRegisterWindowMessage) uvm.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ZYLAGON

Registriert seit: 11. Nov 2015
49 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: FindWindow

  Alt 3. Feb 2017, 20:04
Hallo derseitzer,

ersetze einfach mal
SendMessage(hBtn, BM_CLICK, 0, 0); durch
Delphi-Quellcode:
SendMessage(hBtn, WM_LBUTTONDOWN, 0, 0);
SendMessage(hBtn, WM_LBUTTONUP, 0, 0);
ZYL
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: FindWindow

  Alt 4. Feb 2017, 01:21
Ach ja, Delphi-Fenster sind "Windows" (CreateWindow) und keine "Dialoge" (CreateDialog/CreateDialogIndirect).

BM_CLICK ist aber eine DialogMessage.

Und selbst wenn es ein Dialog wäre, sagt die Hilfe auch noch
Zitat:
Remarks
If the button is in a dialog box and the dialog box is not active, the BM_CLICK message might fail. To ensure success in this situation, call the SetActiveWindow function to activate the dialog box before sending the BM_CLICK message to the button.
Bei Windows verarbeitet das Control (hier der Button) selber seine Klick-Events und bei Dialogs steckt die Event-Behandlung im Dialog (das Hauptfenster)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Feb 2017 um 01:37 Uhr)
  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 05:02 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