Jeg ville gerne have mit program til at kunne oprette andre filer med nogle oplysninger...
Når man åbner disse filer skal mit program åbnes og nogle variabler skal ændres alt efter hvad der står i filen.
Nu er det jo at man ikke bare kan skrive oplysningerne i *.txt filer, for når man åbner dem vil de ikke åbne mit program...
Så derfor tænkte jeg at man kunne lave sit eget fil-format!
Hvordan (Når programmet installeres eller første gang kører) får jeg windows til at fatte at de slags filer skal åbnes med mit program???
Og er der grænser for hvad man må kalde sit format? fx *.hap *.mw *.webwriter
Hej,
Jeg har kigget lidt i gennem registry og fundet ud af hvordan du kan registrere filer så de kan åbnes i dit eget program.
Jeg har lave en procedure (Delphi) som kan registrere dit filformat.
Du kan nemt ændre i proceduren så den også kan registrere sig så dit program også giver mulighed for at printe direkte fra popup menuen osv.
Se evt. :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/fileassociations/fa_file_types.asp
unit FileExt;
(* Gem denne unit med filnavnet "FileExt.pas" *)
interface
procedure RegisterFileFormat(AExtension, APrgPath, ARegName, AFileDescription : String);
implementation
uses
Windows,
Registry;
(*
Følgende skal registreres i registry:
HKEY_CLASSES_ROOT\\AExtension
(default) ARegName
HKEY_LOCAL_MACHINE\\Software\\Classes\\AExtension
HKEY_LOCAL_MACHINE\\Software\\Classes\\ARegName\ (default) AFileDescription
->DefaultIcon\ (default) APrgPath,0
->shell\\op\\command\ (default) APrgPath
Params:
AExtension - Den extension som du vil registrere (eks. ".mytype").
APrgPath - Stien + filnavn på dit program.
ARegName - Et navn som der gemmes i registry med (som regel dit program navn).
Eks.: HAP.MitProgram.1 (vendor.program.version)
AFileDescription - Det som vises i "Type" i Windows Explore.
*)
procedure RegisterFileFormat(AExtension, APrgPath, ARegName, AFileDescription : String);
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
// Indsæt extension i registry.
Reg.RootKey := HKEY_CLASSES_ROOT;
if (not Reg.KeyExists(AExtension)) then
Reg.CreateKey(AExtension);
if (Reg.OpenKey(AExtension, False)) then
begin
Reg.WriteString('', ARegName);
Reg.CloseKey;
end;
Reg.RootKey := HKEY_LOCAL_MACHINE;
if (not Reg.KeyExists('Software\\Classes\\'+AExtension)) then
Reg.CreateKey('Software\\Classes\\'+AExtension);
if (Reg.OpenKey('Software\\Classes\\'+AExtension, False)) then
begin
Reg.WriteString('', ARegName);
Reg.CloseKey;
end;
if (not Reg.KeyExists('Software\\Classes\\'+ARegName)) then
Reg.CreateKey('Software\\Classes\\'+ARegName);
if (Reg.OpenKey('Software\\Classes\\'+ARegName, False)) then
begin
Reg.WriteString('', AFileDescription);
Reg.CloseKey;
end;
if (not Reg.KeyExists('Software\\Classes\\'+ARegName+'\\DefaultIcon')) then
Reg.CreateKey('Software\\Classes\\'+ARegName+'\\DefaultIcon');
if (Reg.OpenKey('Software\\Classes\\'+ARegName+'\\DefaultIcon', False)) then
begin
Reg.WriteString('', APrgPath+',0');
Reg.CloseKey;
end;
if (not Reg.KeyExists('Software\\Classes\\'+ARegName+'\\shell')) then
Reg.CreateKey('Software\\Classes\\'+ARegName+'\\shell');
if (not Reg.KeyExists('Software\\Classes\\'+ARegName+'\\shell\\open')) then
Reg.CreateKey('Software\\Classes\\'+ARegName+'\\shell\\open');
if (not Reg.KeyExists('Software\\Classes\\'+ARegName+'\\shell\\open\\command')) then
Reg.CreateKey('Software\\Classes\\'+ARegName+'\\shell\\open\\command');
if (Reg.OpenKey('Software\\Classes\\'+ARegName+'\\shell\\open\\command', False)) then
begin
Reg.WriteString('', '"'+APrgPath+'" %1');
Reg.CloseKey;
end;
Reg.Free;
end;
end.
Sådan bruger du proceduren:
RegisterFileFormat('.HAP', ParamStr(0), 'HAP.MitProgram.1', 'HAP''s format');
Håber det hjælper!
/Michael