AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Application Handle einer fremden Application bekommen?
Thema durchsuchen
Ansicht
Themen-Optionen

Application Handle einer fremden Application bekommen?

Ein Thema von Angel4585 · begonnen am 4. Okt 2005 · letzter Beitrag vom 5. Okt 2005
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Re: Application Handle einer fremden Application bekommen?

  Alt 5. Okt 2005, 07:27
OK:

Senderprogramm:
Delphi-Quellcode:
unit USteuer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Spin, UBotschaften,TlHelp32;

type
  Ttf_steuer = class(TForm)
    Btn_starten: TButton;
    Btn_Maximieren: TButton;
    Btn_Minimieren: TButton;
    Btn_Button_druecken: TButton;
    Btn_schliessen: TButton;
    Btn_wiederherstellen: TButton;
    rg_nachricht_steuer: TRadioGroup;
    LHandle: TLabel;
    LBHandle: TLabel;
    LRGHandle: TLabel;
    procedure rg_nachricht_steuerClick(Sender: TObject);
    procedure Btn_wiederherstellenClick(Sender: TObject);
    procedure Btn_Button_drueckenClick(Sender: TObject);
    procedure Btn_MinimierenClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Btn_schliessenClick(Sender: TObject);
    procedure Btn_MaximierenClick(Sender: TObject);
    procedure Btn_startenClick(Sender: TObject);
  private
    ParentHandle : HWND;
    ButtonHandle : HWND;
    RGHandle : HWND;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  tf_steuer: Ttf_steuer;

implementation

{$R *.dfm}



procedure Ttf_steuer.Btn_startenClick(Sender: TObject);
var
  StartupInfo: TStartupinfo;
  ProcessInfo: TProcessInformation;
begin
//FUNKTIONIERT!!
FillChar(Startupinfo,Sizeof(TStartupinfo),0);
Startupinfo.cb:=Sizeof(TStartupInfo);
if not CreateProcess(nil,'Empfang.exe',nil,nil,false,normal_priority_class,nil,nil, Startupinfo,ProcessInfo)then
 ShowMessage('Anwendung konnte nicht gestartet werden');
end;

procedure Ttf_steuer.Btn_MaximierenClick(Sender: TObject);
begin
//FUNKTIONIERT!!
ParentHandle:=FindWindow(nil,'Empfang');
LHandle.Caption:=IntToStr(ParentHandle);
//Maximieren der Zweiten AW
SendMessage(ParentHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
end;

procedure Ttf_steuer.Btn_schliessenClick(Sender: TObject);
begin
//FUNKTIONIERT!!
ParentHandle:=FindWindow(nil,'Empfang');
LHandle.Caption:=IntToStr(ParentHandle);
SendMessage(ParentHandle,WM_SYSCOMMAND,SC_CLOSE,0);
end;

procedure Ttf_steuer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Btn_schliessen.Click;
end;

procedure Ttf_steuer.Btn_MinimierenClick(Sender: TObject);
begin
//FUNKTIONIERT!!
ParentHandle:=FindWindow(nil,'Empfang');
LHandle.Caption:=IntToStr(ParentHandle);
//Minimieren der zweiten AW
SendMessage(ParentHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;

procedure Ttf_steuer.Btn_Button_drueckenClick(Sender: TObject);
begin
//FUNKTIONIERT!!
ParentHandle:=FindWindow(nil,'Empfang');
ButtonHandle:=FindWindowEx(ParentHandle, 0,'TButton',nil);
LBHandle.Caption:=IntToStr(ButtonHandle);
//Button der zweiten AW betätigen
SendMessage(ButtonHandle, BM_CLICK, 0, 0);
end;

procedure Ttf_steuer.Btn_wiederherstellenClick(Sender: TObject);
begin
ParentHandle:=FindWindow(nil,'Empfang');
LHandle.Caption:=IntToStr(ParentHandle);
//Wiederherstellen der zweiten AW
ShowWindow(ParentHandle,1);
end;

procedure Ttf_steuer.rg_nachricht_steuerClick(Sender: TObject);
begin
ParentHandle:=FindWindow(nil,'Empfang');
PostMessage(HWND_BROADCAST,WM_SELECTRADIOBUTTON,rg_nachricht_steuer.ItemIndex,0);
end;

end.
In der letzten prozedur(rg_nachricht_steuerClick) wird geBROADCASTet mit der Message WM_SELECTRADIOBUTTON und dem "Übergabewert"
rg_nachricht_steuer.ItemIndex(Radiogroup)

Unit mit der Konstanten

Delphi-Quellcode:
unit UBotschaften;

interface
 uses Messages;

 const
 WM_SELECTRADIOBUTTON = (WM_USER+5);
 WM_GETAPPHANDLE = (WM_USER+6);
implementation

end.
hier ist die Message als Konstante Deklariert auf welche Sender und Empfänger zugreifen.


Empfängerprogramm

Delphi-Quellcode:
unit UEmpfang;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls ,UBotschaften;

type
  Ttf_empfang = class(TForm)
    Btn_Empfang: TButton;
    rg_nachricht: TRadioGroup;
    LHandle: TLabel;
    LBHandle: TLabel;
    LRGHandle: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Btn_EmpfangClick(Sender: TObject);
  private
    { Private-Deklarationen }
  protected
    procedure SelectRadioButton(var Msg: TMsg; var Handeled: boolean);
  // procedure XX(var msg: TMessage); message WM_SELECTRADIOBUTTON;
  public
    { Public-Deklarationen }
  end;

var
  tf_empfang: Ttf_empfang;

implementation

{$R *.dfm}
procedure Ttf_empfang.SelectRadioButton(var Msg : TMsg; var Handeled : boolean);
begin
case Msg.message of
 WM_SELECTRADIOBUTTON : begin
                        beep;
                        rg_nachricht.ItemIndex:=Msg.wParam;
                        end;
 end;
end;

procedure Ttf_empfang.Btn_EmpfangClick(Sender: TObject);
begin
case rg_Nachricht.ItemIndex of
 0:ShowMessage('Nachricht EINS ausgewählt');
 1:ShowMessage('Nachricht ZWEI ausgewählt');
 2:ShowMessage('Nachricht DREI ausgewählt');
 3:ShowMessage('Nachricht VIER ausgewählt');
 4:ShowMessage('Nachricht FÜNF ausgewählt');
 end;
end;

procedure Ttf_empfang.FormCreate(Sender: TObject);
begin
Application.OnMessage:=SelectRadioButton;
end;

{procedure Ttf_empfang.XX(var msg: TMessage);
begin
rg_nachricht.ItemIndex:=msg.WParam;
end;  }


end.
Dem Empfänger wird im FormCreate der Application.OnMessage Die prozedur SelectRadioButton zugewiesen,
in welcher auf die gesendete Message abgefragt wird und bei der Bestätigung eben eine Nachricht angezeigt werden sollte. Aber aus irgendwelchen Gründen funktioniert es nicht.

Sag mir einfach wo hier mein Denkfehler liegt:

mit der Prozedur XX im Empfänger funktioniert es.
Ohne, d.h. mit der Zuweisung an Application.OnMessage funktioniert es nicht, was es aber sollte.Warum?
Martin Weber
  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 09:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz