#ifndef IABCInternalH #define IABCInternalH /* IABCInternal2 : {8564AF17-FD7B-46ef-AC5C-16188F96CB57} プラグインからABCの機能を使用したり制御したりするための窓口となるクラス。 このクラスの実装はABC内部で行われており、プラグイン側はインターフェースか ら機能を呼び出すだけでよい。 注意点: 互換性維持のため、プラグイン登録時に引数として渡されるIUnknownから QueryInterfaceにてIID_IABCInternal2を検索すべきである。 また、IABCInternal2は、AddRef、Releaseを無視する。 なお、COMの基礎はWin32 SDKまたは解説サイトを適宜参照のこと。 渡される構造体のメンバーや引数のうち、char *で定義されるものは、特に 断りがない限り、NULLで終わる文字列である */ #include /*-------------------------------------------------------------------------------------------------- IID定義部 --------------------------------------------------------------------------------------------------*/ // {99B52BA6-F679-4db2-BD6D-403D63411EC8} //DEFINE_GUID(IID_IABCInternal,0x99b52ba6, 0xf679, 0x4db2, 0xbd, 0x6d, 0x40, 0x3d, 0x63, 0x41, 0x1e, 0xc8); // {8564AF17-FD7B-46ef-AC5C-16188F96CB57} DEFINE_GUID(IID_IABCInternal2,0x8564af17, 0xfd7b, 0x46ef, 0xac, 0x5c, 0x16, 0x18, 0x8f, 0x96, 0xcb, 0x57); /*-------------------------------------------------------------------------------------------------- 関数定義部 --------------------------------------------------------------------------------------------------*/ // Method : ABCPlugin_Initialize // Title : プラグイン初期化関数 // Desc. : プラグインがロードされるとき、プラグイン初期化のために呼び出される。 // DLLファイルからエクスポートすること typedef int (__stdcall *TABCPlugin_Initialize)(DWORD Handle,IUnknown *pABCInternal); // Method : ABCPlugin_Uninitialize // Title : プラグイン開放通知関数 // Desc. : プラグインがアンロードされるとき、プラグイン開放通知のために呼び出される // DLLファイルからエクスポートすること typedef int (__stdcall *TABCPlugin_Uninitialize)(DWORD Handle); // Method : ABCPlugin_EventHandler // Title : イベント発生 // Desc. : プラグインが指定したイベントが発生した場合に、呼び出される。 // 渡される引数の内容は、イベントの種類によって異なるため、イベントの定数定義部を参照のこと。 // tagはプラグインが登録したものが渡されるので、内容については定義されていない。 typedef int (__stdcall *TABCPlugin_EventHandler)(unsigned int evtid,WORD tag,void *vp1,void *vp2,long lparam); // Struct : TPluginMenuInfo // Title : 追加するメニューに関する情報 struct TPluginMenuInfo { int cbSize; // cbSizeを含む構造体のサイズ char *Caption; // メニューに表示されるテキスト char *Hint; // ステータスバーに表示されるヒント char *ResName; // メニュー/ツールバーに表示されるイメージのリソース名 TABCPlugin_EventHandler EventHandler; // メニュー/ツールバークリック時のイベントハンドラ }; // Struct : TDecodedFileInfo // Title : デコードされたファイルに関する情報 struct TDecodedFileInfo { int cbSize; // cbSizeを含む構造体のサイズ char *Subject; // Subject char *From; // メールアドレス char *FromName; // 名前 char *Keyword; // キーワード char *Organization; // 所属 char *MessageID; // メッセージID char *Date; // 投稿日付 char *GroupName; // グループ名 char *FileName; // ファイル名 void *Data; // ファイルの内容(ファイルサイズと同等の大きさ) __int64 FileSize; // ファイルサイズ char *FileType; // ファイルの種類 unsigned int CRC32; // CRC(ABCの設定で、CRC32を計算する設定になっている場合のみ) }; /*-------------------------------------------------------------------------------------------------- インターフェース定義部 --------------------------------------------------------------------------------------------------*/ class IABCInternal2 : public IUnknown { public: /* ------------------------------------------------------------- IUnknown -------------------------------------------------------------*/ virtual HRESULT __stdcall QueryInterface(const GUID &IID, void **ppObj) = 0; virtual ULONG __stdcall AddRef(void) = 0; virtual ULONG __stdcall Release(void) = 0; /* ------------------------------------------------------------- IABCInternal2 -------------------------------------------------------------*/ // Method : GetWindowHandle // Title : ABCのメインウィンドウのハンドルを取得。 // Desc. : ダイアログなどのオーナーに設定するためにHWNDを取得する // Result : S_OK = 成功 // E_INVALIDARG = 引数がNULLの場合など virtual HRESULT __stdcall GetWindowHandle(HWND *hwnd) = 0; // Method : InsertItem/RemoveItem/SetItemState // Title : ABCのメニュー、ツールバーのアイテムを追加・削除・有効/無効化 // Desc. : メニューやツールバーのアイテムを追加・削除・有効/無効化する。 // HandleとTagで識別されるので、Tagをプラグインの中で重複させないこと // ここで指定したTagを引数に、プラグイン機能が呼び出される。 // Captionは表示文字列、hintはヒントメッセージ。 // flagsについては、定数定義部を参照 // Result : S_OK = 成功 virtual HRESULT __stdcall InsertItem(DWORD Handle,WORD Tag,const TPluginMenuInfo *pMenuInfo,DWORD flags) = 0; virtual HRESULT __stdcall RemoveItem(DWORD Handle,WORD Tag) = 0; virtual HRESULT __stdcall SetItemState(DWORD Handle,WORD Tag,bool Enabled) = 0; // Method : LogMessage // Title : ログウィンドウにメッセージを表示。 // Desc. : msgで指定した文章(NULLターミネート)を、ABCのログウィンドウ // に表示する。debugonlyをtrueで呼び出すと、ABCのデバッグ機能が // オンの場合にのみ表示される。 // Result : S_OK = 成功 // E_INVALIDARG = 引数がNULLの場合など virtual HRESULT __stdcall LogMessage(const char *msg,bool debugonly) = 0; // Method : RegistEventHandler // Title : イベント発生時の呼び出しを要求 // Desc. : evtidで指定したイベントが発生すると、evtid,tagを引数に、 // プラグインのイベントハンドラが呼び出される // evtidについては、定数定義部を参照。 // Unregistのevtidに0xFFFFFFFFを渡すと同じアドレスを持つイベント // ハンドラをすべて削除する // tagはプラグイン側で定義してよい。(ただし0xFFFF以外) // Unregistのtagに、0xFFFFを渡すと、同じイベントID、アドレスを // 持つイベントハンドラをすべて削除する // // Result : S_OK = 成功 // S_FALSE = 無効なID // E_INVALIDARG = 引数がNULLの場合など virtual HRESULT __stdcall RegistEventHandler(DWORD Handle,unsigned int evtid,TABCPlugin_EventHandler fn,WORD tag,bool MultiThread) = 0; virtual HRESULT __stdcall UnregistEventHandler(DWORD Handle,unsigned int evtid,TABCPlugin_EventHandler fn,WORD tag) = 0; // Method : CallABCFunction // Title : ABC内部の機能を呼び出す。 // Desc. : 機能ID(fid)で指定した機能を呼び出す。vp1,vp2,lparamは呼び出す // 機能によって異なる // fidにEvent IDを指定すると、ほかのプラグインを呼び出すことも可 // 能。ただし推奨しない(特に、値や結果を受け取るQuery系イベント)。 virtual HRESULT __stdcall CallABCFunction(DWORD fid,void *vp1,void *vp2,long lparam) = 0; }; /*-------------------------------------------------------------------------------------------------- 定数定義部 --------------------------------------------------------------------------------------------------*/ //------------------------------------ メニュー作成フラグ 定義部 ----------------------------------- #define ABCPMF_ADDTOTOOLBAR 1 // ツールバーにボタンを追加 #define ABCPMF_DISABLEONSTART 2 // ダウンロード開始時にボタンを無効化 #define ABCPMF_ALLOWCHECK 4 // チェックボックス動作を有効にする #define ABCPMF_CHECKED 8 // チェックされた状態 #define ABCPMF_FORBIDSTARTONCLICK 16 // クリック時、ダウンロード開始を禁止する //------------------------------------ ダウンロード対象 定義部 ----------------------------------- #define DLT_HEADER 1 #define DLT_BODY 2 #define DLT_ALL (DLT_HEADER | DLT_BODY) //------------------------------------- イベントID定義部 ------------------------------------------- // EID_DOWNLOAD_START : 1つ以上のアカウントがダウンロードを開始 #define EID_DOWNLOAD_START 0x0001 // EID_DOWNLOAD_STOP : 全てのアカウントのダウンロードが終了 // lparam : long : 0 = 全てのアカウントが終了 / 1 = ユーザによって中断 #define EID_DOWNLOAD_STOP 0x0002 // EID_ABC_TERMINATE : ABCが終了する #define EID_ABC_TERMINATE 0x0003 // EID_QUERY_FILETYPE : ファイルの種類判定 // vp1 : char * : NULLで終わるファイル名 // vp2 : char * : ファイルの種類を受け取るバッファ // lparam : long : NULLの分を含んだバッファの長さ // Result : bool : true = 判定済み / false = 判定不可(vp2は変更してはならない) #define EID_QUERY_FILETYPE 0x0100 // EID_QUERY_GROUPALIAS : グループ名のエイリアス // vp1 : char * : NULLで終わるグループ名 // vp2 : char * : エイリアスを受け取るバッファ // vp3 : long : NULLの分を含んだバッファの長さ // Result : bool : true = 判定済み / false = 判定不可(vp2は変更してはならない) #define EID_QUERY_GROUPALIAS 0x0101 // EID_QUERY_FILENAME: ファイル名のエイリアス // vp1 : char * : NULLで終わるファイル名 // vp2 : char * : ファイルを受け取るバッファ // vp3 : long : NULLの分を含んだバッファの長さ // Result : bool : true = 判定済み / false = 判定不可(vp2は変更してはならない) #define EID_QUERY_FILENAME 0x0102 // EID_QUERY_SAVEFILE: ファイルを保存するか否かを問い合わせる // vp1 : TDecodedFileInfo * : 保存されるファイルに関する情報 // Result : bool : true = 保存する / false = 保存しない #define EID_QUERY_SAVEFILE 0x0103 // EID_QUERY_SAVEFOLDER: 保存するフォルダ名を問い合わせる // vp1 : TDecodedFileInfo * : 保存されるファイルに関する情報 // vp2 : char * : フォルダ名を受け取るバッファ // vp3 : long : NULLの分を含んだバッファの長さ // Result : bool : true = 保存する / false = 保存しない #define EID_QUERY_SAVEFOLDER 0x0104 // EID_FILESAVED: ファイルの保存完了 // vp1 : TDecodedFileInfo // vp2 : char * : NULLで終わるフルパスのファイル名 #define EID_FILESAVED 0x0200 // EID_XOVERFILTER: XOVERフォーマットでのフィルタリング // lparam1 : char * : NULLで終わるXOVER(OverView)ヘッダ // Result : int : フィルタ判定結果 0 = マッチしなかった / 1 = フィルタ対象としてマッチ / 2 = フィルタ除外対象としてマッチ #define EID_FILTER_XOVER 0x0300 // EID_FILTER: フィルタリング // vp1 : TFilterSrc * : TFilterSrc構造体へのポインタ // Result : int : フィルタ判定結果 0 = マッチしなかった / 1 = フィルタ対象としてマッチ / 2 = フィルタ除外対象としてマッチ struct TFilterSrc { int cbSize; // cbSizeをふくめたTFileSrcのサイズ int ArticleNo; int Size; char *GroupName; char *Subject; char *From; char *FromName; char *MessageID; char *Date; char *Xref; }; #define EID_FILTER 0x0301 // EID_LOG : ログ // vp1 : TLogSrc * : TLogSrc構造体へのポインタ // Result : bool #define EID_LOG 0x0400 struct TLogSrc { int cbSize; // cbSizeをふくめたTLogSrcのサイズ char *GroupName; char *Subject; char *From; char *FromName; char *MessageID; char *Date; char *SavedFiles; // 保存されたファイル名(CRLF区切り) char *Headers; // 全ヘッダ char *MessageText; // 記事本体(ただし添付ファイルと認識された部分を除く) }; // EID_DATABASEFOLDER : データベースファイルの保存先 // vp1 : char * : データベースファイルの保存先 #define EID_DATABASEFOLDER 0x0401 // EID_PARTSFOLDER : パーツファイルの保存先 // vp1 : char * : パーツファイルの保存先 #define EID_PARTSFOLDER 0x0402 // EID_SAVEFOLDER : ファイルの保存先 // vp1 : char * : ファイルの保存先 #define EID_SAVEFOLDER 0x0403 // EID_REGIST_SAVERULE : 保存フォルダのルールを登録する // vp1 : TRegistSaveRule * : // Result : bool : 0 = 失敗 #define EID_REGIST_SAVERULE 0x500 struct TRegistSaveRule { int cbSize; // cbSizeを含めたTRegistSaveRuleのサイズ char *outCaptionBuf; // 設定画面で表示されるルールの名称 int inCaptionBufSize; // CaptionBufのサイズ DWORD outTag; // TABCPlugin_EventHandler outEventHandler; // イベントハンドラ。マルチスレッド対応であること }; // EID_QUERY_SAVERULE : 保存フォルダのルール // vp1 : TDecodedFileInfo * : 保存されるファイルに関する情報 // vp2 : char * : フォルダ名受け取りバッファ // lparam : long : vp2のサイズ #define EID_QUERY_SAVERULE 0x501 // EID_REGIST_PAGECTL : 画面右下のページコントロールにページを追加 // Desc. : 画面右下のページコントロールに新しいタブを追加する。ページのサイズは270 x 120が保証される // vp1 : HWND : オーナー // vp2 : char * : キャプションバッファ // lparam : long : バッファのサイズ // Result : bool : 成功時はtrue(非0) #define EID_REGIST_PAGECTL 0x502 // EID_REGIST_FILTER : // Desc. : 記事のフィルタ機能を登録する // vp1 : char * : キャプションバッファ // lparam : long : バッファのサイズ // Result : bool : 成功時はtrue(非0) #define EID_REGIST_FILTER 0x503 struct TRegistFilter { int cbSize; // cbSizeを含めたTRegistSaveRuleのサイズ char *outCaptionBuf; // 設定画面で表示されるルールの名称 int inCaptionBufSize; // CaptionBufのサイズ DWORD outEvent; // 呼び出されるイベント(EID_FILTER/EID_FILTER_XOVER) DWORD outTag; // TABCPlugin_EventHandler outEventHandler; // イベントハンドラ。マルチスレッド対応であること DWORD outConfigTag; // TABCPlugin_EventHandler outConfigEventHandler; // イベントハンドラ。マルチスレッド対応であること }; // EID_PAINT // vp1 : RECT * : キャンバスのサイズ // vp2 : HDC : キャンバスのハンドル // #define EID_PAINT 0x504 // EID_TIMER : 1秒ごとに発生するタイマー #define EID_TIMER 0x1000 //------------------------------------- ファンクションID定義部 ------------------------------------- // FID_START : ダウンロード開始 // lparam : long : ダウンロードする種類 #define FID_DOWNLOAD_START (0x8000 + EID_DOWNLOAD_START) // FID_STOP : ダウンロードを中止させる #define FID_DOWNLOAD_STOP (0x8000 + EID_DOWNLOAD_STOP) // FID_ABC_TERMINATE : ABCを終了させる #define FID_ABC_TERMINATE (0x8000 + EID_ABC_TERMINATE) #define FID_QUERY_FILETYPE (0x8000 + EID_QUERY_FILETYPE) #define FID_QUERY_SAVEFILE (0x8000 + EID_QUERY_SAVEFILE) #define FID_QUERY_GROUPALIAS (0x8000 + EID_QUERY_GROUPALIAS) #endif