Mery 関連付け
ナビゲーションに移動
検索に移動
概要[編集]
列挙した拡張子を Mery に関連付けるための .reg ファイルコードを生成します。
Mery2 移行時に
- 関連付けがおかしい
- 半角スペースを含むファイルが開けない
という方はお試しください。
注意事項[編集]
このマクロが生成するコードはレジストリを操作するためのコードです。
他の関連付け変更ツールに対して特別リスクが高いとは思いませんが、 レジストリを操作することによるリスクはご承知ください。
不安な方は Kuro さんが紹介されていたanterixなどをお使いください。
動作環境[編集]
- Mery: Ver 2.0.12.4050
- OS: Windows XP SP3、Windows 7 SP1 (64bit)
使用方法[編集]
1. 関連付けたい拡張子をエディタ上に列挙する。
例:
txt c cpp h
2. マクロを実行する。
3. 2 つの『無題』が作成される。直後にアクティブになっている方が「登録用」のコード、もう一方が「登録解除用」のコード。
4. それぞれを適当なファイル(ただし拡張子は「.reg」)に保存し、「登録用」のコードをエクスプローラー上で実行。
⇒関連付けされる
※ 関連付けが不要になった場合は「登録解除用」のコードを実行。
⇒「登録用」コード実行前の関連付けに戻る
ソースコード[編集]
// -----------------------------------------------------------------------------
// CreateAssociationRegister.js
//
// 列挙されている拡張子を Mery に関連付けるための .reg ファイルのコードを
// 生成します。
// テキストは登録用と登録解除用の 2 つが生成されます。
// 登録時には対となる登録解除用のコードを必ず保存しておいてください。
//
// 生成されたコードを .reg ファイルに保存して実行することで関連付けされます。
// レジストリを操作するため、その危険性は十分にご承知の上お使いください。
//
// このプログラムは以下のライセンスに従って公開されます。
// クリエイティブ・コモンズ
// http://creativecommons.org/licenses/by/2.1/jp/
//
// このプログラムには以下のコードを含んでいます。
// "jscriptから WMIを使ってレジストリキー/値列挙"
// (C) tckz
// http://passing.breeze.cc/mt/archives/2009/07/jscript-wmi.html
//
// (C) ks
// http://merysmacro.seesaa.net/
// -----------------------------------------------------------------------------
var Registry = function () {
this.initialize.apply(this, arguments);
};
Registry.prototype = {
initialize: function(computer) {
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var server = locator.ConnectServer(computer, "root\\default");
this.stdregprov = server.Get("StdRegProv");
this.HKCR = 0x80000000; // HKEY_CLASSES_ROOT
this.HKCU = 0x80000001; // HKEY_CURRENT_USER
},
do_method: function(method_name, hkey, key, value_name) {
var in_param = this.stdregprov.Methods_.Item(method_name).InParameters.SpawnInstance_();
in_param.hDefKey = hkey;
in_param.sSubKeyName = key;
if (value_name != null) {
in_param.sValueName = value_name;
}
var out = this.stdregprov.ExecMethod_(method_name, in_param);
return out;
},
EnumKey: function(hkey, key) {
var out_param = this.do_method("EnumKey", hkey, key);
var names = [];
if (out_param.sNames != null) {
names = out_param.sNames.toArray();
}
return names;
},
GetStringValue: function(hkey, key, name) {
// REG_SZ
var out_param = this.do_method("GetStringValue", hkey, key, name);
// 値が存在しない場合null
return out_param.sValue;
}
};
var reg = new Registry(".");
var exts = Document.Text.split("\n");
var regText = "Windows Registry Editor Version 5.00\n\n";
var unregText = regText;
// 説明書き
regText += '; Mery の関連付けを登録します。\n\n';
unregText += '; Mery の関連付けを解除します。\n\n';
// Mery 用の ProgID を登録
var progID = "Mery.Document";
var subKey = progID + "\\shell\\open\\command";
var value = reg.GetStringValue(reg.HKCR, progID, "");
if (value == null) {
regText += '; ProgID を登録\n' +
'[HKEY_CLASSES_ROOT\\'+ progID +']\n' +
'[HKEY_CLASSES_ROOT\\'+ progID +'\\shell]\n' +
'[HKEY_CLASSES_ROOT\\'+ progID +'\\shell\\open]\n' +
'[HKEY_CLASSES_ROOT\\'+ progID +'\\shell\\open\\command]\n' +
'@="\\"' + Editor.FullName.replace(/\\/g, '\\\\') + '\\" \\"%1\\""\n\n';
unregText += '; ProgID を戻す\n' +
'[-HKEY_CLASSES_ROOT\\'+ progID+']\n\n';
} else {
// 既に設定済みで異なる場合は退避して登録
value = reg.GetStringValue(reg.HKCR, subKey, "");
if (value !== Editor.FullName.replace(/\\/g, '\\\\')) {
regText += '; ProgID を登録\n' +
'@="\\"' + Editor.FullName.replace(/\\/g, '\\\\') + '\\" \\"%1\\""\n\n';
unregText +='; ProgID を戻す\n' +
'[HKEY_CLASSES_ROOT\\' + subKey + ']\n' +
'@="' + value.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"\n\n';
}
}
// 関連付けの登録
regText += '; 関連付けを登録\n';
unregText +='; 関連付けを戻す\n';
for (var i=0; i<exts.length; i++ ){
if( !exts[i] ){
continue;
}
var ext = "." + exts[i];
// 拡張子の登録
value = reg.GetStringValue(reg.HKCR, ext, "");
if (value == null) {
regText += '[HKEY_CLASSES_ROOT\\' + ext + ']\n' +
'@="' + progID + '"\n\n';
unregText += '[-HKEY_CLASSES_ROOT\\' + ext + ']\n\n';
} else {
if (value !== progID) {
regText += '[HKEY_CLASSES_ROOT\\' + ext + ']\n' +
'@="' + progID + '"\n\n';
unregText += '[HKEY_CLASSES_ROOT\\' + ext + ']\n' +
'@="' + value.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"\n\n';
}
}
// 関連付けの登録
subKey = 'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\' + ext;
value = reg.EnumKey(reg.HKCU, subKey);
if (value != null) {
subKey += '\\UserChoice';
value = reg.GetStringValue(reg.HKCU, subKey, 'Progid');
if (value != null && value != progID) {
regText += '[-HKEY_CURRENT_USER\\' + subKey + ']\n\n';
unregText +='[HKEY_CURRENT_USER\\' + subKey + ']\n' +
'"Progid"="' + value.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"\n\n';
}
}
}
// それぞれドキュメント化
Editor.NewFile();
var doc = Editor.Documents.Item(Editor.Documents.Count-1);
doc.Text = regText;
doc.Encoding = meEncodingShiftJIS;
doc.Saved = true;
var regDoc = doc;
Editor.NewFile();
doc = Editor.Documents.Item(Editor.Documents.Count-1);
doc.Text = unregText;
doc.Encoding = meEncodingShiftJIS;
doc.Saved = true;
regDoc.Activate();
ご意見・ご要望[編集]
何かありましたら、右の [編集] から追記してください。対応するもかしれません。
スポンサーリンク