File: FileShellExtension.cs

package info (click to toggle)
xsddiagram 1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 2,188 kB
  • sloc: cs: 9,274; sh: 42; makefile: 26; xml: 3
file content (76 lines) | stat: -rw-r--r-- 2,399 bytes parent folder | download | duplicates (4)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//    XSDDiagram - A XML Schema Definition file viewer
//    Copyright (C) 2006-2011  Regis COSNIER
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program; if not, write to the Free Software
//    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

using System;
using System.Diagnostics;
using System.Windows.Forms;
using Microsoft.Win32;

namespace XSDDiagram
{
	static class FileShellExtension
	{
		public static void Register(string fileType,
			   string shellKeyName, string menuText, string menuCommand)
		{
			// create path to registry location
			string regPath = string.Format(@"{0}\shell\{1}",
										   fileType, shellKeyName);

			try
			{
				// add context menu to the registry
				using (RegistryKey key =
					   Registry.ClassesRoot.CreateSubKey(regPath))
				{
					key.SetValue(null, menuText);
				}

				// add command that is invoked to the registry
				using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(
					string.Format(@"{0}\command", regPath)))
				{
					key.SetValue(null, menuCommand);
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error while registring: " + ex.Message + "\r\nYou may have to run this application as administrator!");
			}
		}

		public static void Unregister(string fileType, string shellKeyName)
		{
			Debug.Assert(!string.IsNullOrEmpty(fileType) &&
				!string.IsNullOrEmpty(shellKeyName));

			// path to the registry location
			string regPath = string.Format(@"{0}\shell\{1}",
										   fileType, shellKeyName);

			try
			{
				// remove context menu from the registry
				Registry.ClassesRoot.DeleteSubKeyTree(regPath);
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error while unregistring: " + ex.Message);
			}
		}
	}
}