Avatar billede hasan Nybegynder
01. august 2004 - 11:07 Der er 14 kommentarer

register en fil type

hvordan kan jeg register en fil type i windows ?

så når jeg dubble klikker på en fil i windows så bliver den åbnet med mit program
Avatar billede Slettet bruger
01. august 2004 - 11:18 #1
Avatar billede hasan Nybegynder
03. august 2004 - 19:30 #2
hvad gør jeg forkeret
uses
  registry, shlobj;

procedure TForm1.RegisterFileType(prefix: string; exepfad: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    //create a new key  --> .pci
    reg.OpenKey('.' + mp3, True);
    try
      //create a new value for this key --> pcifile
      reg.Writestring('', mp3 + 'mp3player.exe');
    finally
      reg.CloseKey;
    end;
    //create a new key --> pcifile
    reg.CreateKey(mp3 + 'mp3player.exe');
    //create a new key pcifile\DefaultIcon
    reg.OpenKey(mp3 + 'c:\mp3player.exe', True);
    //and create a value where the icon is stored --> c:\project1.exe,0
    try
      reg.Writestring('', exepfad + ',0');
    finally
      reg.CloseKey;
    end;
    reg.OpenKey(mp3 + 'file\shell\open\command', True);
    //create value where exefile is stored --> c:\project1.exe "%1"
    try
      reg.Writestring('', exepfad + ' "%1"');
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  RegisterFileType('pci', 'c:\mp3player.exe');
end;
Avatar billede Slettet bruger
03. august 2004 - 20:48 #3
Kommer den med nogen fejl??
Avatar billede hasan Nybegynder
04. august 2004 - 17:33 #4
ja jeg får fejl

[Error] Unit1.pas(402): Undeclared identifier: 'RegisterFileType'
[Error] Unit1.pas(402): ';' expected but '(' found
[Error] Unit1.pas(410): Undeclared identifier: 'mp3'
[Error] Unit1.pas(423): Undeclared identifier: 'exepfad'
[Error] Unit1.pas(455): Undeclared identifier: 'RegisterFileType'
[Fatal Error] MP3Player.dpr(6): Could not compile used unit 'Unit1.pas'
Avatar billede Slettet bruger
04. august 2004 - 17:58 #5
Prøv med:
procedure RegisterFileType(prefix: string; exepfad: string);

i stedet for:
procedure TForm1.RegisterFileType(prefix: string; exepfad: string);
Avatar billede hasan Nybegynder
04. august 2004 - 18:31 #6
en fejl tilbage

[Error] Unit1.pas(412): Undeclared identifier: 'mp3'
[Fatal Error] MP3Player.dpr(6): Could not compile used unit 'Unit1.pas'
Avatar billede hasan Nybegynder
04. august 2004 - 18:38 #7
havde glemt nogle ''
ingen fejl nu, men den virker ik' den register ikke filtypen. når jeg klikker på mp3 filer så åbner den stadige med windows media player
Avatar billede Slettet bruger
04. august 2004 - 21:25 #8
Bruger du:
RegisterFileType('pci', 'c:\mp3player.exe');  ??

For så tror jeg du skal prøve med:
RegisterFileType('mp3', 'c:\mp3player.exe');
Avatar billede hasan Nybegynder
04. august 2004 - 22:26 #9
det her er min kode. jeg får ikke nogen fejl når jeg compiler, men det viker bare ik'


uses
  registry, shlobj;

procedure RegisterFileType(prefix: string; exepfad: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    //create a new key  --> .mp3
    reg.OpenKey('.' + 'mp3', True);
    try
      //create a new value for this key --> pcifile
      reg.Writestring('', 'mp3' + 'mp3layer.exe');
    finally
      reg.CloseKey;
    end;
    //create a new key --> mp3file
    reg.CreateKey('mp3' + 'mp3player.exe');
    //create a new key pcifile\DefaultIcon
    reg.OpenKey('mp3' + 'D:\Programmer\mp3Player.exe', True);
    //and create a value where the icon is stored --> D:\Programmer\mp3Player.exe,0
    try
      reg.Writestring('', exepfad + ',0');
    finally
      reg.CloseKey;
    end;
    reg.OpenKey('mp3' + 'file\shell\open\command', True);
    //create value where exefile is stored --> D:\Programmer\mp3Player.exe "%1"
    try
      reg.Writestring('', exepfad + ' "%1"');
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

procedure TForm1.mp31Click(Sender: TObject);
begin
RegisterFileType('mp3', 'D:\Programmer\mp3Player.exe');
end;
Avatar billede Slettet bruger
04. august 2004 - 23:34 #10
Du skal bare bruge den kode som er på torry... Altså du behøves ikke at rette i RegisterFileType koden :o):

Tror fejlen er her:
reg.OpenKey('mp3' + 'D:\Programmer\mp3Player.exe', True);

Den nøgle eksistere ikke, fordi du længere oppe har brugt:
reg.CreateKey('mp3' + 'mp3player.exe');

Hvis du retter D:\Programmer\mp3Player.exe til mp3player.exe, eller bare bruger RegisterFileType funktionen fra Torry, uden rettelser, tror jeg det virker :o)


Hvis det stadig ikke virker, så prøv med denne i stedet:
http://delphi.about.com/cs/adptips2001/a/bltip0801_3.htm

Den ser lidt simpler ud :o)
Avatar billede hasan Nybegynder
05. august 2004 - 16:34 #11
okay nu virker det. MEN kun hvis jeg opretter en ny filtype, men det var jo også det jeg spurgte om.

hvis jeg vil have mp3 filer til at åbne med mit program, så virker det ik helt. alle mp3 filerne får det icon som mit program har, og når jeg klikker på mp3 filerne åbner den med WMP. jeg gik ind i mappeindstillinger >> filtyper vælger mp3

så er der to ting:

en der hedder "afspil" og "åben"
den der hedder "afspil" linker til WMP
og "åben" linker til mit program, men den åbner ikke filerne med mit program

og hvordan kan jeg give mp3 filerne et icon fra min ImageList1 da jeg ikke vil have mp3 filerne får det samme icon som mit program.
Avatar billede Slettet bruger
05. august 2004 - 16:56 #12
Hmm... har prøvet at ændre lidt i funktionen, så det er muligt at bruge andre ikoner og afspille med dit program, men har desværre, hverken Windows eller Delphi, så ved ikke om det virker :/

procedure RegisterFileType(prefix: string; exepfad: string; action: string; icon: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey('.' + prefix, True);
    try
      reg.Writestring('', prefix + 'file');
    finally
      reg.CloseKey;
    end;
    reg.CreateKey(prefix + 'file');
    reg.OpenKey(prefix + 'file\DefaultIcon', True);
    try
      reg.Writestring('', icon);
    finally
      reg.CloseKey;
    end;
    reg.OpenKey(prefix + 'file\shell\'+action+'\command', True);
    try
      reg.Writestring('', exepfad + ' "%1"');
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

Jeg ved ikke, hvordan du kan give filen et ikon fra en TImageList, men tror det virker hvis du bare angiver en sti til en ikon fil:

RegisterFileType('mp3', 'mp3player.exe', 'afspil', 'sti-til-ikon');
Avatar billede hasan Nybegynder
06. august 2004 - 16:22 #13
et svar mere :-)
Avatar billede Slettet bruger
10. september 2006 - 13:41 #14
svar.. :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester