[Delphi] Verandering associatie file extension

Pagina: 1
Acties:

  • EvdB
  • Registratie: November 2001
  • Laatst online: 17:15
Ik heb van een bepaald programma meerdere versies geinstalleerd. Ik lees nu de versie nummers van deze programma's in en zet ze in een radiogroup, met de button op de huidige geassocieerde versie van het programma.
Hoe kan ik nu de extensie van het huidige programma toekennen aan een andere versie van dit programma?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Door de juiste registry key aan te passen in HKEY_CLASSES_ROOT

We adore chaos because we like to restore order - M.C. Escher


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 19-03 00:48

ZaZ

Tweakers abonnee

HKEY_CLASSES_ROOT :)

edit:

potver3
te laat :( :'(

[ Voor 55% gewijzigd door ZaZ op 22-12-2004 11:26 ]

Lekker op de bank


  • EvdB
  • Registratie: November 2001
  • Laatst online: 17:15
Ik wist ook nog wel dat dit in het register moet gebeuren. Maar moet dit op meerdere plekken? En moet ik daarna ook mijn PC herstarten?
Ik wil het graag gewiijzigd hebben zonder mijn PC op te hoeven starten, zoiets als 'open with" in explorer en dat je dan deze versie als default insteld.

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 19-03 00:48

ZaZ

Tweakers abonnee

hoeft niet opnieuw op te starten.
en als je daar in het register kijkt zie je al snel genoeg hoe je het simpel kunt doen lijkt me :)
als je simpelweg een extensie rechtreeks aan een proggie wilt hangen is dat 30 sec werk.
alle extensies staan al daar, met nog 2 regels extra. you do the math :P

Lekker op de bank


Verwijderd

File associaties in de registry werken zo:

Extensie wijst naar bestandstype
Bestandstype wijst naar programma's (middels verbs)

En ze staan allebei in HKCR.

Registratie van een bestandstype gaat dus bijvoorbeeld als volgt (waarbij @ de "default" waarde van een key is):

code:
1
2
3
4
5
6
HKCR\.myext\@ => MyFileType
HKCR\MyFileType\@ => Dit is mijn leuke bestandstype  # Een beschrijving is wel zo netjes
HKCR\MyFileType\shell\open\command\@ => "c:\program files\myprog\myprog.exe" "%1" # Let op de extra aanhalingstekens voor lange bestandsnamen!

# En eventueel voor een icoontje:
HKCR\MyFileType\DefaultIcon\@ => "c:\program files\myprog\myprog.exe",105

  • EvdB
  • Registratie: November 2001
  • Laatst online: 17:15
Ik wil dit doen voor het programma Pro/II van Simsci. De executable wordt aangeroepen met
C:\SIMSCI.700\Proii70\Bin\PROII.exe /I="C:\SIMSCI.700\Proii70\User\proii.ini"

Ik heb nu de volgende registry file:
code:
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
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.prz]
@="przfile"

[HKEY_CLASSES_ROOT\.prz\PRO/II]

[HKEY_CLASSES_ROOT\.prz\PRO/II\ShellNew]

[HKEY_CLASSES_ROOT\przfile]

[HKEY_CLASSES_ROOT\przfile\Shell]

[HKEY_CLASSES_ROOT\przfile\Shell\open]

[HKEY_CLASSES_ROOT\przfile\Shell\open\command]
@="C:\\SIMSCI.700\\Proii70\\Bin\\PROII.exe /I=C:\\SIMSCI.700\\Proii70\\User\\proii.ini %1"

[HKEY_CLASSES_ROOT\PRO/II]
@="PRO/II Simulation"

[HKEY_CLASSES_ROOT\PRO/II\DefaultIcon]
@="C:\\SIMSCI.700\\Proii70\\Bin\\PROII.EXE, 0"

[HKEY_CLASSES_ROOT\PRO/II\shell]
@=""

[HKEY_CLASSES_ROOT\PRO/II\shell\open]
@=""

[HKEY_CLASSES_ROOT\PRO/II\shell\open\command]
@="C:\\SIMSCI.700\\Proii70\\Bin\\PROII.exe /I=C:\\SIMSCI.700\\Proii70\\User\\proii.ini %1"


Maar nu kan ik de files niet meer openen. Hij opent wel het goede programma, maar sommige parameters zijn niet goed zodat de database niet goed wordt geopend.

[ Voor 6% gewijzigd door EvdB op 22-12-2004 13:44 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Sterker nog, op MSDN staat vrij helder uitgelegd wat je moet doen in het register...

[ Voor 49% gewijzigd door _Thanatos_ op 23-12-2004 01:26 . Reden: url toegevoegd ]

日本!🎌


Verwijderd

Omdat het donderdag is:

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure AssociateFileType(cDescr : string; cExtension : string; cCommand : string);
begin
  WriteStrKey(HKEY_LOCAL_MACHINE, '\SOFTWARE\Classes\' + cExtension, '', cDescr);
  WriteStrKey(HKEY_LOCAL_MACHINE, '\SOFTWARE\Classes\' + cDescr + '\shell\open\command', '', '"' + cCommand + '" "%1"' );

  WriteStrKey(HKEY_CLASSES_ROOT, '\' + cExtension, '', cDescr);
  WriteStrKey(HKEY_CLASSES_ROOT, '\' + cDescr + '\shell\open\command', '', '"' + cCommand + '" "%1"');
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil) ;
end;

procedure AssociateFileIcon(cDescr : string; cIconFile : string; IconNr : integer);
begin
  WriteStrKey(HKEY_LOCAL_MACHINE, '\SOFTWARE\Classes\' + cDescr + '\DefaultIcon', '', '"' + cIconFile + '",' + inttostr(iconnr));
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil) ;
end;


Aanroep voorbeeld:
Delphi:
1
2
 AssociateFileType('Progress PL File'  , '.pl', paramstr(0));
 AssociateFileIcon('Progress PL File', ParamStr(0), 0);


Aanroep Pseudo:
AssociateFileType('Omschrijving', 'extensie inclusief punt', pad naar + executable naam);
AssociateFileIcon('Omschrijving ', pad naar + executable naam, index van icoon in executable);

[ Voor 30% gewijzigd door Verwijderd op 23-12-2004 01:34 ]

Pagina: 1