hmJS (秀丸マクロ用 .NET & ActiveXObject ライブラリ via JavaScript)概要秀丸マクロを可能な限り「JavaScript(JScript 5.8)」で記述可能とするためのライブラリです。
ダウンロード更新日 2024/03/16
for 秀丸エディタ 32bit版 更新日 2024/03/16
for 秀丸エディタ 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); ライセンス
|