NextHE メニュー機能

 秀丸エディタのマクロ用 .DLL です。
メニュー機能
 menu 文ではメニューに追加した項目に自動的に番号が付きますが、NextHE では項目毎に番号を付ける事がでます。
 状況に応じてメニュー項目を除外した表示を提供できるようになります。
 また、サブ・メニューも実装できます。
パターンマッチング(文字列比較)機能
 .NET Framework の正規表現を提供します。
 10 を超える部分取り出し(キャプチャ)を提供します。
連想配列
 連想配列(マップやハッシュとも呼ぶ)を提供します。
関数説明(C/C++) 秀丸エディタ マクロサンプル PowerShell サンプル

関数説明(C/C++)

// 呼び出し規約 #define HEAPI __cdcel // typedef void* LPCONTEXTMENU; // 最初に呼び出す // メニュー・ハンドルを取得する // // 戻り値 // メニュー・ハンドル // // bitState // 通常は 0 を渡す // 0 でメニューが表示されない場合は 1 を渡す // PowerShell では 1 を渡さないと表示されない LPCONTEXTMENU HEAPI MenuBegin( INT_PTR bitState ); // 最後に呼び出す // メニューのハンドルを破棄する // // 戻り値 // 必ず TRUE // // lpContext // MenuBegin で取得したメニュー・ハンドル INT_PTR HEAPI MenuEnd( LPCONTEXTMENU lpContext ); // メニューを表示する // 事前に MenuInsertItemW / MenuInsertItemA で項目を追加しておくこと // // 戻り値 // 選択した項目の番号 // 未選択の場合は 0 になる // // lpContext // MenuBegin で取得したメニュー・ハンドル // hWnd // ウィンドウ・ハンドル // NULL を渡す事で現在フォアグラウンドのウィンドウになる // nPositionIndex // メニューの表示位置 // 0 はマウスカーソルのあるところ // 1 はウィンドウの左上 // 2 はウィンドウの右上 // 3 はウィンドウの左下 // 4 はウィンドウの右下 // 5 はウィンドウの中央 INT_PTR HEAPI MenuShow( LPCONTEXTMENU lpContext, HWND hWnd, INT_PTR nPositionIndex ); // メニューに項目を追加する // メニュー・アイテムの追加 // // 戻り値 // 追加に成功した場合 TRUE になる // 追加に失敗した場合 FALSE になる // // lpContext // MenuBegin で取得したメニュー・ハンドル // nItemID // 項目番号。この項目を選択した場合に返す番号 // 0 を渡すとセパレータ(区切り)になる // 0 を渡した場合 lpszText は無視する // lpszText // 項目名 INT_PTR HEAPI MenuInsertItemW( LPCONTEXTMENU lpContext, INT_PTR nItemID, wchar_t const* const lpszText ); INT_PTR HEAPI MenuInsertItemA( LPCONTEXTMENU lpContext, INT_PTR nItemID, char const* const lpszText ); // メニューの項目に項目を追加する // サブ・アイテムの追加 // // 事前に MenuInsertItemW / MenuInsertItemA で項目を追加しておくこと // サブ・アイテムに対してもサブ・アイテムを追加可能 // // 戻り値 // 追加に成功した場合 TRUE になる // 追加に失敗した場合 FALSE になる // // lpContext // MenuBegin で取得したメニュー・ハンドル // nInsertItemID // 項目番号。この項目にサブ・アイテムを追加する // nItemID // 項目番号。この項目を選択した場合に返す番号 // lpszText // 項目名 INT_PTR HEAPI MenuInsertSubItemW( LPCONTEXTMENU lpContext, INT_PTR nInsertItemID, INT_PTR nItemID, wchar_t const* const lpszText ); INT_PTR HEAPI MenuInsertSubItemA( LPCONTEXTMENU lpContext, INT_PTR nInsertItemID, INT_PTR nItemID, char const* const lpszText );

秀丸エディタ マクロサンプル

// NextHE メニューを使えるように .DLL をロードする loaddll "NextHE.dll"; // .DLL のロードの成功/失敗を確認 if( !result ) { // .DLL のロードに失敗 message ".dllのロードに失敗しました。"; // マクロ終了 endmacro; } // メニュー開始(メニュー・ハンドルを取得する) #Menu = dllfunc( "MenuBegin", 0 ); // メニュー項目を追加する #r = dllfuncw( "MenuInsertItemW", #Menu, 101, "A" ); #r = dllfuncw( "MenuInsertItemW", #Menu, 102, "B" ); #r = dllfuncw( "MenuInsertItemW", #Menu, 0, "-" ); #r = dllfuncw( "MenuInsertItemW", #Menu, 103, "C" ); // サブ・メニュー項目を追加する #r = dllfuncw( "MenuInsertSubItemW", #Menu, 103, 201, "C-1" ); #r = dllfuncw( "MenuInsertSubItemW", #Menu, 103, 202, "C-2" ); // サブ・メニューへサブ・メニューを追加する #r = dllfuncw( "MenuInsertSubItemW", #Menu, 202, 211, "C-2-1" ); #r = dllfuncw( "MenuInsertSubItemW", #Menu, 202, 212, "C-2-2" ); // メニューを表示する #i = dllfunc( "MenuShow", #Menu, hidemaruhandle(0), 0 ); // メニュー終了(メニュー・ハンドルを破棄する) #r = dllfunc( "MenuEnd", #Menu ); // 選択したメニュー項目の番号を通知する message "MenuShow: " + str(#i); // .DLL を解放する freedll;

PowerShell サンプル

# NextHE.dll のファイル・パス $DLL = 'NextHE.dll' # NextHE クラスを定義(C# ソース) $SourceCS = " using System; using System.Runtime.InteropServices; public class NextHE { [DllImport(@`"$DLL`", CallingConvention=CallingConvention.Cdecl)] public extern static IntPtr MenuBegin( IntPtr bitState ); [DllImport(@`"$DLL`", CallingConvention=CallingConvention.Cdecl)] public extern static IntPtr MenuEnd( IntPtr hPopupMenu ); [DllImport(@`"$DLL`", CallingConvention=CallingConvention.Cdecl)] public extern static IntPtr MenuShow( IntPtr hPopupMenu, IntPtr hWnd, IntPtr nPositionIndex ); [DllImport(@`"$DLL`", CallingConvention=CallingConvention.Cdecl, CharSet = CharSet.Unicode)] public extern static IntPtr MenuInsertItem( IntPtr hPopupMenu, IntPtr nItemID, string szText ); [DllImport(@`"$DLL`", CallingConvention=CallingConvention.Cdecl, CharSet = CharSet.Unicode)] public extern static IntPtr MenuInsertSubItem( IntPtr hPopupMenu, IntPtr nInsertItemID, IntPtr nItemID, string szText ); }" # NextHE クラスを追加する Add-Type $SourceCS # メニュー開始(メニュー・ハンドルを取得する) [IntPtr] $menu = [NextHE]::MenuBegin( 1 ) # メニュー項目を追加する [void] [NextHE]::MenuInsertItem( $menu, 101, 'A' ) [void] [NextHE]::MenuInsertItem( $menu, 102, 'B' ) [void] [NextHE]::MenuInsertItem( $menu, 0, '-' ) [void] [NextHE]::MenuInsertItem( $menu, 103, 'C' ) # サブ・メニュー項目を追加する [void] [NextHE]::MenuInsertSubItem( $menu, 103, 201, 'C-1' ) [void] [NextHE]::MenuInsertSubItem( $menu, 103, 202, 'C-2' ) # サブ・メニューへサブ・メニューを追加する [void] [NextHE]::MenuInsertSubItem( $menu, 202, 211, 'C-2-1' ) [void] [NextHE]::MenuInsertSubItem( $menu, 202, 212, 'C-2-2' ) # メニューを表示する [NextHE]::MenuShow( $menu, 0, 5 ) # メニュー終了(メニュー・ハンドルを破棄する) [void] [NextHE]::MenuEnd( $menu )