Delphi - Asociere extensie fisier cu aplicatia noastra

Delphi - Asociere extensie fisier cu aplicatia noastra

Postby v0id » 19 Jan 2010, 23:34

Puteti folosi metoda urmatoare daca doriti ca o anumita extensie de fisier sa fie asociata cu aplicatia voastra.

Parametri:
1. aExt - extensia fisierului (ex.: avi, mp3)
2. aExePath - calea catre executabilul aplicatiei voastre
3. aRegister - daca e True sa va face asocierea; daca e False, asocierea va fi eliminata

  1.  
  2. ...
  3.  
  4. uses
  5.   Registry, ShlObj;
  6.  
  7. ...
  8.  
  9. procedure RegisterFileType(aExt: string; aExePath: string; aRegister: boolean);
  10. var
  11.   lReg: TRegistry;
  12. begin
  13.   if (aExt[1] = '.') then
  14.     Delete(aExt, 1, 1);
  15.  
  16.   lReg := TRegistry.Create;
  17.   try
  18.    lReg.RootKey := HKEY_CLASSES_ROOT;
  19.  
  20.    // Stergere chei din Registry daca dorim sa eliminam asocierea
  21.    if (not aRegister)
  22.      then
  23.        begin
  24.          // Daca extensia lipseste din Registry, ne oprim aici
  25.          if (not lReg.KeyExists('.' + aExt)) then
  26.            Exit;
  27.  
  28.          lReg.DeleteKey('.' + aExt);
  29.          lReg.DeleteKey(aExt + 'file\DefaultIcon');
  30.          lReg.DeleteKey(aExt + 'file\shell\open\command');
  31.        end
  32.      else
  33.        begin
  34.          // Verificam daca extensia exista deja in Registry. Daca exista, nu facem modificari.
  35.          if lReg.KeyExists('.' + aExt) then
  36.            Exit;
  37.  
  38.          // Scriere valori necesare in Registry
  39.          lReg.OpenKey('.' + aExt, True) ;
  40.          lReg.WriteString('', aExt + 'file') ;
  41.          lReg.CloseKey;
  42.  
  43.          lReg.CreateKey(aExt + 'file') ;
  44.          lReg.OpenKey(aExt + 'file\DefaultIcon', True) ;
  45.          lReg.WriteString('', aExePath + ',0') ;
  46.          lReg.CloseKey;
  47.  
  48.          lReg.OpenKey(aExt + 'file\shell\open\command', True) ;
  49.          lReg.WriteString('', aExePath + ' "%1"') ;
  50.          lReg.CloseKey;
  51.        end;
  52.   finally
  53.    lReg.Free;
  54.   end;
  55.  
  56.   // Notificare sistem de operare, astfel incat modificarea sa aiba efect imediat
  57.   SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil) ;
  58. end;
  59.  
2p / 1 votes
A good coder is never on holiday - he may be working on a different machine, that's about as far as it gets.
User avatar
v0id
Word
 
Joined: 05 Jan 2010
Location: 127.0.0.1
Status: 39.5

Return to Snippets

Who is online

Users browsing this forum: No registered users and 1 guest