Zitat von
No Voices:
@ Stevie
Super klasse, schön dank.
Endlich mal was richtig gutes. mich würde nur noch interesieren wie das so funktioniert. Schön währe auch wenn er sich den zuletzt geöfneten eintrag merkt. Wenn ich eine lange liste habe und das fenster sich nach jedem öffnen schliest muß ich immer wieder recht weit scrollen und suchen. Kann man das auch noch mit rein nehmen? ach so die Fenstergröße merkt er sich scheinbar auch nicht.
Selbst mit diesen "anregungen" finde ich es toll das Du dich da so schnell drum gekümmert hast. DANKE!
Wie's funktioniert? Verrat ich nich!!!
Ist eigentlich ganz einfach (wenn man weiß, wie geht und ne Hilfs-Lib dafür hat..):
Ist dir das Prinzip der
Dll-Injektion ein Begriff? (
Artikel im Entwickler) Grob gesagt, wird zwischen den Prozeduraufruf einer
Dll-Funktion und der
Dll eine zweite
Dll gehangen, die dann angesprochen wird. Das heißt, wenn die Funktionen GetFileOpenName oder GetFileSaveName aufgerufen werden, startet die neue
Dll diese Funktionen. Dort werden einige Modifikationen vorgenommen, bevor die eigentliche Funktion aufgerufen wird: als Parameter für diese beiden Funktionen wird ein Record mit Informationen für den Dialog übergeben. Dort kann man eine Hook-Funktion einbauen, die bei Botschaften aufgerufen wird. Dies ist auch eine Funktion aus der
Dll (ähnlich der WndProc). Wenn dort eine bestimmte Botschaft ankommt, dann sucht man sich das Dateilisten-Objekt und sagt ihm, es soll in der Detailansicht angezeigt werden. Mit dem Dienst bewirke ich, dass die
Dll die ganze Zeit geladen ist.
Den zuletzt gewählten Eintrag zu merken wäre nicht so einfach, weil das dann global geschehen müsste, dass heißt aber wiederum, dass in jedem Dialog - in welcher Anwendung auch immer - dieser Eintrag ausgewählt sein würde, was ja nicht unbedingt das Beste ist. Einige Anwedungen bieten dies sicherlich an, aber dann liegt es bei der Anwendung, das zu tun. Bei der Fenstergröße muss ich dir wiedersprechen, die merkt er sich (ich hab's mit Notepad und einer anderen Anwendung ausprobiert, allerdings immer innerhalb derselben Anwendung!!)