は、いくつかの時間前、私はOutlookのイベントリスナーを実装しました。私はOutlookで動作するためにインポートされたOutlook_tlbライブラリを使用しました。あなたはIConnectionPoint
インターフェイス経由でOutlook通知を受け取ることができます。イベントリスナクラスは、IDispatch
インターフェイス(少なくともInvoke
メソッド)を実装する必要があります。 ので、サンプルコードがあります:あなたは、OutlookApplicationのインスタンスを取得する接続ポイントを見つけて、イベントリスナーとして自身を登録する必要があり、コンストラクタコードで
TOutlookEventListener = class(TInterfacedObject, IDispatch)
strict private
FConnectionPoint : IConnectionPoint;
FCookie : integer;
function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
function GetIDsOfNames(const IID: TGUID; Names: Pointer;
NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
public
constructor Create();
end;
:として 宣言TOutlookEventListenerは
constructor TOutlookEventListener.Create();
var cpc : IConnectionPointContainer;
ol : IDispatch;
begin
inherited Create();
ol := GetActiveOleObject('Outlook.Application');
cpc := ol as IConnectionPointContainer;
cpc.FindConnectionPoint(DIID_ApplicationEvents, FConnectionPoint);
FConnectionPoint.Advise(self, FCookie);
end;
Invoke
を使用してメソッドを使用すると、イベントをフィルタリングできます。 Quit
イベントはDISPID = 61477
function TOutlookEventListener.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
begin
result := S_OK;
case DispId of
61442 : ; // ItemSend(const Item: IDispatch; var Cancel: WordBool);
61443 : ; // newMailEventAction();
61444 : ; // Reminder(const Item: IDispatch);
61445 : ; // OptionsPagesAdd(const Pages: PropertyPages);
61446 : ; // Startup;
61447 : begin
FConnectionPoint.Unadvise(FCookie);
FConnectionPoint := nil;
form1.OutlookClosed(self);
end
else
result := E_INVALIDARG;
end;
end;
他の方法はE_NOTIMPL結果を返す必要があります。
OnCreateイベントハンドラの形式で、TOutlookEventListenerのインスタンスを作成します(outlookがすでに実行されているとします)。通知メッセージを表示するためにTForm1.OutlookClosed(送信者:TObject)イベントも使用しました。
見通しのイベントについては、この記事をお読みください。http://www.codeproject.com/Articles/4230/Implementing-Outlook-2002-XP-Event-Sinks-in-MFC-C
は私だけです:)しかし、まだそれが便利になりかもしれないもの償還Googleで検索しましたので、私の答えは、完全には正しくないようです。 – teran
あなたの答えは完璧です。この質問は償還とは関係ありません:-) –
@DmitryStreblechenko ok :) – teran