メールソフトのBecky!2では、プラグインの作成方法が公開されています。C++が基本だけど、delphi用のライブラリもあるみたい。
ここでは、VC++を使って作る例をメモしておきます。
B2PinSDK-22400.zip
)をダウンロードしてくる。szPlugInName | プラグインの名前。メニューバーとかに表示される。 |
szVendor | 作成者の名前。 |
szVersion | バージョン。 |
szDescription | 説明。 |
BKC_Onなんちゃら
)が色々あるので、自分がやりたい事に適した関数を探して
その中身をコーディングすることになる。どんなものがあるかはヘルプ参照。Beckyでメニューバーの「ツール(T)」→「プラグインの設定(U)」→「自分のプラグイン名」でプラグインを選択したときに、設定ダイアログが出るとかっこいい(笑)
BKC_OnPlugInSetup関数内でダイアログが出るようにコーディングしておく。
int WINAPI BKC_OnPlugInSetup(HWND hWnd) { int nRC = DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_SETTING), hWnd, (DLGPROC)SetupProc); return 1; }
Beckyのメニューバーにメニューを追加することが出来る。
メニューが表示されるとき、BKC_OnMenuInit関数が呼ばれる。ここで、Win32APIのメニュー関連関数を使ってメニューを加工できる。
int WINAPI BKC_OnMenuInit(HWND hWnd, HMENU hMenu, int nType) { switch (nType) { case BKC_MENU_MAIN: { HMENU hSubMenu = GetSubMenu(hMenu, 3); // Define CmdProc as "void WINAPI CmdProc(HWND, LPARAM)" UINT nID = bka.RegisterCommand("ステータスバーに表示される説明", nType, CmdProc); InsertMenu(hSubMenu, 22, MF_BYPOSITION | MF_STRING, nID, "メニューバーに出すメッセージ"); // Define CmdUIProc as "UINT WINAPI CmdUIProc(HWND, LPARAM)" bka.RegisterUICallback(nID, CmdUIProc); } break; 〜 default: break; } // Always return 0. return 0; }
0 | 「ファイル(F)」 |
1 | 「編集(E)」 |
2 | 「表示(V)」 |
3 | 「メール(M)」 |
4 | 「ツール(T)」 |
5 | 「ヘルプ(H)」 |
メニューの加工方法についてはMFCのCMenuの使い方が参考になる。(あくまで「参考」。例えばBeckyプラグインでは、メニューの変更時に削除は必要ない)
ただ 気になるのは、Beckyのメニュー構成がこのままであるという保証が無い(と思われる)こと。
自分以外のプラグインもメニューを変えられるわけで、その辺りのバッティングに関しての指針とか、どこかにあるのかなぁ…?
メニューにチェックを付けたり選択不可にしたりしたい場合は、UIのコールバック関数を用意してRegisterUICallbackによって登録する。
UINT WINAPI CmdUIProc(HWND hWnd, LPARAM lParam) { UINT ret = 0; ret |= BKMENU_CMDUI_DISABLED; //使用不可にする ret |= BKMENU_CMDUI_CHECKED; //チェックを付ける return ret; }
メニューが実際に選択されたときに呼ばれるコールバック関数を用意して、RegisterCommandによって登録する。
void WINAPI CmdProc(HWND hWnd, LPARAM lParam) { //メニューが選択された時の動作をプログラミング }