行の表示方法を切り替える
概要
「オプション」ダイアログを開いて「行の表示方法」の設定を切り替えます。
「オプション」ダイアログは自動的に閉じられて、「行の表示方法」の変更が適用されます。
- 非正規メソッド ExecuteCommandByID( 2177 ) で「オプション」ダイアログを開き、VBScript 経由で「行の表示方法(&D)」のアクセラレータ Alt+D と、ドロップダウンリストのアイテムを選択するための矢印キー ↑/↓ のいずれかと、設定の変更を確定するための Enter キーを送信します。
- マクロ本体となる JavaScript ファイルと、キーストロークを送信するための VBScript ファイル×2 が必要です。
- ※「マクロのカスタマイズ」に登録する必要があるのは、"行の表示方法を切り替える.js" ファイルだけです。
- ※ VBScript ファイル×2 は、JS ファイルと同じディレクトリに配置してください。
- ※ Windows Explorer の設定(フォルダオプション)でファイル拡張子「.VBS」を開くための「既定のプログラム」にテキストエディタなどを割りあてている場合、「行の表示方法」の切り替えはできません。
- ※ VBScript ファイル×2 のファイル名を変更する場合は、"行の表示方法を切り替える.js" 内のコードも書き替えなければなりません。
- ※ VBScript ファイル×2 には、500 ミリ秒の遅延を仕込んでありますが、環境によってはもっと長い遅延が必要になる場合もあります(セキュリティソフトによるスクリプトチェック/ブロックなどが障害となる場合もあります)。
- このマクロは、Mery.ini の「読み込み」と「書き換え」をします。
- ※ 素早く連続でマクロを実行すると、ファイルアクセスに失敗してエラーを引き起こす可能性があります。
- ※「読み込み」は、マクロ起動時点での「行の表示方法」を取得するためのものです。
- ※「書き込み」は、「オプション」ダイアログで「行の表示方法」の変更をして「OK」ボタンを押したさいに発生するものです(VBScript からの Enter キーの送信で自動的に「OK」を適用します)。
- 将来的に Mery 本体の仕様変更によって「オプション」ダイアログの「行の表示方法」の変更のためのキー操作も変更される可能性があります。
ダウンロード
- 行の表示方法を切り替える.js
- SendKeys( Alt+D, Up, Enter ).vbs
- SendKeys( Alt+D, Down, Enter ).vbs
ソースコード
行の表示方法を切り替える.js
#title = "行の表示方法を切り替える"
#tooltip = "論理行表示 と 物理行表示 を切り替える"
/**
* 「オプション」ダイアログを開いて「行の表示方法」の設定値を切り替える
*
* ※ 別途、キーストロークを送信するための VBScript ファイル×2 が必要
* (このマクロの実体ファイルと同じフォルダに配置すること)
*/
// 行の表示方法を取得
var lineColumnView = ( GetIniOptionNum( "LineColumnView" ) == 1 );
// このマクロの親フォルダのパス
var scriptFolderPath = ScriptFullName.slice( 0, - ScriptName.length );
// Sleep(500) と SendKeys() を仕込んだ VBS ファイルのパス
var upVbs = scriptFolderPath + "SendKeys( Alt+D, Up, Enter ).vbs";
var dnVbs = scriptFolderPath + "SendKeys( Alt+D, Down, Enter ).vbs";
var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
var WshShell = new ActiveXObject( "WScript.Shell" );
if ( Fso.FileExists( upVbs ) && Fso.FileExists( upVbs ) ) {
// VBS ファイルを呼び出す
WshShell.Run( "\"" + ( lineColumnView ? dnVbs : upVbs ) + "\"" );
// 「オプション」パネルを開く
editor.ExecuteCommandByID( MEID_TOOLS_OPTIONS = 2177 );
}
/**
* 【改造版】 組み込み関数 GetIniOption( key )
*/
function GetIniOptionNum( key ) {
// Mery.ini を探す
var iniPath = editor.FullName.replace( /\.exe$/i, ".ini" );
var Fso = new ActiveXObject( "Scripting.FileSystemObject" );
if ( ! Fso.FileExists( iniPath ) ) {
var iniName = /\\([^\\]+)\.exe$/.exec( editor.FullName )[1];
var WshShell = new ActiveXObject( "WScript.Shell" );
iniPath = WshShell.SpecialFolders( "APPDATA" )
+ "\\Mery\\" + iniName + ".ini";
}
// Mery.ini を読みこむ
var Adodb = new ActiveXObject( "ADODB.Stream" );
var adTypeText = 2, adReadAll = -1;
Adodb.Type = adTypeText, Adodb.Charset = "UTF-8";
Adodb.Open();
Adodb.LoadFromFile( iniPath );
var iniText = Adodb.ReadText( adReadAll );
Adodb.Close();
// ini から引数で指定したオプションの値を取得する
var reg = new RegExp( "^" + key + "=[^\\r\\n]*$", "gm" );
var value = iniText.match( reg )[0].substr( key.length + 1 );
iniText = "";
// Number 型で返す
return Number( value );
}
SendKeys( Alt+D, Up, Enter ).vbs
set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 500
'' Alt+D, Up, Enter
WshShell.SendKeys "%D{UP}~"
SendKeys( Alt+D, Down, Enter ).vbs
set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 500
'' Alt+D, Up, Enter
WshShell.SendKeys "%D{DOWN}~"
スポンサーリンク