hmJS (秀丸マクロ用 .NET & ActiveXObject ライブラリ via JavaScript)

概要

秀丸マクロを可能な限り「JavaScript(JScript 5.8)」で記述可能とするためのライブラリです。

  • JavaScriptで秀丸マクロ

    JavaScript内で、秀丸マクロの実行が可能です。又、「JavaScript」⇔「秀丸マクロの各種変数やシンボル」が非常に手軽に行えるようになっています。

  • .NET Framework

    .NET Frameworkのライブラリが利用可能であるとともに、独自にC#等で制作した.dllも読み込み&利用可能です。

  • jsmode 互換関数搭載

    ごく一部の関数を除き、大部分のjsmodeの関数(hidemaruGlobalなどの関数)の記述をそのまま利用することが出来ます。

  • ActiveXObject

    デスクトップで利用される.jsファイルで良く利用される「ActiveXObject」も利用可能です。

    JScript JavaScript部分はJScriptとなります。(JScript.netではありません)
    JScriptのリファレンスについては日本語JScriptのリファレンス(一部未掲載)完全な英語リファレンス参照してください。

ダウンロード

Windowsのbit数ではなく、秀丸のビット数 Windows OSが64bit版か32bit版かは関係ありません。秀丸エディタが32bit版か64bit版かでダウンロード対象を選択してください。

動作環境

  • 秀丸

    秀丸エディタ ver8.73以上

  • Microsoft VC++ 再頒布可能パッケージ

    Visual Studio 2017 C++ ランタイム
    x86版をインストールしたことが無い方はインストールしてください。
    お手持ちのOSが64bitか32bitかには関わりなく、x86版のインストールが必要です。

  • Microsoft .NET

    .NET Framework 4.0以上。

  • 秀丸エディタ 64bit版について

    秀丸エディタ64bit版をご利用の方は、hmJS_x64.zipをダウンロードし、hmJS.dllを差し替えてください。
    (又、この場合は、Microsoft VC++ 再頒布可能パッケージは、64bit版をインストールしてください。)

  • 秀丸エディタ ストアアプリ版について

    hmJSはストアアプリ版でも利用することが出来ます。詳細は左メニューのストアアプリ版での利用などを参照してください。

インストール

  • hmJS.zipを解凍する。
  • 「hmJS.dllを秀丸エディタのディレクトリ内(hidemaru.exeと同じ場所)へと コピーする。
    (原則的には、hidemaru.exeと同じ場所である必要があります。これは.NET FrameWorkのdllを動作させる仕組みに拠るためです。)

hmJSの意義

  • 古い資産・新しい資産・秀丸マクロを...

    • 「WSH」時代の既存のJScript(=拡張子.jsで実行するファイル)古い資産の流用
    • 32bit/64bitを問わない、.NET やマネージアセンブリ による「新しい資産」
    • そして、秀丸マクロのみが可能な、「秀丸自身の独自の機能」
  • JavaScriptで繋げる!

    これらを、スクリプト言語の経験者数としては、圧倒的な母数を誇る「JavaScript」で、
    シームレスに取り扱えるようにしたもの、それがhmJSとなります。

    PICTURE

秀丸マクロファイルや「.js」ファイルの文字コード

hmJS.dllを利用する秀丸マクロファイルや、.jsファイルは、全て「utf8」の「BOM付き」を前提としています。
但し、他の文字コードでのファイルも扱うことが可能です。

詳細は左メニューより、「秀丸マクロから利用するhmJSの関数」の「DoFile」や「SetCodePage」の項目を参照してください。

ソース例① (jsmode相当関数が大部分使える)

#JS = loaddll( hidemarudir + @"\hmJS.dll" );
 
#_ = dllfuncw( #JS, "DoString", R"JS(

message("OK");

moveto(3,4);

)JS"
);
 
freedll(#JS);

ソース例② (.NET Frameworkがシームレスに使える)

#JS = loaddll( hidemarudir + @"\hmJS.dll" );

#_ = dllfuncw( #JS, "DoString", R"JS(

// 対象のテキストは、アスキーなのか? 
function IsTextAscii(text) {

    // sjisエンコードインスタンス
    var sjis_enc = clr.System.Text.Encoding.GetEncoding("Shift_JIS");

    // バイト数
    var byte_count = sjis_enc.GetByteCount(text);

    // 文字数
    var char_count = text.length

    // バイト数と文字数が異なる。アウト
    if (byte_count != char_count) {
        console.log("バイト数と文字数が異なる");
        return false;
    }


    // 半角カタカナの定義(若干あれだがまぁ常識内で)
    var rgxHankakuKatakana = /[\uFF66-\uFF9F]/;

    // 半角カタカナが混じってるか
    if ( rgxHankakuKatakana.test(text) ) {
        console.log("半角カタカナが混じってる");
        return false;
    }

    return true;
}

// 今編集中のテキスト全体は、アスキーなのか? 
var b = IsTextAscii(hm.Edit.TotalText);
console.log( b );

)JS"
);

freedll(#JS);

ソース例③ (.NET Frameworkの比較的複雑なものもシームレスに使える)

#JS = loaddll( hidemarudir + @"\hmJS.dll" );

#_ = dllfuncw( #JS, "DoString", R"(

// .NETアセンブリの読み込みが可能
// "System.Windows.Forms"だけでも問題はない。
var addlib = host.lib("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

var TForms = addlib.System.Windows.Forms;
var TForm = TForms.Form;
var frm= new TForm();
frm.Text = "こんにちわ";
var iClicked = 0;


var TButton = TForms.Button;
var btn = new TButton();
btn.Text = "クリック";
btn.Left = 16;
btn.Top = 16;

// イベントハンドラも作れる
btn.Click.connect(function (sender, args) {
    iClicked++;

    // デバッグモニター用の関数
    hm.OutputPane.Output("ボタンが押されたよ!!\r\n");
    TForms.MessageBox.Show(iClicked.toString());

    // 秀丸マクロの「変数」とのやりとりも自由自在
    var filename2 = hm.Macro.Var('filename2');

    // .jsのWSHではよく利用されるActiveXObjectの記述方法をもそのままに
    var WSHShell = new ActiveXObject("WScript.Shell");
    WSHShell.Popup(filename2, 0, "今秀丸で開いているファイル", 1);

    // 秀丸マクロの「変数」とのやりとりも自由自在
    hm.Macro.Var('$count', iClicked.toString());

    // JavaScriptの中から秀丸マクロを一連のコマンドとして実行することも出来る。
    // ヒアドキュメントに似た仕組みが搭載されている。
    hm.Macro.Eval( function() { /*
        // アウトプット枠へ出力。原始的な秀丸マクロを使った方法
        #OP = loaddll("HmOutputPane.dll");
        #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $count);
        freedll(#OP);
    */ } );
});

frm.Controls.Add(btn);
frm.ShowDialog();
)");

// JavaScriptから秀丸マクロへと書き込まれた変数は、当然秀丸マクロからも見える。
message("ボタンは" + $count + "回クリックされました");

freedll(#JS);

ライセンス

  • hmJS

    hmJSは、Apache License 2.0となります。

    ソースの場所

    • Githubにソースがあります。
  • ClearScript

    hmJSはInternalアセンブリとしてClearScriptが利用されています。
    ClearScriptはMITイセンスとなります。

    詳細は、https://github.com/microsoft/ClearScriptを見てください。