行の表示方法を切り替える

提供: MeryWiki
2019年8月24日 (土) 03:01時点におけるSukemaru (トーク | 投稿記録)による版 (ページを新規作成)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

「オプション」ダイアログを開いて「行の表示方法」の設定を切り替えます。
「オプション」ダイアログは自動的に閉じられて、「行の表示方法」の変更が適用されます。


  • 非正規メソッド 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 本体の仕様変更によって「オプション」ダイアログの「行の表示方法」の変更のためのキー操作も変更される可能性があります。


ダウンロード

ファイル:行の表示方法を切り替える.zip

  • 行の表示方法を切り替える.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}~"
スポンサーリンク