AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Auf das Schließen eines Explorer-Fensters warten
Thema durchsuchen
Ansicht
Themen-Optionen

Auf das Schließen eines Explorer-Fensters warten

Ein Thema von blablab · begonnen am 31. Aug 2011 · letzter Beitrag vom 2. Sep 2011
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Auf das Schließen eines Explorer-Fensters warten

  Alt 31. Aug 2011, 23:31
Hallo!

Ich möchte gerne ein neues Explorer-Fenster mit einem bestimmten Pfad öffnen und dann darauf reagieren, wenn dieses Fenster geschlossen wird. Das Starten des Explorers mit einem bestimmten Pfad habe ich jetzt auf zwei Arten erfolgreich ausprobiert: ShellExecuteEx und CreateProcess.

ShellExecuteEx liefert für hProcess immer 0 (das ist nur beim explorer der Fall, bei anderen Programmen funktioniert das).
Und bei CreateProcess bekomme ich zwar einen Wert hProcess <> 0 , aber WaitForSingleObject(hProcess, INFINITE); kehrt sofort mit dem Rückgabewert WAIT_FAILED zurück.

Ich glaube ich verstehe warum es nicht funktioniert: Wenn ich ein normales Programm öffne, so wird ein neuer Prozess gestartet, der dann auch im Taskmanager auftaucht. Beim Explorer allerdings ist immer nur eine Instanz "explorer.exe" gestartet. Es wird nur ein weiteres Explorer-Fenster geöffnet, das dem bereits existierenden Prozess "explorer.exe" hinzugefügt wird. Mein neu gestarteter Explorer-Prozess wird wahrscheinlich sofort wieder geschlossen oder erst gar nicht gestartet.

Aber selbst wenn das die richtige Erklärung ist, weiß ich leider keine Lösung...
Theoretisch könnte ich mit FindWindow() nach einem Fenster mit dem Pfadname als Titel suchen und dann auf dessen Beendung reagieren. Allerdings könnten ja mehrere Explorer-Fenster mit diesem Pfad geöffnet sein und da wäre es mir lieber ich könnte irgendwie mit hProcess oder Ähnlichem arbeiten um sicherzugehen dass ich das richtige Fenster/den richtigen Prozess beobachte.

Vielen Dank schonmal für eure Hilfe!

Grüße
blabla
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Auf das Schließen eines Explorer-Fensters warten

  Alt 1. Sep 2011, 08:33
Nur eine Idee, noch dazu eine etwas umständliche: ermittle doch zuerst alle Fenster, die zum Prozess "explorer" gehören, und merk sie Dir in einer Liste. Nun rufst Du den Explorer auf und ermittelst das Fenster, das vorher nicht in der Liste war. Falls der Explorer dafür einen neuen Thread startet (ich weiß es nicht, vermute dies aber), kannst Du diesen dann ermitteln und auf dessen Ende warten.
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
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Auf das Schließen eines Explorer-Fensters warten

  Alt 1. Sep 2011, 10:07
Ob Explorer neue Fenster in neuen Prozessen startet oder nicht, ist eine Einstellungssache. Dreckig aber machbar wäre es, HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\Advanced\SeparateProcess temporär auf 1 und danach wieder auf den alten Wert zurückzusetzen.

DeddyHs Methode klingt etwas sauberer, auch wenn ich vom Prinzip her (oder ist das nur nach Gefühl? ) auch das Prozess-Handle bevorzugen würden.
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Auf das Schließen eines Explorer-Fensters warten

  Alt 1. Sep 2011, 17:24
Ich bin am überlegen ob ichs so wie in DeddyHs Vorschlag mache. Aber dazu hätte ich eine weitere Frage:
Wie ist der Klassenname eines Explorer-Fensters?

Bei mir ist es scheinbar "CabinetWClass" allerdings frage ich mich ob das immer der Fall ist. Ich benutze XP, ist der Klassenname unter Vista oder Win7 vielleicht ein anderer...?
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Auf das Schließen eines Explorer-Fensters warten

  Alt 2. Sep 2011, 09:54
Entweder Du probierst das selber mit EnumWindows aus, oder Du nutzt sowas fertiges wie WinSpy++. Gibt da etliche
  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 07:39 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