AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Fremdes Programm beenden - Handle anhand Filename ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Fremdes Programm beenden - Handle anhand Filename ermitteln

Ein Thema von Ines · begonnen am 14. Okt 2010 · letzter Beitrag vom 6. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
Ines

Registriert seit: 22. Aug 2006
Ort: Augsburg
96 Beiträge
 
Delphi 2009 Enterprise
 
#1

Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 14:07
Hallo DP'ler,

ich suche seit 2 Tagen hier im Forum nach der richtigen Lösung - und seh' wahrscheinlich den Wald vor lauter Bäumen nicht mehr!

Mit ShellExecuteEx kann der Nutzer sich Bilder, PDF- und HTML-Files eines Patienten anzeigen lassen. Funktioniert einwandfrei.

Wird nun der nächste Patient aufgerufen, dann möchte ich, daß alle Fenster, die mit ShellExecuteEx erstellt wurden, auch wieder geschlossen werden.

Mit ENumWindow (ich glaube der Code ist von Lucky) kann ich mir alle Fensterbezeichnungen in einer ListBox anzeigen lassen.

Mein Problem: Wie komme ich über diese Bezeichnung zur Prozess-ID (z.B. Adobe), damit ich dieses Programm beenden kann?

Vielen Dank für Eure Hilfe
Ines
Ines
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 14:15
Hast Du diesen Thread schon gelesen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 14:23
Wenn du doch diese startest, dann Merk dir diese in einer Liste und beende diese dann (siehe Link von DeddyH)

Denn nicht jedes Programm (z.B. Adobe Reader) wurde von dir gestartet, es sei denn das ist beabsichtigt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 14:30
Die Liste liefert auch das Handle. damit kann man WM_LOSE an das Fenster senden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 14:31
Das mit WM_CLOSE () wurde auch im verlinkten Thread genannt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 14:33
Das mit WM_CLOSE () wurde auch im verlinkten Thread genannt.
Darum ja der explizite Hinweis auf WM_LOSE
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 14:35
Zitat von Pappa ante portas:
Mein Name ist Lose - ich kaufe hier ein.
Aber nun genug OT
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ines

Registriert seit: 22. Aug 2006
Ort: Augsburg
96 Beiträge
 
Delphi 2009 Enterprise
 
#8

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 15:41
Hallo und Danke für Eure Hilfe!

Den Thread habe ich gelesen - habe aber Probleme, das richtige Handle zu ermitteln. Der Rückgabewert von ShellExecuteEx scheint nicht das Fensterhandle zu sein (oder ich bin zu dumm!).

Mein Problem habe ich jetzt folgendermaßen gelöst:
Ich habe in GetWindows eine Abfrage eingebaut, die nach dem nicht zu löschenden Dateinamen sucht. Wenn vorhanden, dann habe ich ja das Handle und kann das Fenster mit Sendmessage (hwnd, WM_Close, SC_Close) beenden.

Das dürfte dem Nutzer die größtmöglichste Freiheit geben - mal' schauen.

Viele liebe Grüße
Ines
Ines
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 15:45
Wie im verlinkten Thread bereits gesagt würde ich die Fenster durchgehen und die Prozesshandles vergleichen: http://www.delphipraxis.net/999827-post2.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: Fremdes Programm beenden - Handle anhand Filename ermitteln

  Alt 14. Okt 2010, 16:41
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

begin
  ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.lpVerb := nil;
  ShExecInfo.lpFile := PChar('NotePad.exe');
  ShExecInfo.lpDirectory := nil;
  ShExecInfo.nShow := SW_Show;
  if not ShellExecuteEx(@ShExecInfo) then Showmessage(IntToStr(GetLastError));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TerminateProcess(ShExecInfo.hProcess,0);
  CloseHandle(ShExecInfo.hProcess);

  ODER: su.
  SendMessage(FindMainWindow(7964),WM_Close,0,0);

end;

Delphi-Quellcode:
type
  PEnumInfo = ^TEnumInfo;
  TEnumInfo = record ProcessID: DWORD; HWND: THandle; end;

function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall;
    var
      PID: DWORD;
    begin
      GetWindowThreadProcessID(Wnd, @PID);
      Result := (PID <> EI.ProcessID) or (not IsWindowVisible(WND)) or (not IsWindowEnabled(WND));
      if not Result then EI.HWND := WND;
    end;

  function FindMainWindow(PID: DWORD): DWORD;
    var
      EI: TEnumInfo;
    begin
      EI.ProcessID := PID;
      EI.HWND := 0;
      EnumWindows(@EnumWindowsProc, Integer(@EI));
      Result := EI.HWND;
    end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  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 05:52 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