| Autor |
Beitrag |
Freiberger
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 20:01
Hallo zusammen.
ich habe für mein Programm eine eigene Dateiendung .mbr in Windows verknüpft.
Sobald ich die Datei starte oder Dateien auf die Verknüpfung ziehe geht das Programm auch auf.
Ich möchte über Paramstr() die Dateien prüfen, und da liegt das Problem...
Dateien auf Verknüfpung ziehen...
Parameter Nr. 1: C:\Users\...\Desktop\Word.doc
Parameter Nr. 2: C:\Users\...\Desktop\Testfile für Programm.mbr
Parameter Nr. 3: C:\Users\...\Desktop\Excel.xlsx
Start der Datei...
Parameter Nr. 1: C:\Users\...\Desktop\Testfile
Parameter Nr. 2: für
Parameter Nr. 3: Programm.mbr
Wie bekomme für den Start der Datei den Paramstr() in einer Zeile ?
Oder woran erkenne ich, ob das Programm über die .mbr-Datei gestartet wurde oder durch Ziehen von Datei(en) auf die Verknüfung ?
Ich bin ratlos...
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.03.09 20:03
Da fehlen Anführungszeichen bei der Übergabe des Parameters...
Wenn das so im Programm ankommt, dann ist das schon falsch.
Zuletzt bearbeitet von jaenicke am Fr 06.03.09 20:07, insgesamt 2-mal bearbeitet
|
|
Freiberger 
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 20:05
ich habe die Parameter in ein Memo geschrieben...
Parameter 1 = paramstr[0]...
Parameter 2 = paramstr[1]... usw
Ich übergebe die Parameter nicht, diese werden beim Programmstart empfangen...
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 06.03.09 20:10
Hast Du Dein Programm als Standard für diese Endung in der Registry eingetragen? Falls ja, wie sieht der String aus?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.03.09 20:13
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 06.03.09 20:14
Darauf wollte ich hinaus, aber der olle Streber muss ja immer alles verraten 
|
|
Freiberger 
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 20:18
ich habe das so im Delphi-Easy-Helper gefunden...
if GetProgramAssociation('mbr')='' then InstallExt('.mbr', 'MBR-Datei', 'mein Programm', ParamStr(0), '"%1"',1) ;
"Extension" Dateiendung die Registriert werden soll
"ExtDescription" Kurzbeschreibung, wofür die Abkürzung der Endung steht.
"FileDescription" Bietet Platz für eine Beschreibung des Programmes mit dem geöffnet wird.
"OpenWith" Hier muss der komplette Pfad zu der Anwendung übergeben werden, die mit der Endung verknüpft werden soll.
"ParamStr" Enthält mögliche Parameter und deren Schreibweise. (z.B. "%1" um auch Pfadangaben mit Leerzeichen zu übergeben)
"IconIndex" Dem Parameter kann ein entsprechender Index übergeben werden, der angibt, welches Icon für die Anzeige im Explorer verwendet werden soll.
Der Index bezieht sich auf die Icons der verknüpften Anwendung.
Aber du hast recht. es könnte an der %1 liegen...
Keine Ahnung, was es noch gibt (obwohl %1 für Pfadangaben mit Leerzeichen ist)
|
|
Freiberger 
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 20:27
habe es gerade nochmal versucht.
Es liegt definitif an den Leerzeichen im Dateinamen...
Mit 1 Unterstrich wird es eine Zeile weniger.
Parameter Nr. 1: C:\Users\...\Desktop\Testfile_für
Parameter Nr. 2: Programm.mbr
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.03.09 20:40
%1 ist einfach nur in der Shell der Dateiname inkl. Pfad. Und der kann auch Leerzeichen enthalten.
Schau doch einfach mal nach was genau in die Registry geschrieben wird bzw. was da steht. (Unter CLASSES_ROOT\.mbr und dann der Wert, der da steht, unter CLASSES_ROOT, hier also CLASSES_ROOT\MBR-Datei)
|
|
Freiberger 
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 20:51
da steht nur
Name Typ Wert
------------------------------------
(Standard) Reg_SZ MeinProgramm
Bei anderen Dateitypen kann ich noch aufklappen, hier nicht.
Die Funktion zu eintragen in die Registry ist...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| function GetProgramAssociation(Ext: string): string; var reg: TRegistry; s: string; begin s:=''; reg:=TRegistry.Create; reg.RootKey:=HKEY_CLASSES_ROOT; if reg.OpenKey('.'+ext+'\shell\open\command', false) <> false then begin s:=reg.ReadString(''); reg.CloseKey; end else begin if reg.OpenKey('.'+ext, false)<>false then begin s:=reg.ReadString(''); reg.CloseKey; if s<>'' then begin if reg.OpenKey(s+'\shell\open\command', false)<>false then s:=reg.ReadString(''); reg.CloseKey; end; end; end; if Pos('%', s) > 0 then Delete(s, Pos('%', s), length(s)); if ((length(s)>0) and (s[1]='"')) then Delete (s, 1, 1); if ((length(s)>0) and (s[length(s)]='"')) then Delete(s, Length(s), 1); while ((length(s)>0) and ((s[length(s)]=#32) or (s[length(s)]='"'))) do Delete(s, Length(s), 1); reg.Free; result:=s; end; |
|
|
Freiberger 
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 21:00
Ich habe die Datei mal direkt mit Windows zugeordnet, da kommt das gleiche raus...
Man kann aber auch nicht einfach alle Parameter zu einem Text zusammenfügen, da kommt es bei mehreren Dateine (Ziehen auf Verknüfpung) zu Fehlern...
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.03.09 21:08
Freiberger hat folgendes geschrieben : | | Die Funktion zu eintragen in die Registry ist... |
Das ist die zum Auslesen...
Sonst schreib doch die Funktion zum Eintragen selbst, so dass es richtig eingetragen wird. 
|
|
Freiberger 
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 21:13
Sorry...
selberschreiben gern, aber ich habe von Registry leider keine Ahnung...
Das ist die aktuelle Funktion zum Eintragen...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| function InstallExt(Extension, ExtDescription, FileDescription, OpenWith, ParamString: string; IconIndex: Integer = 0): Boolean; var Reg: TRegistry; begin Result := False; if Extension <> '' then begin if Extension[1] <> '.' then Extension := '.' + Extension;
Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT; if Reg.OpenKey(Extension, True) then begin Reg.WriteString('', ExtDescription); if Reg.OpenKey('\' + ExtDescription, True) then begin Reg.WriteString('', FileDescription); if Reg.OpenKey('DefaultIcon', True) then begin Reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex])); if Reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then begin Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString])); Result:=True; end; end; end; end; finally Reg.Free; end; end; end; |
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.03.09 21:26
Da hast du ja schon die Antwort: Delphi-Quelltext 1:
| Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString])); | Also musst du es ohne aufrufen, denn sonst kommen die Anführungszeichen doppelt an. Delphi-Quelltext 1: 2:
| if GetProgramAssociation('mbr') = '' then InstallExt('.mbr', 'MBR-Datei', 'mein Programm', ParamStr(0), '%1', 1); | Nebenbei brauchst du natürlich Adminrechte, aber die Einrichtung macht ja normalerweise ohnehin das Setupprogramm, das diese sowieso hat.
|
|
Freiberger 
      
Beiträge: 130
WIN XP
Delphi 7
|
Verfasst: Fr 06.03.09 22:09
Heee, es geht...
vielen vielen Dank, da wäre ich nie drauf gekommen.
Dann ist es im Easy-Helper falsch... da steht...
| Easy-Helper hat folgendes geschrieben: | Ein Beispielaufruf könnte so aussehen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Button1Click(Sender: TObject); begin if InstallExt('.xyz', 'XYZDatei', 'Tolles Programm', ParamStr(0), '"%1"',0) then Showmessage('Dateiendung konnte erfolgreich registriert werden.'); end; | |
Vielen Dank nochmal..
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
|