using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;


namespace ChangeExtDefaultApp
{
	class DefaultAppConfig
	{
		//関連付ける拡張子
		public string extension;

		//実行するコマンドライン
		public string commandline;

		//ファイルタイプ名
		public string fileType;

		//説明（「ファイルの種類」として表示される）(optional)
		public string description;

		//動詞
		public string verb;

		//動詞の説明（エクスプローラのコンテキストメニューに表示される）(optional)
		public string verb_description;

		//アイコンのパスとインデックス
		public string iconPath;
		public int iconIndex = 0;
	}

	class ExtDefaultApp
	{
		public void Execute(DefaultAppConfig config)
		{
			//ファイルタイプを登録
			RegisterFileType(config.fileType, config.extension);

			RegistryKey subkey_root = Registry.ClassesRoot.CreateSubKey(config.fileType);
			RegistryKey subkey_shell = subkey_root.CreateSubKey("shell\\" + config.verb);
			RegistryKey subkey_cmd = subkey_shell.CreateSubKey("command");

			//ファイルタイプとその説明を登録
			if(config.description != "")
				subkey_root.SetValue("", config.description);

			//動詞とその説明を登録
			if(config.verb_description != "")
				subkey_shell.SetValue("", config.verb_description);

			//コマンドラインを登録
			subkey_cmd.SetValue("", config.commandline);

			subkey_cmd.Close();

			//アイコンの登録
			RegistryKey subkey_icon = Registry.ClassesRoot.CreateSubKey(config.fileType + "\\DefaultIcon");
			subkey_icon.SetValue("", config.iconPath + "," + config.iconIndex.ToString());

			subkey_icon.Close();
		}

		private void RegisterFileType(string fileType, string extension)
		{
			RegistryKey regkey = Registry.ClassesRoot.CreateSubKey(extension);
			regkey.SetValue("", fileType);
			regkey.Close();
		}
	}
}
