Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Fileviewer, Vorgehensweise windowsseitig (https://www.delphipraxis.net/158393-fileviewer-vorgehensweise-windowsseitig.html)

Medium 15. Feb 2011 17:56

Fileviewer, Vorgehensweise windowsseitig
 
Ahoi!

Ich baue in einer Anwendung, die Dateien in einer DB speichert, einen Dateibetrachter. Ablauf soll sein:
1) User klickt auf Eintrag im DBGrid
2) Datei wird unter ihrem ursprünglichen Namen im Windows-Temp Ordner erstellt
3) Diese Datei soll mit dem ihrem Typ zugeordneten Standardprogramm geöffnet werden
4) Sobald dieses geschlossen wird, Temp-File löschen

Die Punkte 3 und 4 sind mir noch nicht ganz klar. Mit ShellExecute kann ich problemlos die Dateien so öffnen, und bekomme ein hInstance zurück. Ich war aber in meiner Suche im MSDN nicht erfolgreich, eine Methode zu finden, mit der ich via dieses Handles nachschauen kann, ob der Prozess noch läuft. Noch lieber hätte ich ja eine Message oder einen Callback wenn der Prozess geschlossen wird, aber das ist fürchte ich eher Utopie das als vorhandene Möglichkeit zu vermuten.
Bei CreateProcess bekomme ich ein paar mehr Dinge als dieses eine Hanlde an die Hand, konnte mir aber keinen Reim darauf machen, wie ich damit ein non-Executable mit seiner Standardassoziation öffne.
Wichtig ist halt, dass ich irgendwie mitbekomme, wann das so geöffnete Programm wieder geschlossen wird. Ich vermute nämlich mal nicht, dass es gängige Praxis ist, seine Temp-Files einfach liegen zu lassen =)

Sowas hat doch bestimmt einer von euch schon mal gebaut, und kann mir nen heissen Tipp geben! Danke schon mal im Voraus,
Medium

WM_CLOSE 15. Feb 2011 18:02

AW: Fileviewer, Vorgehensweise windowsseitig
 
Du könntest das Standartprogramm über die Registry auslesen

DeddyH 16. Feb 2011 08:22

AW: Fileviewer, Vorgehensweise windowsseitig
 
Oder per MSDN-Library durchsuchenFindExecutable.

Satty67 16. Feb 2011 09:21

AW: Fileviewer, Vorgehensweise windowsseitig
 
Gibt es unter Windows 7 noch die Wininit.ini?

Wenn ja, dort ein "NUL=c:\temp\meinedateim.tmp" rein und die temporäre Datei wird beim nächsten Boot gelöscht.

PS zu 3): Bei ShellExecute reicht es ja, wenn die (temporäre) Datei die richtige Dateiendung hat. Dann wird bei Aufruf der Datei automatisch die verknüpfte Anwendung ausgeführt bzw. wenn es keine Verknüpfung gibt, der Auswahldialog angezeigt.

Morphie 16. Feb 2011 11:08

AW: Fileviewer, Vorgehensweise windowsseitig
 
Vielleicht hilft dir ja dieser Link?

http://swissdelphicenter.ch/de/showcode.php?id=93

Satty67 16. Feb 2011 11:14

AW: Fileviewer, Vorgehensweise windowsseitig
 
Was ist, wenn der gestartete Prozess die Datei selbst wieder an einen anderen Prozess weitergibt und sich beendet? (Also z.B. soffice.exe -> writer.exe)

Bin mir nicht sicher, ob sowas oft vorkommt, aber könnte eine unklare Situation entstehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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