AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Fremde Anwendung schließen und auf Ende warten
Thema durchsuchen
Ansicht
Themen-Optionen

Fremde Anwendung schließen und auf Ende warten

Ein Thema von alias5000 · begonnen am 8. Mai 2006 · letzter Beitrag vom 8. Mai 2006
Antwort Antwort
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#1

Fremde Anwendung schließen und auf Ende warten

  Alt 8. Mai 2006, 11:59
Hallo!

Also folgendes Problem: Ich schreibe gerade einen Internetupdater für ein Projekt mit mehreren Anwendungen. Um die EXE Dateien der Programme überschreiben zu können, muss ich die EXE ja schließen. Es ist aber in allen Fällen sehr wahrscheinlich, dass diese EXE aber noch geöffnet ist. Ich würde also gerne folgendes machen:
Die Anwendung, von der ich den Namen der EXE weiß, würde ich gerne auffordern, dass sie ganz normal geschlossen wird (nicht über TerminateProcess, damit sie Einstellungen und so noch speichern kann). Dies sollte meines Wissens nach mit der Message WM_CLOSE gehen, richtig?
Ich weiß allerdings noch nicht sehr viel über die Anwendung von Messages. Wie versende ich diese Nachricht, vor allem woher bekomme ich das Handle der Anwendung?

Und als zweites würde ich gerne auch noch darauf warten, bis diese Anwendung auch wirklich geschlossen wurde. Erst dann würde ich mit dem Überschreiben beginnen. Sollte die Anwendung abgestürtzt sein, würde ich es zeitverzögert über TerminateProcess versuchen, dazu habe ich in der Suche bereits einen kleinen Codeschnipsel gefunden.

Ich danke euch herzlich!

Gruß alias5000
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#2

Re: Fremde Anwendung schließen und auf Ende warten

  Alt 8. Mai 2006, 12:07
es gibt da auch noch ShellExecuteAndWait...
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Fremde Anwendung schließen und auf Ende warten

  Alt 8. Mai 2006, 12:19
Hi!

Shellexecuteandwait hilft hier glaube ich nicht weiter.
Damit kann man ein Programm starten und warten bis dieses wieder beendet wurde, bevor es mit dem eigenen Programm weitergeht.


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#4

Re: Fremde Anwendung schließen und auf Ende warten

  Alt 8. Mai 2006, 16:48
Ja das Problem ist eigentlich, dass die Uranwendung den Updater ausführen wird und der das Urprogramm dann evlt. schließen soll.
Oder mal ne andere konkrete Frage: Wie komme ich an das HNWN von meinem Programm, wenn ich den EXE Namen hab?
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Fremde Anwendung schließen und auf Ende warten

  Alt 8. Mai 2006, 17:57
sollte das nicht mit GetModuleHandle der win API gehen?
Link -> http://www.swissdelphicenter.ch/torr...ode.php?id=910
und
-> http://www.delphi-fundgrube.de/faq08.htm#topic0802

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Fremde Anwendung schließen und auf Ende warten

  Alt 8. Mai 2006, 21:23
ich hab ma sowas am beispiel von notepad gemacht.
vll hilft dir das ja weiter.

versucht erst das fenster per WM_CLOSE zu schliessen und
wenn das nach nem gewissen timeout nich geklappt hat per
TerminateProcess.

Delphi-Quellcode:
var
  hWnd, hProcess: THandle;
  DWResult, PID: Cardinal;
begin
  hWnd := FindWindow('Notepad', nil);
  if hWnd <> 0 then
  begin
    SendMessageTimeout(hWnd, WM_CLOSE, 0, 0,
      SMTO_ABORTIFHUNG or SMTO_NORMAL, 6000, DWResult);

    if IsWindow(hWnd) then
    begin
      GetWindowThreadProcessId(hWnd, PID);

      hProcess := OpenProcess(PROCESS_TERMINATE, False, PID);
      if hProcess <> 0 then
      begin
        TerminateProcess(hProcess, 0);
        CloseHandle(hProcess);
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#7

Re: Fremde Anwendung schließen und auf Ende warten

  Alt 8. Mai 2006, 22:09
Danke, euch allen. Ich hab inzwischen etwa sowas, wie von nat bereits hinbekommen. Allerdings hatte ich mich noch nicht mit dem aufs Ende warten so sehr auseinandergesetzt, weil ich da noch was anderes mit einbauen wollte. Im Endeffekt wird es aber auf diesen Code in etwa hinauslaufen.

Vielen Dank!

Gruß
euer alias5000
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  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 00:07 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