Title: マクロで使うDLL

top秀丸エディタマクロ

update : 2017/04/22 (Sat)

1 目次

DLLの64bit対応について

DLL

色々なDLLの使い方

変換モジュール

COMコンポーネント

WSH

2 DLLの64bit対応について

マクロを使用するに場合には、32bit/64bitの違いを気にする必要はありませんが、 外部DLLを使用する場合は、注意が必要です。

基本的には、64bit アプリケーションで、32bit DLLを使用する事はできませんが、 64bit版秀丸エディタには、32bit 外部DLL使用するためのオプションが存在します。

64bit設定画面

このオプションをONにすることで、64bit秀丸エディタ上で、32bit 外部DLLを使うことができますが、 32bit 外部DLLで、hmjre.dllを使用する場合は問題があります。

64bit 秀丸エディタに付属するのは、64bit hmjre.dllです。 32bit DLLから、64bit DLLのロードはできない為、32bit 外部DLLで、64bit 秀丸エディタ本体と同じ場所にある、 64bit hmjre.dllをロードしようとしても、必ず失敗します。

hmjre.dllを使用可能な外部DLLには、以下のDLL等があります。

オプションを「ON」にしても、64bit秀丸エディタから、上記 32bit 外部DLLを経由し、hmjre.dllを使用する場合は、 必ず失敗することになります。 (CompleteX、祝鳥では、hmjre.dllを読込に失敗した等のメッセージが表示される。)

解決方法としては、

  1. 外部DLLを、32bit版ではなく、64bit版を使用する。(全部64bit版を使う。)
  2. 64bit 秀丸エディタではなく、32bit 秀丸エディタを使用する。(64bit 秀丸エディタを使わない。全部32bit版を使う。)
  3. 別途、32bit版hmjre.dll を用意し、マクロにある、hmjre.dllをロードする箇所を、修正する。

等があります。

説明追加

ヘルプ(動作環境− 64bit版) にも説明がありますが、64bit秀丸上で32bitDLL使うには、かなり強引な方法をとっています。 その為、オプションを有効にしても、DLLによっては正常に動作しない場合もあります。

2.1 64bit hmjre.dllを使う際の注意

C/C++など、プログラミング言語から、64bit hmjre.dllを使う場合の注意点。

2.2 64bit版macrodll.dllmacrodll-x64

祝鳥に含まれている、「macrodll.dll」のx64版です。作者 あべのりゆき氏 の許可を得て公開しています。

上記URLで、公開されているソースを元に、Visual Studio Community 2015 with Update 3 でコンパイルしています。

最新版(祝鳥 1.00):macrodll.dll(x64)Ver.1.00 2016/10/27版

旧 版(祝鳥 0.89r1):macrodll.dll(x64)Ver.0.89r1 2015/11/29版

2.3 64bit版田楽DLLdengaku-x64

「田楽DLL」のx64版です。作者 杉浦まさき氏 の許可を得て公開しています。

上記URLで、公開されているソースを元に、VCEE2010SP1+Windows SDKでコンパイルしています。

田楽DLL(x64)Ver.3.22.0 2013/02/18

2013/02/17 Ver.3.22.0
  • x64対応のみ
2012/03/07 Ver.3.21.4
  • *.sph関連修正(UNBYPASS.Hを参考に修正)
  • グローバル変数操作系の関数で、秀丸ごとクラッシュするバグの修正(x64版のみ) (colder氏からの連絡による。)
2011/10/23 Ver.3.21.3
  • *.sph修正(構造体変更)
2011/10/16 Ver.3.21.2
  • *.sphに対応
2011/10/08 Ver.3.21.1
  • bregonig.dll Ver.3.00βを使用するように変更
2011/10/04 Ver.3.21.0
  • x64対応のみ

3 DLL

3.1 ht_tools.dllht_tools

秀丸エディタ/秀丸メールで使用するマクロ拡張用DLLです。 マクロで(簡単には)実現できない(事もない?)各種機能(?)を提供します。

動作環境

詳細な説明はDLLの解説(Version 1.24.00b2)をみて下さい。

2017/04/21 Version 1.24.00β2
  • 機能追加
  • 修正
    editorconfig-core-c を更新(master branch 2017.04.02)
    editorconfig-core-c で使用しているPCREを更新(8.39 --> 8.40)
  • その他
2016/11/03 Version 1.24.00β1
  • 機能追加
  • 修正
    editorconfig-core-c を更新(master branch 2016.10.26)
  • その他

2016/08/01 Version 1.23.00b(正式版)
  • 機能追加
  • 修正
  • その他
    ドキュメント修正。 Windows10(x64)上の、rdtool がうまく動いてなかった。
2016/07/30 Version 1.23.00a(正式版)
  • 機能追加
    UrlEncodeW関数、IsUTF16LE関数を追加。
    iniファイル関連のunicode版関数を追加。
    ReadSectionKeysW、ExistKeyW、GetKeyValueW、GetIniKeyDataW、GetIniKeyW、 GetIniKeyValueW、NextKeyW、ReadSectionNamesW、ExistSectionW、GetSectionNameW、 GetSectionW、NextSectionW
    WrFileLine、EditorConfigGetPcreVersionStr関数を追加。
  • 修正
    editorconfig-core-c で使用しているPCREを更新(8.39)
    WriteIniStrW、WriteIniNumWで、UTF-16LE以外の場合は、失敗するように修正
  • その他
    ドキュメント修正。 mecabのリンク先を変更。
2014/10/18 Version 1.22.00(正式版)
  • 機能追加
    EditorConfig関連の関数を追加。
    EditorConfigExecute、 EditorConfigErrorMessage、 EditorConfigGetKey、 EditorConfigGetValue、 EditorConfigClear、 EditorConfigGetVersionStr

    hunspell関連の関数を追加。
    hunspell_GetVersion、 hunspell_Get_Dic_Encoding

    INIファイルのunicode関数の追加
    WriteIniNumW、GetIniNumW

  • 修正
    WriteIniStrWを変更。引数のチェック追加および、 iniファイルが存在しない場合、UTF-16LEの空のファイルを作成するようにした。
    SetTimeでセットした日時が、TimeFormatに反映されていなかったバグの修正。
  • その他
2013/06/23 Version 1.21.00(正式版)
  • 機能追加
    hunspell関連の関数(unicode版)を追加。
    hunspell_SpellW、 hunspell_SuggestW、 hunspell_SuggestListW、 hunspell_AddW、 hunspell_RemoveW
  • 修正
  • その他
2013/05/28 Version 1.20.00a(正式版)
  • 機能追加
  • 修正
    ドキュメントの誤字等修正のみ
  • その他
2013/05/06 Version 1.20.00
  • 機能追加
    以下の関数を追加。
    SetUTF8ConvertString、SetUTF16ConvertString、 GetResult、GetResultW、 WriteIniStrW、GetIniStrW、 hunspell_load、 hunspell_free、 hunspell_Spell、 hunspell_Suggest、 hunspell_SuggestList、 hunspell_getmodulefilename、 hunspell_AddDictionary、 hunspell_Add、 hunspell_Remove、 hunspell_errormessage、 GetWindowRect_Top、 GetWindowRect_Bottom、 GetWindowRect_Left、 GetWindowRect_Right、 ScreenToClient_X、 ScreenToClient_Y
  • 修正
    • 文字関数の最大バッファサイズを1Mへ拡大。
    • メモリ確保部分を修正。
    • DLL 読み込みに関する脆弱性に対応(Windows XP SP1 以降のみ対応)
    • NextActiveWindowの関数名が間違っていたのを修正。 (NextAvtiveWindow → NextActiveWindow)
    • InStr系関数で、全角文字を使用時に、検索文字があるのにマッチしない場合があるのを修正(完全ではないが)

      例)InStrEx(0,"Hidemaru Editor","MARU", 1) 
        がマッチしない場合があった。
    • SetWindowStateの戻り値の説明が間違っていたので修正。
  • その他
    • コンパイラを、Visual C++ 2008 Express Edition SP1から、Visual C++ 2010 Express Edition SP1へ 変更。

目次へ

3.2 hmonig.dllhmonig

hmonig.dll(命名IKKI氏)は秀丸エディタ/秀丸メールで使用する、hmjre.dll 互換の正規表現検索DLLです。 Ver.0.5.9 より、 正規表現エンジンに鬼雲(Ver.5.10.0以降)を使用しています。

鬼車の基本的な正規表現については、鬼車のドキュメント を参照してください。 hmjre.dll の互換性から、"\<"、"\>"は使用可能です。

鬼雲で拡張された正規表現については、鬼雲のドキュメントを参照してください。

後方参照(タグ参照)は、\nの形式は、1〜9までが指定可能です。 \k<n>、\k'n'も使用可能で、10以上も指定可能ですが、秀丸エディタの置換で、16以上は使用できません。(秀丸エディタ/hmjre.dllの制限)

hmonig.dllは、

の、2種類がありますが、Shift_JIS版は開発終了とし更新しません。今後はUnicode対応版のみになります。

3.2.1 Unicode対応版

Unicode(秀丸独自コード)対応版です。 DLLの内部で、Unicode(UTF16-LE)に変換し、処理を行っています。 その為、hmjre.dllと比較し、メモリ消費量は多くなり、遅くなると思います。

"\w"の扱いが変更になっていて、ASCIIコード範囲内のみマッチします。 (全角文字にはマッチしません。) その影響で、単語境界の認識も変更になっています。

Ver.0.5.9.0より、正規表現エンジンを鬼車(Ver.5.9.2ベース)から、鬼雲(Ver.5.12.0〜)へ変更。


正式版

2017/01/17 Ver.0.7.7.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.6.1.0)
2017/01/29 Ver.0.7.8.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.6.1.1)

Unicode処理になることによる違い
  • \x{...}で指定するコードポイントは、Unicodeで指定する必要がある。
  • Character Propertyが、全て使用可能。(\p{Alnum}等)
  • Shift_JISで漢字の範囲を示す、[亜-K]という表現では、漢字のみを対象にす ることはできない。\p{Han} を使用してください。
オリジナルの鬼車との違い
  • Unicodeで処理を行っていますが、\d、\s、\wは、ASCIIの範囲内のみ対象となります。 (\D、\S、\Wも同様に変更になります。) 全角文字等を対象に含めたい場合は、Character Property を使用してください。 (\p{Digit}で、全角を含む数字にマッチします。) Ver.0.5.9.0 以降から、正規表現の中に、(?a)、(?u) オプションが指定でき、 マッチする内容を切り替えることが可能です。

    (?a):\w, \d, \s, POSIXブラケットは、非ASCII文字にマッチしない。
    (?u):\w, \d, \s, POSIXブラケットは、非ASCII文字にマッチする。
Unicode以外での違い
  • hmjre.dllとの互換性から、ブラケット「[]」内では、「\uxxxx」、「\u{xx}」が使用できますが、 なるべく\x{...}を使用してください。 (\uxxxxを指定する場合は、必ず4桁指定してください。)
  • \wの扱いが変更になっていることに伴い、単語境界の認識も変更になっています。
hmjre.dll との違い
  • 正規表現が多少異なります。 前方一致指定/前方不一致指定では、固定長のみ有効です。
  • hmjre.dll と同様の、マクロ用関数も使用できます。
    • 全ての関数は実装していません。
    • Shift_JIS 範囲外の Unicode 文字を含む場合は、dllfuncw/dllfuncstrw を使用してください。 従来の dllfunc/dllfuncstr では、Shift_JIS 範囲外の Unicode 文字は検索できません。
BRegIf.dll + bregonig.dll との違い
  • hmonig.dll 単独で動作する。 (鬼車(鬼雲)を静的リンク あいまい検索を行うには、hmjre.dll が必要です。)
  • 鬼車(鬼雲)の正規表現はデフォルト(ruby)の仕様になっている。
  • BRegIf.dll の独自拡張のうち、"!"(パターンの否定)のみ使用可能。
  • BRegIf.dll 独自のマクロ関数は、実装していない。
  • \wは、英数字, "_" のみにマッチします。
  • bregonig.dll の独自拡張は使用できません。
マクロ用関数の注意

GetLast〜の関数は、直前に実行した関数により、戻り値の単位が異なるので注意してください。

  • 通常関数の場合は、バイト単位。
  • ワイド文字対応関数は、文字単位。

ワイド文字を扱う場合は、wcs系の関数を使用してください。

3.2.2 Shift_JIS版

開発終了

BRegIf.dll+bregonig.dll(Shift_JIS専用)相当です。

3.2.2.1 変更履歴(hmonig.dll)
SHIFT_JIS版
2009/07/12 Ver.0.1.0
  • BRegIf.dll+bregonig.dll相当となったので、テスト目的で公開。
2009/07/25 Ver.0.1.1
  • ヒットした扱いにするタグ指定が正常に動作していないバグの修正
    • 通常の検索 :最後のタグが指定できない。
    • マクロ用関数:指定が有効にならない。
2009/11/23 Ver.0.1.1(64bitのみ)
  • JRE2構造体のサイズが違っていたので修正
2009/12/06 Ver.0.1.2
  • 正規表現コンパイルに失敗した場合、クラッシュするバグの修正
2009/12/25 Ver.0.1.3
  • 鬼車で、(a){2}z が、"aaz"にマッチしないバグの修正
    • http://twitter.com/nalsh/statuses/6888780175
    • http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26143
2010/01/11 Ver.0.1.4
  • 鬼車をVer.5.9.2に変更
2010/01/13 Ver.0.1.4.1
  • (x64のみ) 鬼車Ver.5.9.2を更新 x64で、「fail to memory allocation」が出る場合があるので対処
2010/01/14 Ver.0.1.4.2
  • 鬼車Ver.5.9.2を更新(x86/x64のソースを統合)
2010/01/30 Ver.0.1.5
  • エラーメッセージ取得時に、クラッシュする場合があるを修正。
2010/02/06 Ver.0.1.6
  • 秀丸エディタVer.8対応 マクロ関数のバッファを固定から可変へ変更
2010/07/10 Ver.0.1.7
  • マクロ用関数の修正
    GetLastMatchLength、GetLastMatchTagLengthで、文字列の先頭にマッチした場合、 戻り値が-2になってしまうバグの修正(colder氏からの連絡による。)
2010/07/15 Ver.0.1.8
  • 鬼車
    http://redmine.ruby-lang.org/issues/show/3568
    Bug #3568: /(?<=a).*b/ =~ "aab" doesn't match
unicode対応版版
2010/01/28 Ver.0.2.0
  • 秀丸独自コード対応
2010/01/30
  • エラーメッセージ取得時に、クラッシュする場合があるので対処。
2010/01/31
  • "\f"使用時に正常に動作しないので対処。
2010/02/03
  • バイト−文字変換部で、データ終端の認識に失敗するバグの修正。
2010/02/06
  • マクロ用関数のワイド文字バージョンを追加。
2010/02/09
  • \dが全角の数字にもマッチしてしまうので修正
    Revision 24544
    鬼車の仕様だが、rubyで修正パッチがあるので、適応。
2010/02/10
  • \d、\sへの対応を、一度無効する。 \dの対応もうまくいっていない。何故か漢字にもマッチする。
2010/02/11
  • パッチ適応後に、\d、\w、\sが、誤判定する件に対処。
2010/02/12 Ver.0.5.0
  • バージョン番号のみ変更。 秀丸独自コード未対応版とのバージョン番号を離すだけ。
2010/02/17 Ver.0.5.1
  • ソースコードの整理のみ
2010/02/18
  • マッチしなかった場合、マッチ位置と長さを、明示的に0(zero)を設定するようにした。
2010/02/25
  • マクロ用関数で、"\uxxxx"を扱えるようにした。
  • 検索ダイアログを開いたまま、ウィンドウの切替を行うと、エラーとなる場合があるので対処。
2010/02/26
  • Jre2Compileのエラー処理部を変更
  • 鬼車(Unicode)
    "。\Z"が、"です。\n"にマッチしないので、修正。 場当たり的対処なので、そのうち破綻するかも。
2010/02/27
  • 鬼車(Unicode)
    "\d\Z"が、"2\n"にマッチしないので、修正。
2010/03/02
  • 鬼車(Unicode)
    "\w\db\Z"が、"a2b\n"にマッチしないので、修正。
2010/03/03 Ver.0.5.1.1
  • 鬼車(Unicode)
    \s、\d、\wの変更を、rubyの変更をベースに、Unicodeのみ、別途テーブルを定義することで対応。 (場当たり的対処を削除)
2010/03/05 Ver.0.5.2.0
  • Jre2GetMatchInfo_Mainで、対象文字列が""の場合は、 falseを返していたが、空文字にマッチする正規表現 もあるので、チェックを行わないようにした。
2010/03/06 Ver.0.5.3.0
  • マクロ用関数

    FindRegular〜で、-2を返さないといけないのに、0を返していたので修正。
    メモリ確保に失敗した場合、戻り値が間違っていた。
  • マクロ用関数
    通常関数と、ワイド文字対応関数で、GetLast〜関数の戻り値が異なっていたので、あわせる。 検索でマッチしなかった場合の戻り値が異なっていた。(-1を返す)
2010/03/12 Ver.0.5.4.0
  • (?\tag-number) ヒットした扱いにするタグ指定の動作が、おかしかったので修正。(マクロ関数も修正) タグ指定ありで、タグに対するマッチ範囲がない場合、Trueを返していたので、修正(falseを返す。)
2010/03/14
  • マクロ用関数でクラッシュするバグの修正。
2010/03/16 Ver.0.5.5.0
  • 各関数のメモリ確保部分を見直し。
  • タグ取得関数で、マッチしていないタグを指定した場合に、明示的にマッチしていない状態を返すよう変更。
  • 動的にメモリを確保している箇所があったが、動的である必要がないので、変更。
2010/06/05 Ver.0.5.6.0
  • hmjre.dllを使用し、あいまい検索を可能にした。
2010/07/07 Ver.0.5.6.1
  • マクロ用関数の修正
    GetLastMatchLength、GetLastMatchTagLengthで、文字列の先頭にマッチした場合、 戻り値が-2になってしまうバグの修正(colder氏からの連絡による。)
2010/07/09
  • マクロ用関数の修正
    ReplaceRegularW、ReplaceRegularNoCaseSenseW関数で、置換文字列に、タグ参照を使用した場合、 クラッシュする場合があるのを修正。
2010/07/15 Ver.0.5.7.0
  • 鬼車
    http://redmine.ruby-lang.org/issues/show/3568
    Bug #3568: /(?<=a).*b/ =~ "aab" doesn't match
2011/04/30 Ver.0.5.7.1
  • 鬼車
    http://redmine.ruby-lang.org/issues/show/4088
    Case Sensitivity in Regular Expressions with Lookbehind
2011/05/28 Ver.0.5.8.0
  • hmjre.dll V3.38対応
    キャラクタクララス内の\u{xxxxx}
  • hmjre.dll V3.39対応
    ReplaceRegular/ReplaceRegularNoCaseSense関数の変更に対応
  • ReplaceRegular(W)/ReplaceRegularNoCaseSense(W)で、 全置換時、マッチしていない場合、対象文字列を返していたが、 ""を返すように修正。(hmjre.dllに合わせる) 意図的ではないこと、全置換でない場合と動作が一致しないので、修正。
2011/09/03 Ver.0.5.9.0(β1)
  • 正規表現エンジンを、  鬼車(Ver.5.9.2) → 鬼雲(Ver.5.11.0)  へ変更。
2011/09/09 Ver.0.5.9.1(β2)
  • 正規表現エンジンを、  鬼雲(Ver.5.11.0) → 鬼雲(Ver.5.11.1)  へ変更。
2011/09/10 Ver.0.5.9.2(β3)
  • 正規表現エンジンを、  鬼雲(Ver.5.11.1) → 鬼雲(Ver.5.11.2)  へ変更。
2011/09/18 Ver.0.5.9.3(β4)
  • 正規表現エンジンを、  鬼雲(Ver.5.11.2) → 鬼雲(Ver.5.11.3)  へ変更。
2011/10/04 Ver.0.5.9.4(β5) (未公開)
  • Unicode版の関数を追加

    char を WCHAR に変更しただけ。 hmjre.dllが対応していないので、Unicodeでの、あいまい検索は出来ません。 ほとんどテストしていない状態です。

    • JreGetVersionW
    • Jre2OpenW
    • Jre2SetCodePageW
    • Jre2CompileW
    • Jre2GetMatchInfoW
    • Jre2GetMatchInfo_HmJreW
    • Jre2CloseW
    • JreGetTagPositionW
    • GetJreMessageW
    • GetDllVersionStrW
2011/10/18 Ver.0.5.9.5(β6)
  • 正規表現エンジンを、  鬼雲(Ver.5.11.3) → 鬼雲(Ver.5.11.4) へ変更。
  • ソースの整理
2011/10/22
  • コンパイラを変更  VCEE 2008 → 2010 へ
2011/10/25 Ver.0.5.9.6(β7) (未公開)
  • バージョン情報をリソースから取得するように変更。
  • GetDllVersionStr(W)を修正。DLLロード時に文字列を生成するように修正。
2011/11/03 Ver.0.5.9.7(β8)
  • 通常版APIで、UTF-8文字列が、有効になるよう修正。
    UTF8を使用する場合は、Jre2SetCodePage で、65001(Unicode (UTF-8))を、指定すること。
2011/11/05 Ver.0.5.9.8(正式版)
  • 通常版API
    UTF-8 対応のコードを整理。 ついでに、現状は UTF-8 以外は、全て UTF-16LE へ変換しているが、変換対象を Shift_JIS のみに、 切替可能にした。

    Shift_JIS 以外で、異常動作した場合の対処
    #define で切り替えるので、コンパイルが必要
2011/11/08 Ver.0.6.0.0(β1)
  • マクロ用関数を修正&追加
    • GetDllVersionStr(W)で、64bit OSの場合、"(x64)"と表示するようにした。
    • wcslen2、CheckSurrogatePairを追加
2011/11/20
  • マクロ用関数を修正
    • ReplaceRegular/ReplaceRegularWで マッチ箇所が幅がない場合、検索がループしてしまい、 バッファがあふれてしまうバグの修正。 (colder氏からの連絡による。)
2011/12/10 Ver.0.6.0.1(β2)
  • 正規表現エンジンを更新。

    2011/12/01: [bug]  /a{2}/i doesn't match 'AA'.

    hmonig.dllの場合、通常検索では、ほぼ影響なし。マクロ関数に影響あり。 (通常の検索は、大文字小文字を無視する処理は、秀丸エディタ本体側で行っている為、 関係ないが、正規表現にオプションを埋め込んでいる場合は関係あり)

2011/12/13 Ver.0.6.0.2
  • 正規表現エンジンを更新。  鬼雲(Ver.5.11.4 + bug fix) → 鬼雲(Ver.5.12.0)
2011/12/20 Ver.0.6.1.0(β1)
  • 検索時のデフォルトオプション指定を、直接指定を止めて、HMONIG_DEF_OPTION を定義し、 指定するように変更。
2011/12/29
  • 正規表現エンジンを更新。鬼雲(Ver.5.12.0) → 鬼雲(Ver.5.12.1) へ変更。
2011/12/31
  • API(名前付き捕獲式集合用)を追加
    • JreNameToTags
    • JreNameToTagsW
2012/01/04
  • ReplaceRegular(W)/ReplaceRegularNoCaseSense(W) でバッファの確保に失敗する場合があったので、対処。
  • マクロ用関数の追加
    • GetLastMatchNameToTagCnt
    • GetLastMatchNameToTagCntW
    • GetLastMatchNameToTags
2012/01/06 Ver.0.6.1.1(β2 未公開)
  • #defineでスペルが間違っていた箇所があったので修正
2012/01/07
  • UTF-8 を設定した場合、JreNameToTags が正常に動作しなかったバグの修正。 (内部処理をUTF-16LEで、動作させている為。)
  • API(名前付き捕獲式集合用)を追加
    • JreGetCaptureList
2012/01/09
  • APIを追加
    • JreGetTagCnt
  • マクロ用関数を追加
    • GetLastMatchNameCnt
    • GetLastMatchNameCode
    • GetLastMatchName
    • GetLastMatchNameW
2012/01/11
  • GetLastMatchNameW で、クラッシュする場合があったので修正。
2012/01/21 Ver.0.6.1.2(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.12.1) → 鬼雲(Ver.5.13.0) へ変更。
2012/02/05 Ver.0.6.2.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.0) → 鬼雲(Ver.5.13.1) へ変更。
2012/03/31 Ver.0.6.3.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.1) → 鬼雲(Ver.5.13.2) へ変更。
2012/05/30 Ver.0.6.4.0(正式版)
  • hmjre.dllの解放し忘れがあったので、修正。
2012/06/03
  • マクロ用関数の追加
    サロゲートペアも一文字扱いするunicode用関数
    • wcsleftstr2
    • wcsrightstr2
    • wcsmidstr2
    • wcsstrstr2
    • wcsstrrstr2
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.2) + Ruby r35724へ変更
2012/06/29 Ver.0.6.5.0(正式版)
  • 正規表現エンジンを更新
    鬼雲(Ver.5.13.2) + Ruby r35724 + r36070 + r36072へ変更
  • マクロ用関数の修正
    ReplaceRegular(W)/ReplaceRegularNoCaseSense(W)で、正規表現に複数回マッチする場合、 後方参照が正常に行われなかったバグの修正
2012/11/03 Ver.0.6.6.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.2) → 鬼雲(Ver.5.13.3) へ変更。
2013/03/17 Ver.0.6.7.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.3) → 鬼雲(Ver.5.13.4) へ変更。
2013/04/18 Ver.0.6.8.0(未公開)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.4) → 鬼雲(Ver.5.13.4) + #8210 fix へ変更。
2013/05/30 Ver.0.6.8.1(正式版)
  • 正規表現エンジンを更新。 鬼雲(Ver.5.13.4) + #8210 fix + Merge pull request #17 へ
  • ドキュメント修正
2013/06/11 Ver.0.6.9.0(正式版)
  • 正規表現エンジンを更新。 鬼雲(Ver.5.13.4) + 2013/05/31までの変更内容
  • Jre2GetMatchInfo/Jre2GetMatchInfo_HmJre 修正
    検索開始位置が、対象文字列の最後だった場合に、先頭から検索してしまっていたバグの修正。 (UTF-16LEへの変換時のバグ)
2013/07/06 Ver.0.7.0.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.4) + bug fix → 鬼雲(Ver.5.13.5) へ変更。
2013/09/07 Ver.0.7.1.0(β1)
  • エラーメッセージが取得できない場合があったのを修正。
  • Jre2Compile/Jre2CompileW で 正規表現文字列が空かどうかのチェックを有効にした。

    以前は、検索ダイアログを開いたまま、ウィンドウの切替を行うと、検索文字列がなくても、 JreGetVersion、Jre2Open、Jre2Compile、Jre2Close が呼び出された。 hmonig.dllでは、正規表現文字列が空だとエラーにしていた為、ウィンドウを切り替えるたびに エラーダイアログが表示されてしまうので、チェックを無効化していた。 秀丸エディタVer.8.32では、正規表現文字列が空の場合、JreGetVersion のみ呼び出されるように 変更になっていた為、チェックを有効にした。

2013/09/16
  • 正規表現エンジンを更新。コンパイルスイッチを変更。(USE_COMBINATION_EXPLOSION_CHECK を有効化) トラックバックが多くなる場合でも、遅くならないようにした。
2014/02/04
  • ドキュメント変更のみ(ヘルプファイルサイトのURL変更)
2014/04/12 Ver.0.7.1.1(β2)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.5) → 鬼雲(Ver.5.13.5) + Apr 12, 2014 までの fix へ変更。
2014/04/20
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.5) → 鬼雲(Ver.5.13.5) + Apr 20, 2014 までの fix へ変更。
2014/07/01 Ver.0.7.1.2(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.13.5) → 鬼雲(Ver.5.14.1)
2014/07/27 Ver.0.7.2.0(正式版)(未公開)
  • 正規表現エンジンを更新。鬼雲(Ver.5.14.1) → 鬼雲(Ver.5.14.2)
2014/09/13 Ver.0.7.3.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.14.2) → 鬼雲(Ver.5.15.0)
2015/01/31 Ver.0.7.4.0(β1)
  • 正規表現エンジンを更新。鬼雲(Ver.5.15.0) + Oniguruma 5.9.6更新分
  • マクロ用関数の追加
    unicodeの正規化関連関数を追加

    • GetNormalizeString
    • IsNormalized

    Windows XP用DLLでは動作しません。

2015/01/31 Ver.0.7.4.0(β1)
  • 正規表現エンジンを更新。鬼雲(Ver.5.15.0) + Oniguruma 5.9.6更新分
  • マクロ用関数の追加
    unicodeの正規化関連関数を追加

    • GetNormalizeString
    • IsNormalized

    Windows XP用DLLでは動作しません。

2015/05/02 Ver.0.7.4.1(正式版/未公開)
  • 開発環境を変更
    "Visual Studio 2010 Express Edtion" から "Visual Studio Community 2013" へ
2015/12/19 Ver.0.7.4.2(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.5.15.0) + Oniguruma 5.9.6更新分 + Unicode 8.0.0対応
2016/01/25 Ver.0.7.4.2a(正式版)
  • ドキュメント hmonig.html の修正
    ドキュメント作成を rd(rdtool) から、Markdown(Pandoc)に変更した事による、各種記述ミスの修正。
2016/03/05 Ver.0.7.5.0(β1)
  • 正規表現エンジンを更新。\g{n}を有効にした。
2016/03/12 Ver.0.7.5.1(β2)
  • 未公開関数で、バッファオーバーランする可能性があったので修正。
  • マクロ用関数 ReplaceRegular〜 でも、\g{n}を使えるようにした。
2016/07/01 Ver.0.7.5.2(正式版)
  • マクロ用関数 FindRegular、FindRegularNoCaseSense、 FindRegularW、FindRegularNoCaseSenseW で、 マッチした位置を正常に返さない場合があったのを修正。(\\K使用時にマッチ位置がおかしい)
2016/10/21 Ver.0.7.6.0(β1)
  • マクロ用関数の追加(要秀丸エディタVer.8.66β7以降)
    • SplitRegular(正規表現を使用した文字列分割)
2016/10/26
  • 正規表現エンジンを更新。鬼雲(Ver.5.15.0 master branch 2016/10/26取得分まで)
2016/11/01 Ver.0.7.6.1(β2 未公開)
  • マクロ用関数で引数のチェック部分を変更
2016/11/02
  • 正規表現エンジンを更新。鬼雲(Ver.5.15.0 master branch 2016/11/02取得分まで)
2016/12/10 Ver.0.7.6.2(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.6.0.0)
2017/01/17 Ver.0.7.7.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.6.1.0)
2017/01/29 Ver.0.7.8.0(正式版)
  • 正規表現エンジンを更新。鬼雲(Ver.6.1.1)

目次へ

4 色々なDLLの使い方

公開されているdllの使い方などの紹介です。

4.1 macrodll.dllの使い方

あべのりゆき氏が公開されているDLLです。秀丸エディタのTex用マクロである「祝鳥」に含まれています。 リストボックスの表示や各種ファイル操作が可能です。

DLL単体でも公開もされています。単体で入手する場合は、「macrodll.dll関数一覧」もダウンロードしましょう。

ここのサンプルを動かす場合は、DLLを秀丸エディタ本体と同じ場所に置いてください。

4.1.1 COM/OLEの操作

2009/02/28
IE関連の注意書き追加

macrodll.dllのVersion.0.81より、COM/OLEを操作する関数が追加されました。 これまでは、DDE通信や起動オプションでしか、他のアプリケーションと連携する方法が ありませんでしたが、(アプリケーションが対応していれば) COM/OLEを使った連携 が可能になります。

例えば、

等が可能です。DDE通信などより細かい制御が、可能になります。

COM/OLEの操作は、"Windows Script Host(WSH)"関連を調べるといいです。 以下のページが参考になります。

個別のアプリケーションを操作する場合は、アプリケーションの解説書や取説を参考にしてください。

COM/OLEの命令を調べるには、「オブジェクトビュアー」等があると便利です。

Word、Excel等を所有している場合、似たような機能を持つ「オブジェクトブラウザ」が使えます。 「Visual Basic Editor」を起動し、「ツール」->「参照」で、使いたいCOMオブジェクトを選択し、 "F2"キーを押すと、「オブジェクトブラウザ」が表示され、プロパティ等を確認できます。

4.1.1.1 Windows Script Hostを使って出来ること

Windows Script HostはWindows98以降に標準で搭載されています。 ヘルプがない場合は、ダウンロードしましょう。また、最新版でなければ、最新版にしましょう。

  • Microsoft Windows スクリプト テクノロジ
  • Microsoft スクリプト センター | TechNet
  • FileSystemObjectを使うと各種ファイル操作が可能です。
    • 移動、コピー、削除、属性操作
    • アクセス、更新された日時の取得
  • ショートカットの作成が可能です。 マクロを実行する秀丸エディタのショートカットが作成出来ます。
  • アプリケーションの実行。 秀丸マクロのrun文と同じですが、実行状態(最大化、最小化、非表示など)を設定できます。 また、終了コードを受け取れます。

詳細はヘルプを参照。

4.1.1.2 COM/OLEの例

InternetExplorerを使った例です。同じ機能を、WSHと秀丸マクロで作成しました。 実際には、エラー処理が必要になります。

注意InternetExplorerの例は、主にIE6を対象にしています。IE7以降だと、正常に動作しない場合があります。

WSHの記述例

'URLを取り込み
url = InputBox("URLを入力してください。","IEのテスト","http://hide.maruo.co.jp/")
Set WshIE = CreateObject("InternetExplorer.Application")
'非表示状態なので、表示状態へ
WshIE.Visible = true
'指定されたURLを表示
WshIE.Navigate(url)
'表示されるまでまつ
busy = WshIE.busy
state = WshIE.ReadyState
do while(busy = true and state <> 4)
    '1秒タイマー
    Wscript.Sleep(1000)
    busy = WshIE.busy
    state = WshIE.ReadyState
loop
msgbox "表示完了"
Set WshIE = Nothing
wscript.quit

秀丸マクロ+macrodll.dllの記述例

loaddll hidemarudir + "\\macrodll.dll";
//URLを取り込み
$url = input("URLを入力して下さい。","http://hide.maruo.co.jp/");
#ie = dllfunc("OLE_INITIALIZE","InternetExplorer.Application");
//非表示状態なので、表示状態へ
#ret = dllfunc("OLE_SETPROPERTYINT",#ie, "Visible",1);
//指定されたURLを表示
#ret = dllfunc("OLE_INVOKE",#ie, "Navigate","s", $url );
//表示されるまでまつ
#busy = dllfunc("OLE_GETPROPERTYINT", #ie, "busy");
#state = dllfunc("OLE_GETPROPERTYINT", #ie, "ReadyState");
while(#busy != 0 && #state != 4){
    //1秒タイマー
    #en = tickcount + 1000;
    while(tickcount < #en){};
    #busy = dllfunc("OLE_GETPROPERTYINT", #ie, "busy");
    #state = dllfunc("OLE_GETPROPERTYINT", #ie, "ReadyState");
}
message "表示完了";
#ret = dllfunc("OLE_CLEAR");
freedll;
endmacro;
4.1.1.3 マクロのサンプル

COM/OLE操作のサンプルです。マクロを実行すると、新規ファイルを開き、経過を出力します。

サンプルその1

com_test.mac

InternetExplorerの操作を行います。 指定されたURLを開き、URLショートカットを作成します。

サンプルその2

com_test2.mac

標準入出力へのアクセスを行います。 実行時すると、コマンドプロンプトが表示されます。 秀丸エディタをアクティブにすると、InputBoxが表示されているので、 適当に入力してください。ソートして出力します。ソートはsort.exeを使用しています。

注意環境により、このマクロは正常に実行されない場合があります。 マクロを実行時、入力を終了しても、コマンドプロンプトが表示されたままになる場合は、 タスクマネージャー等で"sort.exe"を強制終了させてください。

2008/09/15追記 正常に動作しない原因は、Windows標準じゃないsort.exeを使用していたためでした。

サンプルその3

com_test3.mac

ファイル操作のサンプル。 実行時すると、InputBoxが表示されので、適当に入力してください。 入力された内容をファイルに出力し、コピー、移動を行います。 マクロ実行後、マクロと同じ場所に"COM_TEST3_TEST.TXT"が作成されるので、 削除してください。

サンプルその4

com_test4.mac

起動済みのInternetExplorerから情報を取得。 URLショートカットを作成します。

サンプルその5

com_test5.mac

起動済みのInternetExplorerから情報を取得。 選択している文字列を取得します。

注意選択文字数が多いとエラーになります。

サンプルその6

com_test_sleipnir.mac

タブブラウザの"Sleipnir"を制御。(動作確認は Ver.2.49) 指定したURLを開きます。既にタブで開いている場合はリロード、 そうでない場合は、新規タブで開きます。

"Sleipnir"を制御するには、"Sleipnirオプション"を変更する必要があります。 クライアント->全般->「スクリプトによるクライアントの操作を許可する」に チェックを入れること。

17行目を書き換えると、Lunascapeでも動きます。 動作確認は、Lunascape Ver.4.06

変更前

00017|#Browser = dllfunc("OLE_INITIALIZE", "Sleipnir.API");
00018|if(#Browser == 0){
00019|    $ERR =  "Sleipnirオブジェクト作成に失敗";
00020|    goto ERRMSG;
00021|}

変更後  "Sleipnir.API" -> "Lunascape2.LunascapeAPI"

00017|#Browser = dllfunc("OLE_INITIALIZE", "Lunascape2.LunascapeAPI")
00018|if(#Browser == 0){
00019|    $ERR =  "Lunascapeオブジェクト作成に失敗";
00020|    goto ERRMSG;
00021|}

目次へ

4.1.2 文字列回収の使い方

2010/03/18 6項を追加。

macrodll.dllにある"文字列回収"機能の説明です。("COLLECTSTR〜"関数の使い方になります。) 文字列回収とは、ほぼGREPと同じ機能です。特徴的なのは、正規表現のグルーピングを使い、 マッチした行全体ではなく、必要な部分を切り出せることです。

使い方

  1. 正規表現を使用するので、SETHMJREDLL関数を呼びだす。 SETHMJREDLL関数を呼びさないと、正規表現を使った検索がうまくいかないので注意。

    #ret = dllfunc("SETHMJREDLL", hidemarudir + "\\hmjre.dll");
  2. COLLECTSTR_SET関数で、出力先を設定。 結果をファイルに出力するか、COLLECTSTR_GETSTR関数を使って取り出すかを選択します。
  3. COLLECTSTR_SETOPT関数で、検索オプションを設定。

    • "aimai" : 曖昧検索を使用
    • "word" : 単語の検索を使用
    • "CaseSense" : 大文字小文字を区別する

    以上のオプションが設定できるので、必要なら、"true"をセットします。

  4. COLLECTSTR_COLLECT関数で検索実行(出力先がファイルなら結果はファイルへ出力)

    • 対象のファイルを指定
    • 検索に使う正規表現
    • 実際に出力する文字列をタグで指定する

    切り出す文字列は、正規表現でグルーピングを行い、タグ番号で指定します。

  5. COLLECTSTR_SET関数で、出力先でファイルを指定しない場合は、 COLLECTSTR_GETSTR関数でマッチした部分を取得します。 macrodll.dllのバージョンにより取得方法が異なります。
    • Version.0.81以下

      COLLECTSTR_ISMORESTR関数を使い、取り出せる文字の有無をみて、COLLECTSTR_GETSTR関数で 取り出します。

      while(dllfunc("COLLECTSTR_ISMORESTR")){
          $$s = dllfuncstr("COLLECTSTR_GETSTR");
      }
    • Version.0.82以上

      COLLECTSTR_GETDATASIZE関数で、取得した文字列の数を取得し、COLLECTSTR_GETSTR関数で、 何番目の文字を読み出すか指定し取り出します。

      ##n = dllfunc("COLLECTSTR_GETDATASIZE");
      ##i = 0;
      while(##i < ##n){
          $$s = dllfuncstr("COLLECTSTR_GETSTR",##i);
          ##i = ##i + 1;
      }
  6. COLLECTSTR_CLEARSTR関数で、文字列をクリアする。 COLLECTSTR_COLLECT関数を続けて行う場合は、実行前にCOLLECTSTR_CLEARSTR関数を実行し、 文字列をクリアすること。

目次へ

4.2 秀丸パイプの使い方

秀丸パイプは、m.fujimoto氏作成の変換モジュールです。 秀まるおのホームページより、 変換モジュールライブラリ からダウンロード出来ます。

本来、秀丸パイプは変換モジュールなんですが、マクロからも呼び出せるように、関数が用意されています。 使い方は通常のdllを使う方法と同じです。("HmPipe.hmf"をloaddllする。)
filter文、filter関数からも使用可能です。

使い方は、以下のようになります。

dllfuncstrで呼び出す場合(秀丸パイプ付属のテキストファイルから抜粋)

■使い方(マクロ編)
 
  1.関数仕様
    HmPipeRun(instr, progname, param);
      instr     入力文字列
      progname  プログラム名
      param     プログラムの引数(省略可)
 
  2.使用例
    --------------------------------------------
    loaddll "HmPipe.hmf";
    $outstr = dllfuncstr("HmPipeRun", $instr, "sort");
    freedll;
    --------------------------------------------

filter文で呼び出す場合(秀丸パイプ付属のテキストファイルから抜粋)

○Ver1.02
・秀丸マクロのfilter関数から呼ばれたときに引数を取れるようにしました。
  引数では、秀丸パイプから起動するプログラム名と、その引数を指定するこ
  とができます。プログラム名と引数は"|"で区切って指定してください。
 
  filter $HmPipe, "HmPipe", "foo.exe|arg1 arg2";
 
・ワイドキャラクターを扱えるようになりました。
  ワイドキャラクターのプログラムを作成する場合、標準入力、標準出力はす
  べてUTF-16LE(BOMなしリトルエンディアンUTF16)として扱ってください。標
  準出力については、実行プログラムがASCIIやShift_JISでエラーを返すと思
  うので、Unicodeかどうかの判定をしています(厳密には判定できませんが)。
 
  秀丸マクロからfilterを使って呼び出すときは、関数名を"HmPipeW"とします。
 
  filter $HmPipe, "HmPipeW", "xxx.exe|arg1 arg2 arg3";

この、"秀丸パイプ"を使うことで何が出来るかというと、秀丸のマクロでは出来ないことを、 他のプログラムを使用して行う事が可能になります。

他のプログラム
sed、gawk、ruby、Perl、WSH等各種スクリプト言語や、標準入出力を使うプログラムなど。

他のプログラムと連携するには、run文等を使えば出来ますが、 標準出力をマクロで直接受け取れることが最大の利点です。

ただし、1つの文字列型変数は、8000文字(バイト?)程度が限界なので、注意が必要です。 出力が多い場合は、"run 〜 >con" を使い、秀丸エディタ上に出力させ、取り込むしかありません。 (tipsページファイル一覧の取得を 参照してください。)

Ver.8

例として、OSに標準搭載されている、WSH(cscript.exe)を使用した時間の計算です。 現在時刻から2時間後の時間を返します。

Option Explicit
Dim n
'標準入力を取り込み、スペースで分割
n = split(trim(WScript.StdIn.ReadLine & " 0 0 0 0"), " ",4)
'時間の演算
Wscript.echo TimeSerial(Hour(now) + n(0), Minute(Now) + n(1), Second(Now) + n(2))
loaddll "HmPipe.hmf";
$t = time;
$outstr = dllfuncstr("HmPipeRun", "2 0 0", "cscript.exe", "//nologo timeadd.vbs");
message "現在時:" + $t + "\n2時間後:" + $outstr;
freedll;
endmacro;
現在時:00:50:07
2時間後:2:50:08

目次へ

4.3 hmjre.dllの使い方

2010/03/22 マクロ関数を追加

hmjre.dllは、秀丸エディタVer.4.00から使用されている正規表現検索用のDLLです。 秀丸エディタの検索・置換で使用されています。 このDLLには、マクロから呼び出せる関数があります。

Fuzzy_OptionDialog関数
あいまい検索の設定ダイアログボックスを表示します。
JreGetVersion関数
hmjre.dllのバージョン番号を返します。
FindRegular, FindRegularNoCaseSense関数(V1.50以降から)
FindRegular関数は、特定の文字列から特定の正規表現パターンのマッチングをして、 ヒットした場合はその位置を返します。 FindRegularNoCaseSense関数は、大文字/小文字を区別しないで検索する以外は、 FindRegular関数とまったく同じです。
GetLastMatchLength関数(V1.50以降から)
FindRegularまたはFindRegularNoCaseSense関数で0以上の値が返った場合に、 マッチした文字列の長さを返します。
EnvChanged関数(V1.71以降から)
あいまい検索関係の設定を、レジストリから読み込み直しします。
GetLastMatchTagPosition(V1.91以降から)
FindRegularまたはFindRegularNoCaseSense関数で0以上の値が返り、 正規表現中にタグが指定されていた場合、指定されたタグの位置を返します。
GetLastMatchTagLength(V1.91以降から)
FindRegularまたはFindRegularNoCaseSense関数で0以上の値が返り、 正規表現中にタグが指定されていた場合、指定されたタグにマッチした文字列の長さを返します。
FindGeneral(V1.97以降から)
「大文字/小文字の区別」、「正規表現」、「あいまい検索」の3つをそれぞれについて、 ON/OFFをパラメータで指定して検索を実行。
ReplaceRegular, ReplaceRegularNoCaseSense(V1.98以降から)
文字列から、正規表現パターンのマッチングを行い、ヒットした場合は置換を実行します。 置換した結果の文字列を返します。ヒットしなかった場合や正規表現のコンパイルエラーの場合は""を返します。 ReplaceRegularNoCaseSense関数は、大文字/小文字を区別しないで検索する以外は、 ReplaceRegular関数とまったく同じです。
SetUnicodeIndexAutoConvert(V3.13以降)

Hmjre.dll側での文字コードインデックス自動変換をON/OFFする関数。 関数にユニコード文字を含む文字変数を渡す場合、ユニコード文字1文字が4バイトのデータとして渡される形となります。 その為、通常の文字操作関数で、Hmjre.dllの戻り値を、そのまま使用すると、通常の文字インデックスの値とずれることになります。 この関数を使用することにより、通常の文字操作関数で使用するのに問題のない値に、自動的に変換することが可能です。
(秀丸エディタ V8.00β45以上、および秀丸メール V5.34β9以上で対応)

実際の使い方は、turukame.3:05320を参照してください。

関数の詳細は、hmjre.dllのヘルプを参照してください。

マクロ作成時に、文字列変数に対して、正規表現を使った検索を行うには、

を使用します。

置換を行うには、

を使用します。

"FindRegular"は見つけた位置(先頭は0)を、"GetLastMatchLength"はマッチした文字列の長さを返す為、 midstr関数を使えば、マッチした文字列を取得できます。

4.3.1 hmjre.dllを使った検索の注意点

基本的に、行単位で処理を行うことを、前提としている為、 "$"が、\nの前にマッチする事が、特殊と考えた方がいいかもしれません。 (検索等で、複数行の処理が苦手となっている原因)

実験用マクロ

debuginfo 1;
//         012345 678901
$target = "a1111\nb2222";
loaddll "hmjre.dll";
if(!result){
  message "DLLのロードに失敗しました。";
  endmacro;
}
call hmjre_check "^";
call hmjre_check "$";
freedll;
endmacro;
hmjre_check:
#st = 0;
while(1){
  #ret = dllfunc("FindRegular",$$1, $target, #st);
  //正規表現にマッチすると-1より大きい値を返す。
  if(#ret > -1){
    //マッチした部分の長さを取得
    #len = dllfunc("GetLastMatchLength");
    debuginfo $$1 + ": #ret=" + str(#ret) + " #len=" + str(#len) + " #st=" + str(#st);
  }else{
    break;
  }
  #st = #ret + 1;
}
return;

実行結果

//         012345 678901
$target = "a1111\nb2222";
^: #ret=0 #len=0 #st=0    --> 先頭にしかマッチしない。
$: #ret=5 #len=0 #st=0    --> 改行の前にマッチ
$: #ret=11 #len=0 #st=6   --> 検索対象の末尾にマッチ

4.3.2 hmjre.dllを使ったマクロの例

4.3.2.1 ファイルパスの分割

ファイル名をドライブ、各フォルダ、ファイル名に分割します。

  • 正規表現:[^\]+  "\"を含まない文字列
$name = "C:\\Program Files\\Hidemaru\\hidemaru.exe";
loaddll "hmjre.dll";
if(!result){
    message "DLLのロードに失敗しました。";
    endmacro;
}
//ファイルの各要素を分割
// C:\Program Files\Hidemaru\hidemaru.exe
// 01234567890123456789012345678901234567
// 12 1234567890123 12345678 123456789012
// 0  0             1        2
// 0  3             7        6
#st = 0;
while(1){
    #ret = dllfunc("FindRegular","[^\\\\]+", $name, #st);
    //正規表現にマッチすると-1より大きい値を返す。
    if(#ret > -1){
        //マッチした部分の長さを取得
        #len = dllfunc("GetLastMatchLength");
        $match  = midstr($name, #ret, #len);
        message "match -> " + $match + "\n#ret=" + str(#ret) + " #len=" + str(#len);
    }else{
        break;
    }
    #st = #st + #len + 1;
}
freedll;
endmacro;

実行結果

1回目
  match -> C:
  #ret=0 #len=2
2回目
  match -> Program Files
  #ret=3 #len=13
3回目
  match -> Hidemaru
  #ret=17 #len=8
4回目
  match -> hidemaru.exe
  #ret=26 #len=12

今回はファイルのパスを分解しましたが、正規表現を変えれば、splitの替わりになるかな?

4.3.2.2 フォルダ名、ファイル名、拡張子の取得

変数に格納されたファイルパスから、フォルダ名、ファイル名、拡張子を取得します。

$name = "C:\\Program Files\\Hidemaru\\hidemaru.exe";
loaddll "hmjre.dll";
if(!result){
    message "DLLのロードに失敗しました。";
    endmacro;
}
//ファイル名部分を検索
#ret = dllfunc("FindRegular","[^\\\\]+$", $name, 0);
//正規表現にマッチすると-1より大きい値を返す。
if(#ret > -1){
    //マッチした部分の長さを取得
    #len = dllfunc("GetLastMatchLength");
    $basename  = midstr($name, #ret, #len);
    $directory = leftstr($name, #ret - 1);
}
//拡張子を検索
#ret = dllfunc("FindRegular","\\..+$", $name, 0);
//正規表現にマッチすると-1より大きい値を返す。
if(#ret > -1){
    //マッチした部分の長さを取得
    #len = dllfunc("GetLastMatchLength");
    $extention  = midstr($name, #ret, #len);
}
message "ファイルパス:" + $name + "\n" + 
        "フォルダ名  :" + $directory + "\n" + 
        "ファイル名  :" + $basename  + "\n" + 
        "拡張子      :" + $extention;
freedll;
endmacro;

実行結果

ファイルパス:C:\Program Files\Hidemaru\hidemaru.exe
フォルダ名  :C:\Program Files\Hidemaru
ファイル名  :hidemaru.exe
拡張子      :.exe
4.3.2.3 ファイル名のチェック

入力されたファイル名に、使用できない文字があるかどうかをチェックします。

loaddll "hmjre.dll";
if(!result){
    message "DLLのロードに失敗しました。";
    endmacro;
}
$input = input("ファイル名を入力してください。");
$regexp = "[\\/:,;*?\"<>|]";
//フルパスの場合は:\をチェックから外す
if((midstr($input,1,2) == ":\\") || (midstr($input,0,2) == "\\\\")){
    $regexp = "[/,;*?\"<>|]";
}
#ret = dllfunc("FindRegular",$regexp ,$input ,0);
if(#ret > -1){
    #len = dllfunc("GetLastMatchLength");
    $check = midstr($input, #ret, #len);
    message "ファイル名に使えない文字があります。\n「" + $check + "」";
}else{
    message "ファイル名に問題はありません。";
}
freedll;
endmacro;
4.3.2.4 両端のスペースの削除

Visual Basicのtrim関数と同等の機能。空白(0x20)、全角空白(0x8140)、タブ(0x9)を削除します。 hmjre.dllの独自仕様である"ヒットした扱いにするタグ指定"を使っています。

$name = "  \t   C:\\Program Files\\Hidemaru\\hidemaru.exe   \t  ";
loaddll "hmjre.dll";
if(!result){
    message "DLLのロードに失敗しました。";
    endmacro;
}
$regexp = "^([  \\t]+)(.+?)([  \\t]+$)(?\\2)";
#ret = dllfunc("FindRegular",$regexp ,$name ,0);
if(#ret > -1){
    #len = dllfunc("GetLastMatchLength");
    $check = midstr($name, #ret, #len);
    message "「" + $check + "」";
}else{
    message "検索に失敗しました。";
}
freedll;
endmacro;

目次へ

4.4 田楽DLL(dengakudll.dll)の使い方

田楽DLLは、杉浦方紀氏が作成した、秀丸エディタ/秀丸メールのマクロから呼び出せる機能拡張DLLで、以下の機能があります。

ダウンロード先:M. Sugiura Personal Web Page [Root]

関連項目

4.4.1 ダイアログの作成例

どんな、ダイアログが作成可能か知りたい場合は、配布ファイル内にある"dgdll.mac"を実行して下さい。 使用できるコントロールが全て使用されているので、サンプルとしても役に立ちます。

作成例として、「検索ボックス向け検索オプション変更マクロ」を使います。 チェックボックスと、ボタンを並べただけの、簡単なダイアログです。

[検索オプション設定画面]

マクロの構成としては、以下の3つから構成されています。

  1. 田楽DLLのロード部分
  2. 部品の配置と通知コードの設定
  3. 通知コードの取得と対応した処理
4.4.1.1 田楽DLLのロード部分
00016|//田楽DLLを読込
00017|loaddll "DengakuDLL.dll";
00018|if (!result) loaddll hidemarudir + "\\DengakuDLL.dll";
00019|if (!result) loaddll macrodir + "\\DengakuDLL.dll";
00020|if (!result) loaddll currentmacrodirectory + "\\DengakuDLL.dll";
00021|if (!result){
00022|    message "DengakuDLL.dll がロードできません。\n 実行ファイルと同じフォルダかマクロファイル用のフォルダに置いてください";
00023|    endmacro;
00024|}

単純に、「loaddll "DengakuDLL.dll";」だけでもいいですが、ロードに失敗した場合は、 DLLのロードする場所を、

  • 秀丸エディタ本体と同じ場所
  • マクロフォルダ
  • 実行しているマクロと同じ場所

に順次切り換えて、ロードを試みます。 それでも失敗した場合は、エラーで終了します。

4.4.1.2 部品の配置と通知コードの設定

使用する部品の配置や、表示内容などの設定を行います。

00025|    //ダイアログ作成
00026|    #w1 = 26;
00027|    if (dllfunc("NEWDIALOG", $title + str(#TIMEOUTSET), #w1) == 0 ||
00028|        //大文字/小文字の区別
00029|        dllfunc("NEWCONTROL","check", "casesense","大文字/小文字の区別(&C)") == 0 ||
00030|        dllfunc("SETCTRLSTATE","casesense", str(searchoption & 0x00000002 == 0x00000002)) == 0 ||
00031|        dllfunc("SETCTRLNOTIFY","casesense", "101") == 0 ||
00032|        //単語の検索
(省 略)
00063|        message "ダイアログ作成エラー!";freedll;endmacro;
00064|    }

簡単な各命令の説明です。

NEWDIALOG
ダイアログを作成する場合に、必ず必要な命令、ダイアログの作成の宣言です。 ダイアログ上部に表示させる文字列と、ダイアログの幅を設定します。

次に、部品を"NEWCONTROL"で配置して、各種設定(通知コードの設定と、検索フラグの状態をセット)を行います。

NEWCONTROL

部品の配置を行います。部品の種類と、部品名を設定します。 ここでは、

  • "check" ==> チェックボックスを配置
  • "casesense" ==> チェックボックスの識別名を、"casesense"に設定
  • "大文字/小文字の区別(&C) ==> 表示する文字列を設定

を、行ってます。

SETCTRLSTATE
部品の状態の設定を行います。部品の識別名と、設定したい状態を指示します。 ここでは、チェックボックスなので、チェックの有無を指定します。
  • "casesense" ==> 設定したいコントロールの識別名
  • 状態の設定を文字列で行う。今回は、各オプションの各ビットの状態を設定。
SETCTRLNOTIFY
部品を操作した場合の、通知コードを設定します。 通知コードとは、そのコントロールを操作した事を通知する為のコードです。 (ボタンを押した場合、エディットボックスで入力した場合など)
  • "casesense" ==> 設定したいコントロールの識別名
  • "101" ==> 識別用の通知コード

田楽DLLで部品配置は、部品配置列の各行に対し、部品を置いておく事になります。

  部品配置列
行┌─────────────────┐
1│□大文字/小文字の区別(&C)         │
 ├─────────────────┤
2│□単語の検索(&W)                  │
 ├─────────────────┤
3│□正規表現(&R)                    │
 ├─────────────────┤
4│□あいまい検索(&F)                │
 ├─────────────────┤
5│□次の秀丸エディタも続けて検索(&H)│
 ├─────────────────┤
6│□一周する(&O)                    │
 ├─────────────────┤
7│□検索文字の強調/検索(&I)         │
 ├─────────────────┤
8│閉じる                            │
 └─────────────────┘

例では、行に1つの部品しか配置していませんが、複数の部品の配置も可能です。 複数の部品を配置する場合は、"SETCTRLWIDTH"を使用します。 "SETCTRLWIDTH"で幅を指定すると、次のコントロールは、幅を指定したコントロールの右側に、 幅を指定しない場合は、次行に配置する事になります。 また、幅を指定しない場合、"NEWDIALOG"で指定した幅を元に、コントロールの幅が、 自動的に設定されます。(「閉じる」ボタンを参照)

部品を配置し、設定したら、ダイアログを実際に表示します。

00066|    if (!dllfunc("SHOWDIALOG",hidemaruhandle(0),1)){
00067|        freedll;
00068|        message "ダイアログの表示に失敗しました。";
00069|        endmacro;
00070|    }
SHOWDIALOG
作成したダイアログを表示します。 失敗した場合は、DLLを解放し、マクロを終了します。
4.4.1.3 通知コードの取得と対応した処理

通知コードの待ち受け処理です。

00071|    //メインループ
00072|    #st = tickcount;
00073|    #timeout = #st + (1000 * #TIMEOUTSET);
00074|    #n = 1;
00075|    while (1) {
00076|        $retcode = "";
00077|        while (strlen($retcode) == 0){
00078|            $retcode = dllfuncstr("WAITCTRLNOTIFY",10);
00079|            //タイムアウト処理
00080|            if(tickcount > #timeout){
00081|                $retcode = "BREAK";
00082|                break
00083|            }
00084|            if((#st + (#n * 1000)) < tickcount){
00085|                #ret = dllfunc("SETDLGTITLE", $title + str(#TIMEOUTSET - #n));
00086|                #n = #n + 1;
00087|            }
00088|        }

77〜88行目が、通知コードの待ち受け部分です。 dllfuncstr("WAITCTRLNOTIFY",10)が、実際に通知コードを受け取る命令になります。 本来なら、1行で済みますが、今回はタイムアウト処理などがあるので、多くなってます。

タイムアウト処理がなければ、こんな感じです。

while (strlen($retcode) == 0) $retcode = dllfuncstr("WAITCTRLNOTIFY",10);

ここでは、何かしら、通知コードが入力されるまで(ダイアログが操作されるまで)、 ひたすら待ち続けます。

実際の処理部。 受け取った通知コードをみて、各種処理をおこないます。

00089|        if($retcode == "0" || $retcode == "BREAK"){
00090|            break;
00091|        }else if($retcode == "101"){
00092|            setsearch searchbuffer, (searchoption ^ 0x00000002);
00093|        }else if($retcode == "102"){
00094|            setsearch searchbuffer, (searchoption ^ 0x00000001);
00095|        }else if($retcode == "103"){
00096|            setsearch searchbuffer, (searchoption ^ 0x00000010);
00097|        }else if($retcode == "104"){
00098|            setsearch searchbuffer, (searchoption ^ 0x00000020);
00099|        }else if($retcode == "105"){
00100|            setsearch searchbuffer, (searchoption ^ 0x00000080);
00101|        }else if($retcode == "106"){
00102|            setsearch searchbuffer, (searchoption ^ 0x01000000);
00103|        }else if($retcode == "107"){
00104|            setsearch searchbuffer, (searchoption ^ 0x00000800);
00105|        }else if($retcode == "108"){
00106|            setsearch searchbuffer, (searchoption ^ 0x00001000);
00107|        }

例では、検索オプションの書き換えを行っています。

通知コードが"0"(閉じるボタン)または、"BREAK"(タイムアウト)の場合は、 待ち受けループを抜け、ダイアログを閉じ、終了します。

00111|    ##ret = dllfunc("ENDDIALOG");

目次へ

4.5 BRegIf.DLLのマクロ関数の使い方

BRegIf.DLLは、v0,1,3,0 以降、マクロから呼び出せる各種関数が実装されています。 その関数の使い方の例です。 というか、開発時に使っている動作確認用マクロです。新規秀丸を開き、結果を出力します。

出力結果

c:\program files\hidemaru\bregif.dll
BRegIf.dll Ver.1.32(bregonig.dll Ver.1.44 with Oniguruma 5.9.1)
          1         2         3         4         5         6         7
01234567890123456789012345678901234567890123456789012345678901234567890
 Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 
FindRegularのテスト
FindRegular("(03|045)-(\d{3,4})-(\d{4})", $target, 0)
見つかった場所:10
マッチした長さ:12
マッチした文字:045-222-1111
見つかった場所1:10
マッチした長さ1:3
マッチした文字1:045
見つかった場所2:14
マッチした長さ2:3
マッチした文字2:222
見つかった場所3:18
マッチした長さ3:3
マッチした文字3:111
GetFunctionResultを使用した場合
見つかった場所0:045-222-1111
見つかった場所1:045
見つかった場所2:222
見つかった場所3:1111
Matchのテスト
Match("(03|045)-(\d{3,4})-(\d{4})","",$target, 0)
見つかった場所:10
マッチした長さ:12
マッチした文字:045-222-1111
見つかった場所1:10
マッチした長さ1:3
マッチした文字1:045
見つかった場所2:14
マッチした長さ2:3
マッチした文字2:222
見つかった場所3:18
マッチした長さ3:3
マッチした文字3:111
GetFunctionResultを使用した場合
見つかった場所0:045-222-1111
見つかった場所1:045
見つかった場所2:222
見つかった場所3:1111
FindRegularNoCaseSenseのテスト1
FindRegularNoCaseSense("(YOKOHAMA).+(OSAKA).+(TOKYO)", $target, 0)
見つかった場所:1
マッチした長さ:48
マッチした文字:Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo
GetFunctionResultを使用した場合
見つかった場所0:Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo
見つかった場所1:Yokohama
見つかった場所2:Osaka
見つかった場所3:Tokyo
FindRegularNoCaseSenseのテスト2
FindRegularNoCaseSense("(yoKoHaMa).+(oSAka).+(tOkYo)", $target, 0)
見つかった場所:1
マッチした長さ:48
マッチした文字:Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo
GetFunctionResultを使用した場合
見つかった場所0:Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo
見つかった場所1:Yokohama
見つかった場所2:Osaka
見つかった場所3:Tokyo
Matchのテスト2
Match("(yoKoHaMa).+(oSAka).+(tOkYo)", "i",$target, 0)
見つかった場所:1
マッチした長さ:48
マッチした文字:Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo
GetFunctionResultを使用した場合
見つかった場所0:Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo
見つかった場所1:Yokohama
見つかった場所2:Osaka
見つかった場所3:Tokyo
Transのテスト
base           :abcdefghijkl
tr/bdfj/BDFJ/  :aBcDeFghiJkl
tr/bdfj/_/     :a_c_e_ghi_kl
tr/bdfj/BD/d   :aBcDeghikl
tr/abcd/_/s    :_efghijkl
tr/abcd/_/c    :abcd________
tr/abcd/_/cs   :abcd_
データ変更
tr/012/零一弐/k: Yokohama 零45-弐弐弐-一一一一  Osaka 零6-5555-6666  Tokyo 零3-一一一一-9999 
Translateのテスト
tr/012/零一弐/k: Yokohama 零45-弐弐弐-一一一一  Osaka 零6-5555-6666  Tokyo 零3-一一一一-9999 
Splitのテスト
分割文字: *\d{2,3}-\d{3,4}-\d{4} *
split戻り値:3
エラー:
分割文字(0):[ Yokohama]
分割文字(1):[Osaka]
分割文字(2):[Tokyo]
Substのテスト
s/[0-9]/x/   :01--> Yokohama x45-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 
s/[0-9]/x/g  :30--> Yokohama xxx-xxx-xxxx  Osaka xx-xxxx-xxxx  Tokyo xx-xxxx-xxxx 
SubstExのテスト
s/[0-9]/x/   st = 0  :01--> Yokohama x45-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 
s/[0-9]/x/   st = 20 :01-->x1  Osaka 06-5555-6666  Tokyo 03-1111-9999 
s/[0-9]/x/g  st = 30 :20-->xx-xxxx-xxxx  Tokyo xx-xxxx-xxxx 
SubstEx2のテスト
s/[0-9]/x/   st = 0  :01--> Yokohama x45-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 
s/[0-9]/x/   st = 20 :01--> Yokohama 045-222-11x1  Osaka 06-5555-6666  Tokyo 03-1111-9999 
s/[0-9]/x/g  st = 30 :20--> Yokohama 045-222-1111  Osaka xx-xxxx-xxxx  Tokyo xx-xxxx-xxxx 
Replaceのテスト
s/[0-9]/x/   -->  Yokohama x45-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 
s/[0-9]/x/g  -->  Yokohama xxx-xxx-xxxx  Osaka xx-xxxx-xxxx  Tokyo xx-xxxx-xxxx 
Replace2のテスト
s/[0-9]/x/   st = 10 -->  Yokohama x45-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 
s/[0-9]/x/g  st = 20 -->  Yokohama 045-222-11xx  Osaka xx-xxxx-xxxx  Tokyo xx-xxxx-xxxx 

目次へ

4.6 外部DLL呼び出しとunicode

基本的に、従来のdllfunc/dllfuncstrで、外部DLLに対し、unicode文字列を渡すことはできません。 例外的に、hmjre.dll/Tkinfo.dllのみ、秀丸独自コードを使用し、unicode文字列を渡すことが可能です。

hmjre.dll/Tkinfo.dll以外のDLLでは、"Unicodeを取り除いた形式に変換"しているとのこと。 (秀丸エディタ本体側で処理。turukame.3:05331を参照)

Ver.8より、ワイド文字に対応した、dllfuncw/dllfuncstrwが追加されています。 外部DLLで、unicode文字列を扱う場合は、dllfuncw/dllfuncstrwを使用することになりますが、 DLL側の対応が必要です。

文字変数内に、Unicode文字が含まれるかどうかの、チェック方法はマクロヘルプに 記載されています。 (秀丸エディタ Ver.8 charindex_to_byteindex のページ)

目次へ

5 変換モジュール

5.1 uniq.hmf 改造版

秀丸エディタの変換モジュールライブラリ にある Uniq の改造版です。 uniq(重複行削除)だけでなく、重複行を出力する機能も追加しています。 また、重複チェックを開始するフィールドを指定できます。(スペース区切り、CSV、TSV)

32bit版及び64bit版があります。

圧縮ファイルの内容

uniq.txt            変換モジュールの説明
uniq.hmf            32bit版変換モジュール
uniq.hmf64          64bit版変換モジュール
uniq_ex_src.zip     変更したソース(vcee 2010)

5.1.1 変換モジュールの機能

以下の3個の機能があります

「ユニーク」、「重複行出力」は、そのままの機能を実行します。 「ユニーク/重複行」は設定ダイアログを表示し、指定された機能を実行します。

ユニーク/重複行設定ダイアログ

設定できる内容は、以下になります。

5.1.2 変更履歴(uniq改造版)

以下のソースをベースに以下の内容を修正。

2012/02/26
  • 重複していないのに、空行が削除されてしまうのを修正。
  • 1文字づつ合成していたのを止めて、改行文字を検索して、行単位で処理するようにした。
  • メモリ確保時に、ポインタのチェックを追加。
  • vector → String → HGLOBAL でデータを移動させていたが、vector → HGLOBAL へ変更
2012/02/27
  • 遅くなったので、元に戻す。 vector → String → HGLOBAL
  • vector、Stringで、reserveを使い、あらかじめ大きなメモリ領域を確保するようにした。 これにより、動作速度が改善。
2012/03/03 Ver.1.1.0
  • 重複行を出力する関数を追加。 重複している場合、後に出てくる行を出力する。
2012/03/18 Ver.1.2.0
  • 比較開始するフィールドの指定を追加。 デフォルトは、スペース区切り、TSV/CSVにも対応する。 先頭は1。最大は255。これ以上を指定した場合は、無視されます。
2012/07/01
  • 各関数を多少見直し。(機能的な変更はなし)

目次へ

6 COMコンポーネント

6.1 HidemaruMacroWscLib

Windows スクリプト コンポーネント で作成した、秀丸エディタマクロ用COMコンポーネントです。

COMコンポーネントといっても、XML と、VBScript、JScriptで構成されています。

このCOMコンポーネントを使う場合には、レジストリに登録が必要です。 登録時、Windows Vista以降では、管理者権限が必要になります。 登録を行った時のパスをレジストリに登録するので、あらかじめファイルを配置してから、登録を行ってください。 また、内部で .NET Framework の機能を使用しているので、.NET Framework のライブラリが必要です。 (開発環境は、 .NET Framework 4 になります。)

圧縮ファイルの内容

HidemaruMacroWscLib_setup.vbs     登録/登録解除用vbs
HidemaruMacroWscLib.html          説明書
HidemaruMacroWscLib.wsc           WSCファイル(COMコンポーネント本体)

6.1.1 バージョンアップについて

旧バージョンの登録解除が必用です。

  1. 旧バージョンを「登録解除」する。
  2. 新しいバージョンを「登録」する。

旧バージョンの「登録解除」を行わない場合、レジストリに古い情報が残されます。 (古い情報が残っていても、特に問題はありません。)

6.1.2 HidemaruMacroWscLibの機能

文字列操作用と、日付関連のオブジェクトがあり、各種メソッド、プロパティが実装されています。

6.1.3 HidemaruMacroWscLibの変更履歴

2013/12/21 Version 1.00
  • 初版
2013/12/26 Version 1.01
  • String クラスに ResetDelimiter メソッド追加
  • WMIクラスを追加
2013/12/29
  • 各クラスの classid を指定するようにした。

目次へ

7 WSH

7.1 HidemaruMacroInstaller

秀丸エディタ用マクロのインストール補助スクリプトです。

名前は立派ですが、たいしたことは出来ません。ZIP形式の圧縮ファイルを展開し、 ファイルを秀丸エディタのマクロフォルダに移動するだけです。

マクロフォルダの位置は自動で認識ます。以下の順番で秀丸エディタの検索を行います。

  1. レジストリ
  2. 実行中のプロセス

レジストリの検索結果と、プロセス実行中のパスが異なる場合は、プロセスから取得した情報を優先します。 その為、持ち出しキットで使用する場合は、無題でもいいので、秀丸エディタを起動しておく必要があります。 (常駐秀丸がいれば問題ないです。)

配布ファイルには、以下のファイルが格納されています。

HidemaruMacroInstaller.vbs                  :メインモジュール
HidemaruMacroInstallerSubModule.vbs         :サブモジュール(ファイルの移動処理)
HidemaruMacroInstaller.html                 :説明ファイル
HidemaruMacroInstaller_UAC_Dialog_Vista.png :説明ファイル用画像
HidemaruMacroInstaller_UAC_Dialog_7.png     :説明ファイル用画像

スクリプトと同じ個所に、以下のファイルを作るので、書き込み権限のあるフォルダに展開してください。

HidemaruMacroInstaller.dat                  :秀丸エディタの各種情報を保存
HidemaruMacroInstaller.mac                  :"HidemaruMacroInstaller.dat"作成用マクロ
HidemaruMacroInstaller.log                  :動作ログを記録したファイル
HidemaruMacroInstaller.usrcmd               :アプリケーション実行用データファイル

7.1.1 HidemaruMacroInstallerの使い方

"HidemaruMacroInstaller.vbs" に ZIP形式で圧縮されたマクロファイルをドロップするだけです。 ZIPファイルの中身が、自動的にマクロフォルダに展開されます。

マクロファイルがドロップされた場合は、マクロフォルダに移動します。

7.1.2 HidemaruMacroInstaller使用時の注意

7.1.3 HidemaruMacroInstallerの特殊な使い方

ZIPファイルの展開以外にも機能があります。 詳細は、説明ファイルを参照の事。

hmonig.dll Ver.0.7.4.0系がサンプルになります。 (実行環境を判定して、対象のDLLをコピーしている。)

7.1.4 HidemaruMacroInstallerの変更履歴

2015/02/15 Ver.1.0.0β1
  • 一通り動くようになったので、テスト目的で公開
2015/07/06 Ver.1.0.0β2
"HidemaruMacroInstallerSubModule.vbs"を修正
  • 引数のチェックを追加
  • "*.*"を、指定した場合、確認ダイアログを表示させないようにした。
2015/10/21 Ver.1.0.0β3

"HidemaruMacroInstaller.vbs"を修正

  • 64bit OSの場合、インストール場所の検索にレジストリのリダイレクト部分も検索するようにした。 (64bit OSに、32bitアプリケーションをインストールした場合への対応)

ちなみに、起動中の秀丸エディタを見つけた場合、レジストの検索結果より、プロセス実行中のパスを優先します。

"HidemaruMacroInstallerSubModule.vbs"を修正

  • ラベル検索時に空行でエラーになっていたので修正
2015/11/22 Ver.1.0.0β4

"HidemaruMacroInstaller.vbs"を修正

インストール場所の検索に失敗していたのを修正。

2016/08/06 Ver.1.0.0β5
"HidemaruMacroInstaller.vbs"を修正
  • 終了時にメッセージを表示するようにした。
  • マクロファイルを指定された場合は、ファイルを移動するように修正

目次へ


top秀丸エディタマクロ