WinMergeでテキストファイルの比較をする際、文字コードを
直指定することで文字化けせずに表示することが可能だが
http://d.hatena.ne.jp/nakapon/20170315
WinMergeには文字コードをチェックして自動表示する機能はなく
また起動時オプションで事前に文字コードを指定することもできない
自分が使用するのは今のところSJIS、UTF-8、UTF-16LE(BOMなし)だけ
しかもUTF-16LEは今のところResourceHackerの
リソースファイル(.rc)のみでしか使用しない
WinMergeが自動判定しないのなら自前で切換できないかと調査
WinMergeの文字コードは例によってレジストリに保存されていた
場所はHKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settingsの
CodepageDefaultCustomValue
なのでレジストリファイルをあらかじめ用意し、WinMergeの
起動前に文字コードを拡張子から判定しレジストリを
取り込むことで対応することに
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings] "CodepageDefaultCustomValue"=dword:000004b0
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings] "CodepageDefaultCustomValue"=dword:0000fde9
//!*script
// WinMarge起動 Ver 3.0
// 使用エイリアス:なし
// ============================================================
// 変数宣言
var command = ''; // PPxコマンドワーク
var WSHObj = ''; // wshシェル
var mExt = ''; // 現窓のマークファイル拡張子
var cWinMrg = '"C:\\Program Files\\WinMerge\\WinMergeU.exe"';
//現窓のマークファイル拡張子取得
mExt = PPx.Extract('%T');
//現窓のマーク数チェック
switch (PPx.EntryMarkCount) {
case 2:
command = PPx.Extract('%#FDC');
PPx.Execute('%K"@^END"'); // マークを外す
break;
case 1:
command = PPx.Extract('%*extract(~"%%#/FDCM")'); //反対窓のマークファイルを取得(デリミタ/)
if ((command != '')
&& (command.indexOf('/') <= 0)) { //デリミタがなければマーク1つと判定
command = PPx.Extract('%FDCM')
+ ' '
+ command;
PPx.Execute('%K"@^END"'); // マークを外す
PPx.Execute('*execute ~,%%K"@^END"'); // マークを外す(反対窓)
} else {
command = '';
}
break;
// case 3: //現在WinMargeUは3ディレクトリ比較に対応していない
default:
command = '';
break;
}
command = cWinMrg + ' ' + command;
WSHObj = new ActiveXObject('WScript.Shell');
//文字コードセット
if (mExt.toLowerCase() == 'rc') {
mExt = PPx.Extract('reg import "C:\\Program Files\\WinMerge\\WinMerge 1200.reg"');
} else {
mExt = PPx.Extract('reg import "C:\\Program Files\\WinMerge\\WinMerge 65001.reg"');
}
WSHObj.Run(mExt,0,true);
//プログラム起動
WSHObj.Run(command,1,false); // false:終了待機しない
// 後処理
WSHObj = '';
PPx.Quit();