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
Antwort Antwort
Seite 1 von 2  1 2      
TUX_der_Pinguin

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

Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 10: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
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 11:07
Code ist zwar in VB und das Forum auf Englisch, jedoch allgemein versätndlich.
guckst du hier.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 12:37
Also sorry, aber den VB Code habe ich nicht kapiert, ich hab nur soweit verstanden das da irgendwelche
Messages abgefangen werden sollen. Aber wie mir das weiter helfen soll weiß ich immer noch nicht.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 13:06
Die Kommentare der Leute sind wichtig.
Auf der einen Seite schreiben sie, dass man über das Handle des anderen Prozesses herausfinden kann, ob dieser noch läuft. Auf der anderen Seite meinen sie, man könne ein WH_SHELL Hook installieren um dann eine Nachricht zu erhalten, wenn ein Fenster zerstört wird (via HSHELL_WINDOWDESTROYED). Wäre zwar kein overhed für die Schleife, welche andauernd pollt, dafür aber der größere Aufwand über den Hook.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#5

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 13:38
Ich hätte jetzt MSDN-Library durchsuchenCreateProcess und MSDN-Library durchsuchenWaitForSingleObject vorgeschlagen.
In einem Parameter von CreateProcess erhältst du die PID des gestarteten Prozesses, mit deren Hilfe du dann WaitForSingleObject nutzen kannst um so auf das Beenden des gestarteten Prozesses zu warten.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 13:49
Damit sperrt er sich ja den Hauptthread seines eigenen Programmes. Das wäre keine Lösung.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#7

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 14:03
Zitat von quendolineDD:
Damit sperrt er sich ja den Hauptthread seines eigenen Programmes. Das wäre keine Lösung.
Das könnte man durch Verwendung von Threads umgehen.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 14:10
Macht sich bloß dumm, wenn man im Thread einen Prozess startet um ihm dann vom Hauptthread (der VCL) heraus aufrufen zu wollen.
Ich würd sagen, mach ein Shell Hook und fertig.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 14:12
Mit Shell Hook meinst du die Message abfangen das die Anwendung beendet wurde?

Hast du evtl. nen Ansatz für mich da ich zur Zeit da noch völlig auf dem Schlauch stehe.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Fremd Anwendung im Panel kontrollieren

  Alt 7. Mai 2009, 14:26
Schau mal nach Asserbard's Hook Tutorial.
Auf www.michael-puff.de findest du sein Tutorial
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  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 22:03 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