![]() |
Datei öffnen mit
Hallo DP,
Ich habe ein Problem. Mit shellexecute kann man Dateien öffnen, ich will jedoch eine Datei nicht mit dem Standartprogramm öffnen, sondern mit einem ganz Speziellen. Im Windows geht das ganz einfach mit Rechtsklick auf die Datei + "öffnen mit". Gibt es eine Möglichkeit dies auch mit Delphi hinzukriegen? Pfad der exe des Programms welche die Datei öffnen soll habe ich. Die shellexecute Funktion habe ich schon studiert mit der scheint es nicht möglich zu sein. Danke im Vorraus :) |
Re: Datei öffnen mit
du brauchst die anwendung selbst und dieser musst du dann die zu öffnende datei als pfad angeben! ich weiß leider nicht genau, wie es beim firefox geht, aber das hier sollte als anschauliches beispiel genügen (keine gewähr, dass das funktioniert):
c:\programme\mozilla firefox\firefox.exe -c:\test.html somit musst du du firefox mit dem parameter "c:\test.html" aufrufen und alles andere geschieht von alleine. handelt es sich um ein spezielles programm, so kann es sein, dass etwas in der doku dazu steht. |
Re: Datei öffnen mit
Versuch es mal mit
Delphi-Quellcode:
[edit] Eine Klammer zuviel [/edit]
ShellExecute(Handle,'open',PChar(<Pfad zum Programm>),PChar(<Pfad zur zu öffnenden Datei>),nil,SW_SHOW);
|
Re: Datei öffnen mit
Funktioniert beides nicht.
Bei DeddyH's Lösung öffnet es sich zwar, aber wieder nur mit dem Standartprogramm. Bei s.h.a.r.k's Lösung öffnet sich garnichts, wobei ich die Idee gut fand. Um nochmal mein vorhaben zu beschreiben, ich versuche ein skript mit der endung .ahk mit der exe Autohotkey.exe zu starten. Wenn ich die exe von vorneherein als Standart benutze geht das auch wunderbar, nur will ich das Programm auch an Freunde schicken und ich hab keine Lust ihnen zu erklären, was sie zu tun haben bevor sie mein Programm richtig nutzen können. |
Re: Datei öffnen mit
Zeig doch mal Deinen Aufruf.
|
Re: Datei öffnen mit
Delphi-Quellcode:
procedure TForm1.Button16Click(Sender: TObject);
begin //s.h.a.r.k's Lösung ShellExecute(Application.Handle,'open',PChar('Autohotkey.exe -'+warkeysp+'\autowarkey\My_AutoWarkey_Script.ahk'),nil,PChar(warkeysp+'\Autowarkey\autohotkey'),sw_ShowNormal); //DeddyH's Lösung ShellExecute(Application.Handle,'open',PChar('My_AutoWarkey_Script.ahk'),PChar(warkeysp+'\Autowarkey\autohotkey\autohotkey.exe'),PChar(warkeysp+'\Autowarkey'),sw_ShowNormal); end; warkeysp ist eine Variable in der der Pfad steht also die Pfade stimmen mit ziemlicher Sicherheit |
Re: Datei öffnen mit
Du hast bei meiner Lösung die Parameter verwechselt: zuerst das Programm und dann die Datei.
|
Re: Datei öffnen mit
Ah okay.
Vielen Dank jetzt funktioniert es! :) |
Re: Datei öffnen mit
DeddyH's praktische Lösung entspricht zudem meiner theoretischen Lösung, nur um das etwas klarer herauszustellen :mrgreen:
|
Re: Datei öffnen mit
Jepp, nur hattest Du da ein Minuszeichen drin, das dürfte eigentlich unnötig sein :zwinker:
|
Re: Datei öffnen mit
Bei ShellExecute gibt man ja ein Verb an. In der Regel ist das "open".
![]() Wenn in der Registry weitere Verben (z.B. "print", "edit", "execute"...) für eine bestimmte Dateiendung hinterlegt sind kann man diese natürlich auch benützen.
Delphi-Quellcode:
Gerade bei einer Scriptdatei könnte man ich verschiedene Verben vorstellen.
ShellExecute(Application.Handle,'execute',PChar('My_AutoWarkey_Script.ahk'),nil,PChar(warkeysp+'\Autowarkey'),sw_ShowNormal);
Die Anwendung, die das Script ausführt könnte dafür sorgen, dass die Verben in der Registry verankert werden. |
Re: Datei öffnen mit
Den Öffnen-mit-Dialog von Windows kannst du mit
Delphi-Quellcode:
aufrufen.
ShellExecute(Application.Handle,'open',PChar('rundll32.exe'),PChar('shell32.dll,OpenAs_RunDLL ' + Dateiname), nil, SW_SHOWNORMAL);
|
Re: Datei öffnen mit
Zitat:
c:\demo.bmp wird als demo.bmp" dargestellt mit verwaistem Anführungszeichen, sodass keine passenden Programme dafür ausgewählt sind, jedoch wird der Dateiname dann korrekt übergeben. Muss ich den Pfad als shortpath darstellen und den Dateinamen als 8.3 formatieren? |
Re: Datei öffnen mit
Kopiert aus der JCL, Unit JclShell:
Delphi-Quellcode:
Du kannst natürlich auch die JCL direkt verwenden.
function PCharOrNil(const S: string): PChar;
begin Result := Pointer(S); end; function ShellExecEx(const FileName: string; const Parameters: string; const Verb: string; CmdShow: Integer): Boolean; var Sei: TShellExecuteInfo; begin FillChar(Sei, SizeOf(Sei), #0); Sei.cbSize := SizeOf(Sei); Sei.fMask := SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI; Sei.lpFile := PChar(FileName); Sei.lpParameters := PCharOrNil(Parameters); Sei.lpVerb := PCharOrNil(Verb); Sei.nShow := CmdShow; Result := ShellExecuteEx(@Sei); end; function ShellOpenAs(const FileName: string): Boolean; // Open-As Dialog öffnen begin Result := ShellExecEx('rundll32', Format('shell32.dll,OpenAs_RunDLL "%s"', [FileName]), '', SW_SHOWNORMAL); end; Das erspart Dir viele Fragen weil einige schlaue Köpfe die grundlegenden Dinge schon gelöst haben. |
Re: Datei öffnen mit
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, Danke für die Hilfe aber ich komme wohl umher, mir noch mehr Bibliotheken einzuschleppen inklusive derer Lizenzbestimmungen. Der Fehler lag im Dateinamen, bei dessen Generierung sich ein \\ eingeschlichen hat, da bringen auch die Anführungszeichen nichts mehr. Im Gegenteil: mit korrektem Dateinamen und Anführungszeichen ist es nicht besser. Soviel zum Thema "Gedanken gemacht" :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz