AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Fremd Anwendung im Panel kontrollieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fremd Anwendung im Panel kontrollieren

Ein Thema von TUX_der_Pinguin · begonnen am 7. Mai 2009 · letzter Beitrag vom 7. Mai 2009
 
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 11:55
Ich habe ein problem ich möchte gern eine Anwendung starten und diese in einem Panel anzeigen, was auch schon klappt.
Jedoch frage ich mich wie kann mein Programm merken ob die gestartete Anwendung beendet wurde um anschließend das
Panel wieder zu entfernen.

Das Ziel ist ein kompl. abgeschlossenes System (Kioskmodus), sprich meine Anwendung liegt im Vordergrund und nichts
ist machbar um an das dahinter liegende Windows zu kommen. Ich habe meine Anwendung dazu als Shell eingebunden, wie ich
die einzelnen funktionen wie Taskmanager, Hotkeys etc. unterbinde darum kümmere ich mich später.

In meiner Anwendung sollen bestimmte Programme aufgerufen werden können, unter anderem auch Dos Anwendungen.
Dazu erstelle ich ein Panel welches ich über das Fenster lege im Vollbildmodus so ist nur noch das Panel zu
sehen dann wird die externe Anwendung gestartet und per SetParent an das Panel gebunden, so jetzt der haken,
wird die externe Anwendung beendet soll mein Programm das mit bekommen und daraufhin das Panel entfernen, nur wie?

Also eine möglichkeit wäre das eine schleife läuft und prüft ob das Programm noch aktiv ist nur sobald ich das
Programm mit SetParent ins Panel "einsperre" funktioniert FindWindow nicht mehr.

Im folgenden Auszug steht wie ich bisher eine externe Anwendung aufrufe und auf einem zuvor erstellten Panel
einbinde, jedoch fehlt der teil wie ich nach beenden der Anwendung wieder das Panel entferne.

Delphi-Quellcode:
procedure TfrmMain.Button2Click(Sender: TObject);
var
  aWnd : HWND;
  WPM : TWindowPlacement;
  i : Integer;
  AppPanel : TPanel;
  
begin
  //Panel erstellen
  AppPanel := TPanel.Create(Self);
  AppPanel.Parent := frmMain;
  AppPanel.BoundsRect := frmMain.BoundsRect;
  AppPanel.Caption := 'Anwendung wird gestartet...';

  //ext. Anwendung aufrufen...
  ShellExecute(Application.Handle, 'open', 'D:\TA\TA.exe', nil, 'D:\TA\', SW_MAXIMIZE);

  //Solange warten bis Programm gestartet wurde
  aWnd := FindWindow(nil, 'TA.EXE');
  while aWnd = 0 do aWnd := FindWindow(nil, 'TA.EXE');


  if aWnd <> 0 then begin
    //Programm in Panel einbetten ...
    Windows.SetParent(aWnd, AppPanel.Handle);

    //Fenster maximiert darstellen, bringt bei einer Dos Anwendung nichts.
    WPM.length := SizeOf(WPM);
    GetWindowPlacement(aWnd, @WPM);
    WPM.showCmd := SW_SHOWMAXIMIZED;
    WPM.rcNormalPosition := Classes.Rect(0,0, AppPanel.Width, AppPanel.Height);
    SetWindowPlacement(aWnd, @WPM);
  end
  else begin
    AppPanel.Caption := 'Anwendung konnte nicht gestartet werden...';
    AppPanel.Free;
  end;

end;
  Mit Zitat antworten Zitat
 


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 01:53 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 by Thomas Breitkreuz