Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datei öffnen mit (https://www.delphipraxis.net/141704-datei-oeffnen-mit.html)

Blackshadow91 14. Okt 2009 12:12


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 :)

s.h.a.r.k 14. Okt 2009 12:17

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.

DeddyH 14. Okt 2009 12:18

Re: Datei öffnen mit
 
Versuch es mal mit
Delphi-Quellcode:
ShellExecute(Handle,'open',PChar(<Pfad zum Programm>),PChar(<Pfad zur zu öffnenden Datei>),nil,SW_SHOW);
[edit] Eine Klammer zuviel [/edit]

Blackshadow91 14. Okt 2009 12:36

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.

DeddyH 14. Okt 2009 12:40

Re: Datei öffnen mit
 
Zeig doch mal Deinen Aufruf.

Blackshadow91 14. Okt 2009 12:46

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

DeddyH 14. Okt 2009 12:49

Re: Datei öffnen mit
 
Du hast bei meiner Lösung die Parameter verwechselt: zuerst das Programm und dann die Datei.

Blackshadow91 14. Okt 2009 12:52

Re: Datei öffnen mit
 
Ah okay.

Vielen Dank jetzt funktioniert es!
:)

s.h.a.r.k 14. Okt 2009 16:01

Re: Datei öffnen mit
 
DeddyH's praktische Lösung entspricht zudem meiner theoretischen Lösung, nur um das etwas klarer herauszustellen :mrgreen:

DeddyH 14. Okt 2009 18:02

Re: Datei öffnen mit
 
Jepp, nur hattest Du da ein Minuszeichen drin, das dürfte eigentlich unnötig sein :zwinker:

sx2008 15. Okt 2009 01:43

Re: Datei öffnen mit
 
Bei ShellExecute gibt man ja ein Verb an. In der Regel ist das "open".
http://msdn.microsoft.com/en-us/libr...%29.aspx#verbs

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:
ShellExecute(Application.Handle,'execute',PChar('My_AutoWarkey_Script.ahk'),nil,PChar(warkeysp+'\Autowarkey'),sw_ShowNormal);
Gerade bei einer Scriptdatei könnte man ich verschiedene Verben vorstellen.
Die Anwendung, die das Script ausführt könnte dafür sorgen, dass die Verben in der Registry verankert werden.

Sko 15. Okt 2009 05:58

Re: Datei öffnen mit
 
Den Öffnen-mit-Dialog von Windows kannst du mit
Delphi-Quellcode:
ShellExecute(Application.Handle,'open',PChar('rundll32.exe'),PChar('shell32.dll,OpenAs_RunDLL ' + Dateiname), nil, SW_SHOWNORMAL);
aufrufen.

helgew 25. Nov 2009 00:59

Re: Datei öffnen mit
 
Zitat:

Zitat von Sko
Den Öffnen-mit-Dialog von Windows kannst du mit
Delphi-Quellcode:
ShellExecute(Application.Handle,'open',PChar('rundll32.exe'),PChar('shell32.dll,OpenAs_RunDLL ' + Dateiname), nil, SW_SHOWNORMAL);
aufrufen.

also irgendwas entgeht mir da, ich kriege gerade einfach immmer wieder das verdammt blöde Verhalten zu sehen, dass es in obiger Form nur mit einem Teil der Programme funktioniert, verwendet man hingegen '"'+Dateiname+'"', so wird der Dateiname zwar vom Öffnen mit... Dialog falsch dargestellt, etwa

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?

sx2008 25. Nov 2009 02:01

Re: Datei öffnen mit
 
Kopiert aus der JCL, Unit JclShell:
Delphi-Quellcode:
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;
Du kannst natürlich auch die JCL direkt verwenden.
Das erspart Dir viele Fragen weil einige schlaue Köpfe die grundlegenden Dinge schon gelöst haben.

helgew 25. Nov 2009 15:01

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