Associer un programme à une extension, avec icone et nom

Soyez le premier à donner votre avis sur cette source.

Vue 11 156 fois - Téléchargée 570 fois

Description

C'est en réponse à une question du forum.

Ce programme montre les clefs du registre à modifier pour associer un programe à une extension. Il permet aussi d'ajouter une icone à l'extension.

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs;

type
  TForm1 = class(TForm)
    btnCreer: TButton;
    btnModifierIcone: TButton;
    btnSupprimer: TButton;
    Ouvrir: TOpenPictureDialog;
    procedure btnCreerClick(Sender: TObject);
    procedure btnSupprimerClick(Sender: TObject);
    procedure btnModifierIconeClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Uses Registry;

Procedure TForm1.btnCreerClick(Sender: TObject);
Var Registre:TRegistry;
Begin
  Registre:= TRegistry.Create;
  With Registre Do Try
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey('NonoFile',True);
    WriteString('','Les fichiers de Nono');
    CloseKey;
    OpenKey('NonoFile\shell\open\command',True);
    WriteString('',Application.ExeName+' %1');
    CloseKey;
    OpenKey('.Nono',True);
    WriteString('','NonoFile');
    CloseKey;
  Finally
    Free;
  End;
End;

procedure TForm1.btnSupprimerClick(Sender: TObject);
Var Registre:TRegistry;
Begin
  Registre:= TRegistry.Create;
  With Registre Do Try
    RootKey := HKEY_CLASSES_ROOT;
    DeleteKey('NonoFile');
    DeleteKey('.Nono');
  Finally
    Free;
  End;
end;

procedure TForm1.btnModifierIconeClick(Sender: TObject);
Var Registre:TRegistry;
Begin
  If Not Ouvrir.Execute Then Exit;
  Registre:= TRegistry.Create;
  With Registre Do Try
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey('NonoFile\DefaultIcon',True);
    WriteString('',Ouvrir.FileName);
    CloseKey;
  Finally
    Free;
  End;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  If ParamStr(1)<>'' Then ShowMessage('Vous avez sélectionner le fichier :'#13+ParamStr(1));
end;

end.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
32
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
4 novembre 2006

Bonjour,

Je suis sous W2K, et les sources de ce style marchent très moyennement...

En fait, je suis obligé d'ajouter d'autres trucs dans les HKEY_CURRENT_USER et dans les HKEY_LOCAL_MACHINE pour réussir à faire qqch de potable, sans compter qu'il faut au moins que je ferme la session avant que les icônes soient rafraichies dans l'explorateur windows...

Est-ce que qqn a vraiment étudié le truc en profondeur, avec les MRUList et tout et tout ?

Merci d'avance.
Cordialement,

Ghislain "Sokoban" Martin
Messages postés
8
Date d'inscription
mardi 14 janvier 2003
Statut
Membre
Dernière intervention
18 octobre 2005

D'accord mais comment recuperer tous les fichiers seletionnes dans l'explorateur. (ex: Winamp qui ajoute tous les fichiers selectionnes a sa PayList) ?
Ca m'interersse
Merci

[ASW] Al
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1
Pour Bruto :

1/ le %1 est indispensable si tu veux que ton programme sache quel est le fichier sur le quel tu as double-cliqué. Avec le %1 tu trouvera le nom du programme dans ParamStr(1). Sans le %1 tu ne peut pas savoir quel fichier a appelé ton prog !

2/ HKEY_CLASSES_ROOT est LA place ou mettre les extensions, il y en a beaucoups car toutes les applis et windows placent les types de fichiers et de programmes à cet endroit. C'est aussi dans cette liste que l'explorateur trouve les types de fichiers, on n'a donc pas le choix.

Nono.
Messages postés
214
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
14 mai 2004

Devons-nous créer obligatoirement à la racine de HKEY_CLASSES_ROOT ?
Juste pour savoir comme il y a plein de key
Messages postés
214
Date d'inscription
jeudi 21 mars 2002
Statut
Membre
Dernière intervention
14 mai 2004

Juste une petite question :

pq mettre '%1' dans la ligne
WriteString('',Application.ExeName+' %1');

je ne vois pas trop, pour un paramêtre éventuel ?
sinon bon sujet
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.