メールソフトの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)
{
//メニューが選択された時の動作をプログラミング
}