Datei öffnen und Handle erhalten

  • Hallo zusammen, hatte mir mal Gedanken um das starten einer Datei mit Rückgabe des Handles aufs ausführende Programm gemacht.
    Mit CreateProcess ist dies ja nicht möglich, aber nach durchstöbern der Win-API bin ich auf ShellExecuteEx gestoßen. Ich zumindest hatte diese EX Version von ShellExecute nie beachtet. Was ein Fehler war!

    Anbei ein kleines Beispiel in Delphi, es ist nur wichtig das in fMask das Flag „SEE_MASK_NOCLOSEPROCESS” gesetzt wird.
    Für weitere Optionen bitte die API – Hilfe hierzu lesen, so kann z.B über "hInstApp"
    eine genauere Error Analyse erfolgen.
    Die Abbruch Variable ist Optional und wurde zum testen mit einem Extra Button gesetzt.

    Ist mir schon bewusst dass dies kein Delphi Forum hier ist, aber ich
    denke doch, dass dies für den einen oder anderen hier mal hilfreich sein könnte.

    ---------------
    Gruß gispos

    Danke für die CODE Formatierung, hatte ich völlig Übersehen.

  • Hallo zusammen, hatte mir mal Gedanken um das starten einer Datei mit Rückgabe des Handles aufs ausführende Programm gemacht.
    Mit CreateProcess ist dies ja nicht möglich, aber nach durchstöbern der Win-API bin ich auf ShellExecuteEx gestoßen. Ich zumindest hatte diese EX Version von ShellExecute nie beachtet. Was ein Fehler war!


    In dem Code bekommst Du auch nicht das Handle auf das ausführende Programm. Und mit CreateProcess funktioniert das gezeigte auch. Abbrechen geht mit der Function TerminateProcess und einer Variable vom Typ TProcessInformation, welche für CreateProcess ohnehin benötigt wird. Die Fehlermeldung kann man vermutlich besser über GetLastError bekommen.

    Gruß Frank

  • Im Wesentlichen geht es ja um das öffnen einer Datei mit dem damit verknüpften Programm, ohne die Registrie nach einem Programm durchsuchen zu müssen, und dann doch falsche Informationen zu lesen.

    Mit CreateProcess ist es aber nicht möglich eine Datei ohne die dazu erforderliche Anwendung zu öffnen. Genauer gesagt, CreateProcess verlangt nach einer ausführbaren Datei (exe, com, ???) und die muss man erst mal kennen.

    Ganz simpel:
    CreateProcess(nil, 'E:\Ablage\ReadMe.txt') das funktioniert nicht.
    CreateProcess('Editor.exe', 'E:\Ablage\ReadMe.txt') funktioniert, aber was wenn der User alle Text Dateien lieber mit Ultra-Edit.exe geöffnet hätte?
    ShellExecuteEx besorgt dies automatisch, da es hier wie bei ShellExecute möglich ist, nur die Text Datei als Parameter zu übergeben, aber eben mit diesem kleinen aber nützlichen Unterschied, ein Process Handle auf das ausführende Programm zu bekommen.

    TerminateProcess ist hier nicht erforderlich, besser währe hier ExitProcess, ist aber in diesem Beispiel ebenfalls nicht erforderlich. Gewünscht wird ja nur, dass das eigene Programm so lange wartet bis die Datei (Programm) wieder geschlossen wird, aber eben mit der Option dieses Warten abbrechen zu können.

    FR_AN:
    Also, wenn ich mich mit CreateProcess wieder erwartend irren sollte, dann poste bitte einen Beispiel Code, ich hab’s mit CreateProcess nicht hin bekommen.

    Da der erste Code noch nicht ganz ausgereift war:
    Überarbeiteter Code und Variante die auch ohne extra Thread zu gebrauchen ist:
    http://www.delphi-library.de/topic_Datei+oe…rten_77895.html

    Gruß gispos

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!