最終更新日 2024-09-25

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

概要

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

ダウンロード

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

動作環境

インストール

hmJSの意義

秀丸マクロファイルや「.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);

ライセンス