MarineProjects/MarineToolbar/Developer

プラグイン開発 bookmark

Marineツールバーのプラグイン開発には以下の実装が必要です。

  • プラグイン情報を取得するためのGetPluginInfo関数の実装とエキスポート
  • プラグインのCOMインターフェースであるIToolBarPluginの実装
  • イベントシンク_DToolBarPluginEventsの実装

上記の実装を行うとMarineツールバーのプラグインとして動作することが可能です。
プラグインの開発に必要な定義ファイルはこのページからダウンロードすることができます。

プラグインの情報取得関数 bookmark

プラグインから情報を取得するための関数がGetPluginInfoです。
この関数は、以下の形式で実装します。

BOOL WINAPI GetPluginInfo(LPPLUGINSTRUCT lpPluginStruct, LPDWORD lpdwCount);

この関数は、PLUGINSTRUCT構造体へのポインタとDWORDへのポインタを引数として受け取ります。PLUGINSTRUCT構造体にはプラグインの各種情報を格納します。
DWORDへのポインタlpdwCountは実装しているプラグインの数を設定します。
プラグインは、インプロセスCOMサーバー(通常は拡張子DLL)の形式でコンパイルされますが、1つのDLL中に複数のプラグインを実装することが可能です。そのため、実装されているプラグインの数を取得します。

Marineツールバーは、以下の手順でGetPluginInfoを呼び出します。

  1. 本体側の処理
    PLUGINSTRUCT構造体へのポインタlpPluginStructにNULLをセットしてGetPluginInfoを呼び出します。実装されているプラグインの数を取得するための処理です。
  2. プラグイン側の処理
    呼び出されたGetPluginInfoは、引数lpPluginStructがNULLかどうかのチェックを行います。NULLの場合は、実装しているプラグインの数をlpdwCountに格納します。
  3. 本体側の処理
    lpdwCountに設定されたプラグインの情報を格納できるようなPLUGINSTRUCT構造体メモリ(PLUGINSTRUCT構造体の配列)を確保します。そのポインタを引数として再度、GetPluginInfoを呼び出します。
  4. プラグイン側の処理
    引数lpPluginStructがNULLではない場合、プラグインの情報をlpPluginStructに格納します。lpPluginStructは、PLUGINSTRUCT構造体の配列になっているため、実装しているプラグインの数だけデータを設定します。

リファレンス bookmark

GetPluginInfo bookmark

  • BOOL WINAPI GetPluginInfo(LPPLUGINSTRUCT lpPluginStruct, LPDWORD lpdwCount);
    • 概要
      プラグインに関する情報を取得します
    • 引数
      • LPPLUGINSTRUCT lpPluginStruct
        プラグインの情報を格納するPLUGINSTRUCT構造体配列へのポインタ
    • 戻り値
      • BOOL
        TRUE : 正常終了
        FALSE : 処理失敗

PLUGINSTRUCT構造体 bookmark

#define PLUGIN_CLSID_BUFFER_SIZE         1024
#define PLUGIN_NAME_BUFFER_SIZE          1024
#define PLUGIN_DESCRIPTION_BUFFER_SIZE   1024
#define PLUGIN_AUTHOR_BUFFER_SIZE        256

typedef struct{
           TCHAR    szCLSID[PLUGIN_CLSID_BUFFER_SIZE];
           TCHAR    szPluginName[PLUGIN_NAME_BUFFER_SIZE];
           TCHAR    szPluginDescription[PLUGIN_DESCRIPTION_BUFFER_SIZE];
           TCHAR    szAuthor[PLUGIN_AUTHOR_BUFFER_SIZE];
           HBITMAP  hBitmap;
}PLUGINSTRUCT;
typedef PLUGINSTRUCT*	LPPLUGINSTRUCT;
  • szCLSID
    プラグインのCLSID
  • szPluginName
    プラグインの名前
  • szPluginDescription
    プラグインの説明
  • szAuthor
    プラグインの作者名
  • hBitmap
    プラグインの追加と削除に表示されるボタンのビットマップハンドル

IToolBarPlugin Interface bookmark

メソッド bookmark

  • HRESULT Configuration([in]LONG hwnd)
    • 概要
      プラグインの設定・バージョン情報を表示するときに呼び出されます。
    • 引数
      • hwnd
        親ウィンドウのハンドル
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT SetPluginInfo([in] LONG ID)
    • 概要
      プラグインに割り当てられるユニークなIDを通知する時に呼び出されます。
      このIDはプラグインからの通知に利用されます。
    • 引数
      • ID
        プラグインに割り当てられるユニークなID
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT SetWebBrowser([in]IDispatch* Dispatch)
    • 概要
      Marineツールバーを実行しているInternet ExplorerのIWebBrowser2を通知するために呼び出されます。
    • 引数
      • Dispatch
        IWebBrowser2インターフェースのポインタ
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT HRESULT SetParentHwnd([in]LONG hwnd)
    • 概要
      プラグインの親となるウィンドウのハンドルを通知するために呼び出されます。
    • 引数
      • hwnd
        親ウィンドウのハンドル
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT GetButtonStyle([out]long* Style)
    • 概要
      プラグインがサポートするボタンのスタイルを取得するために呼び出されます。
    • 引数
      • Style
        ボタンスタイルを格納するためのポインタ
        BUTTON_STYLE_NORMAL:通常のボタン
        BUTTON_STYLE_WHEEL:プルダウン形式のボタン
        BUTTON_STYLE_DROPDOWN:通常のボタン + プルダウン形式のボタン
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT GetButtonText([out]BSTR* Text)
    • 概要
      ボタンに表示するテキストを取得するために呼び出されます。
    • 引数
      • Text
        ボタンテキストを格納するためのポインタ
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT GetButtonImage([out]long* bitmap)
    • 概要
      ボタンに表示するイメージを取得するために呼び出されます。
    • 引数
      • Text
        ボタンに表示するイメージ(ビットマップハンドル)を格納するためのポインタ
        ボタンイメージは複数指定することが可能です。ボタン1つの大きさは16×16です。
        複数してする場合は、(16×n)×16の形式で横に拡張して作成する必要があります。
    • 戻り値
      • HRESULT
        S_OK : 正常終了
        S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT GetButtonImageIndex([out]int* Index)
    • 概要
      ボタンに表示するイメージのインデックスを取得するために呼び出されます。
    • 引数
      • Index
        ボタンに表示するイメージのインデックスを格納するポインタ
        ボタンイメージは、0からの数値です。
        複数してする場合は、左側から0,1,2・・(指定したイメージ数 - 1)までの値になります。
    • 戻り値
      • HRESULT
        S_OK : 正常終了
        S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT GetToolTipText([out]BSTR* Text)
    • 概要
      ボタンのツールチップに表示する文字列を取得するために呼び出されます。
    • 引数
      • Text
        ボタンのツールチップに表示する文字列を格納するポインタ
    • 戻り値
      • HRESULT
        S_OK : 正常終了
        S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT GetMenu([out]long* Menu)
    • 概要
      ポップアップメニューの表示に使用するポップアップメニューハンドルを取得するために呼び出されます。
    • 引数
      • Menu
        ポップアップメニューのハンドルを格納するポインタ
    • 戻り値
      • HRESULT
        S_OK : 正常終了
        S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT QueryCommandUI([in]BSTR Text, [out]long* MenuStatus)
    • 概要
      ボタンの状態(有効・無効)を取得するために呼び出されます。
    • 引数
      • Text
        検索ボックスに入力されているテキスト
      • MenuStatus
        ボタンの状態を格納するポインタ
        BUTTON_STATUS_DISABLE:無効
        BUTTON_STATUS_ENABLE:有効
    • 戻り値
      • HRESULT
        S_OK : 正常終了
        S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT InvokeCommand([in]IDispatch* Dispatch, [in]BSTR Text, [in]long Command)
    • 概要
      ボタンがクリックされた時に呼び出されます。
    • 引数
      • Dispatch
        IWebBrowser2インターフェースのポインタ
      • Text
        検索ボックスに入力された文字列
      • Command
        ボタンに割り当てられたコマンドID(特に使用しません)
    • 戻り値
      • HRESULT
        S_OK : 正常終了
        S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT InvokeMenuCommand([in]IDispatch* Dispatch, [in]BSTR Text, [in]long Command)
    • 概要
      ポップアップメニューが選択された時に呼び出されます。
    • 引数
      • Dispatch
        IWebBrowser2インターフェースのポインタ
      • Text
        検索ボックスに入力された文字列
      • Command
        選択されたメニューのコマンドID
    • 戻り値
      • HRESULT
        S_OK : 正常終了
        S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT InvokeDropdown([in] IDispatch* Dispatch, [in] BSTR text, [in] LONG x, [in] LONG y, [out] VARIANT_BOOL* result)
    • 概要
      ポップアップメニュ-を表示するタイミングで呼び出されます。
      ポップアップメニューの表示は本体側で行うこともプラグイン側で処理することも可能です。

プラグイン側で独自のポップアップメニューを表示したい場合はこのメソッドで処理を行います。
プラグイン側でポップアップメニューを表示しない場合は、このメソッドの呼び出しの後、GetMenuが呼び出されます。

  • 引数
    • Dispatch
      IWebBrowser2インターフェースのポインタ
    • Text
      検索ボックスに入力された文字列
    • x
      ポップアップメニューを表示するx座標
    • y
      ポップアップメニューを表示するy座標
    • result
      ポップアップメニューをプラグインで表示したかどうかのVARIANT_BOOL値を格納するポインタ
      VARIANT_TRUE:処理した場合
      VARIANT_FALSE:処理しなかった場合
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

  • HRESULT Terminate(void)
    • 概要
      プラグインが開放される直前に呼び出されます。
      リソースの解放やウィンドウの破棄などの後処理を行います。
  • 引数
    • なし
  • 戻り値
    • HRESULT
      S_OK : 正常終了
      S_OK以外 : 処理失敗(処理失敗に該当するHRESULTの定数)

_DToolBarPluginEvents Event Interface bookmark

メソッド bookmark

  • void StatusChange([in]long ID, [in]long Status)
    • 概要
      プラグイン側の状態などが変更された時にプラグイン側から本体へ通知します。
    • 引数
      • ID
        プラグインに割り当てられるユニークなID
      • Status
        変更があった内容を格納するポインタ
        以下のOR組み合わせが指定可能です。
        EVENT_STATUS_TEXT:ボタンに表示するテキストを変更
        EVENT_STATUS_IMAGE:イメージを変更
        EVENT_STATUS_STATUS:ボタンの状態を変更
  • 戻り値
    • なし

ダウンロード bookmark

  • プラグイン開発を行う場合に必要となる各種ファイル