Cette article est une adaptation en C# de l'article (http://www.c2i.fr/code.aspx?IDCode=420) de Richard Clarck (http://www.c2i.fr/).
Comme le titre l'indique, le but est d'associer une extension de fichier à programme qui sera utilisé pour consulter/modifier les documents ayant cette extension. Il se compose principalement des méthodes suivantes :
- RegisterShellExtension
- UnRegisterShellExtension
- CheckRegisterShellExtension
public const Int32 SHCNF_IDLIST = 0x0;
[DllImport("shell32.dll")]
public static extern void SHChangeNotify(Int32 wEventId, UInt32 uFlags, UInt32 dwItem1, UInt32 dwItem2);
///
/// Enregistre l'extension de fichier XDF comme devant être ouvert par le programme ContractViewer
///
private static void RegisterShellExtension()
{
try
{
// Association entre l'extesion et le programme
RegistryKey oRegKey = Registry.ClassesRoot;
oRegKey = oRegKey.CreateSubKey(".xdf", RegistryKeyPermissionCheck.ReadWriteSubTree);
oRegKey.SetValue("", "ContractViewer Document");
oRegKey.Close();
// Extension du shell pour le programme ContractViewer
oRegKey = Registry.ClassesRoot;
RegistryKey oRegKeyOpenCommand;
oRegKeyOpenCommand = oRegKey.CreateSubKey(@"ContractViewer Document\shell\open\command", RegistryKeyPermissionCheck.ReadWriteSubTree);
oRegKeyOpenCommand.SetValue("", Application.ExecutablePath + " %1");
oRegKeyOpenCommand.Close();
// Association icone pour extension
RegistryKey oRegKeyDefaultIcon;
oRegKeyDefaultIcon = oRegKey.CreateSubKey(@"ContractViewer Document\DefaultIcon", RegistryKeyPermissionCheck.ReadWriteSubTree);
String sICO = Application.StartupPath + @"\app.ico";
oRegKeyDefaultIcon.SetValue("", sICO);
oRegKeyDefaultIcon.Close();
oRegKey.Close();
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
}
catch
{
}
}
///
/// Supprime l'extension de fichier XDF comme devant être ouvert par le programme ContractViewer
///
private static void UnRegisterShellExtension()
{
if (CheckRegisterShellExtension() == false) return; // Rien à supprimer
RegistryKey oRegKey;
try
{
oRegKey = Registry.ClassesRoot;
oRegKey.DeleteSubKeyTree(".xdf");
oRegKey.Close();
}
catch
{
}
try
{
oRegKey = Registry.ClassesRoot;
oRegKey.DeleteSubKeyTree(@"ContractViewer Document");
oRegKey.Close();
}
catch
{
}
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
}
///
/// Verifie si la ShellExtension de ContractViewer est en place.
///
///
private static bool CheckRegisterShellExtension()
{
RegistryKey oRegKey = Registry.ClassesRoot;
oRegKey = oRegKey.OpenSubKey(".xdf",false);
if (oRegKey == null) return false;
oRegKey.Close();
oRegKey = Registry.ClassesRoot;
oRegKey = oRegKey.OpenSubKey("ContractViewer Document", false);
if (oRegKey == null) return false;
oRegKey.Close();
return true;
}
Aucun commentaire:
Enregistrer un commentaire