Entwickler-Ecke
Windows API - Handle eines selbst geöffneten Ordners auslesen
Xabitire - Do 06.08.09 10:47
Titel: Handle eines selbst geöffneten Ordners auslesen
Hi Leute,
ich bin grad am verzweifeln! Ich benutze folgenden Code um ein einfaches Ordnerfenster zu öffnen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if DirectoryExists(path) then begin ZeroMemory(@sei,sizeof(TShellExecuteInfo)); sei.cbsize := sizeof(TShellExecuteInfo); sei.nShow := SW_SHOWNORMAL; sei.lpVerb := 'open'; sei.lpDirectory := PChar(Path);
ShellExecuteEx(@sei);
Result := sei.Wnd; end; |
Und jetzt hätte ich gern das Fenster-Handle des geöffneten Fensters, was ich, wie man sieht, versuche in Zeile 11 auszulesen! Allerdings bekomme ich immer nur Null zurück! Auch für
sei.hProcess! Weis jemand was ich falsch mache? Oder funktioniert dieses Verfahren etwa nur bei Programmen?
Mit Freundlichen Grüßen
Felix
Xabitire - Fr 07.08.09 12:55
Habe jetzt mal noch ein bisschen rumprobiert und es sind eher noch mehr Fragen aufgetaucht, als zuvor! Gebe ich beim obigem Code noch zusätzlich sei.fMask := SEE_MASK_NOCLOSEPROCESS; bekomme ich mal zumindestens bei Programmen ein Prozess-Handle zurück! Der Haken an der Sache ist, das dieses Handle scheinbar gar nicht existiert! Sowohl TerminateProcess, was ich zum Testen verwendet habe, zeigt keine Wirkung, wie auch andere Abfragen (z.B. GetModuleFileNameEx) geben nichts zurück!
Daher nochmal die Frage, habe ich da irgendwas falsch verstanden oder bleibt das ganze weiterhin ein Mysterium? :gruebel:
Ubrigens bei CreateProcess genau das selbe Problem! Bekomme zwar ein Prozess-Handle zurück, aber das wars auch schon.
jaenicke - Fr 07.08.09 16:25
Ich weise einmal auf die Dokumentation hin...
Das ist ein Parameter, den du angeben kannst, da du das nicht tust, ist der danach natürlich auch nicht gesetzt...
| http://msdn.microsoft.com/en-us/library/bb759784.aspx hat folgendes geschrieben: |
hProcess
A handle to the newly started application. This member is set on return and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no process was launched. For example, if a document to be launched is a URL and an instance of Internet Explorer is already running, it will display the document. |
Das heißt es muss da auch nicht immer etwas drin stehen, wenn du einen Pfad öffnest. Da eine neue Instanz des Explorers gestartet werden wird, sollte es aber der Fall sein.
Warum TerminateProcess nicht geht, steht ebenfalls in der Dokumentation:
Das Zugriffsrecht hast du dir vermutlich nicht geholt. Denn beim Erzeugen des Prozesses wird es ShellExecuteEx sicherlich nicht einfach so geholt haben...
Xabitire - Sa 08.08.09 10:55
jaenicke hat folgendes geschrieben : |
| Das Zugriffsrecht hast du dir vermutlich nicht geholt. Denn beim Erzeugen des Prozesses wird es ShellExecuteEx sicherlich nicht einfach so geholt haben... |
Danke, genau diese Information hat mir fürs Verständnis noch gefehlt! Ich werde mir wohl angewöhnen müssen mir die Dokumentation wirklich
genau anzusehen. Der Hase liegt da ja oft im Detail vergraben :) ! Hatte eigentlich mehr einen Denkfehler, der jetzt problemlos behoben werden konnte.
Danke nochmals!
Mit freundlich Grüßen
Felix
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!