2

目的: アドインでは、カレンダー通知が出席者に送信されないようにする必要がありますが、同時に、送信ボタンがクリックされたときにカスタム アクションを実行したいと考えています。要するに、送信ボタンに関連付けられたカスタム アクションのみを実行する必要があります。 SEND ボタンのデフォルト機能ではありません。

私はVSTO2010、MS Office 2007、.net 4を使用しています。

Ms office 2003、2007、2010 でこれを行う必要があります (2007 と 2010 のサポートで十分です)。

4

2 に答える 2

2

OnClickの [送信] ボタンのイベントをインターセプトする必要がありますCommandBar。はい、Outlook 2010 ではリボンが使用され、コマンド バーは表示されませんが、CommandBarボタンを含むプログラムはまだ存在します。互換性のために、リボン ボタンは引き続き対応するCommandBarButtonオブジェクトでイベントを発生させます。

さらに複雑なことに、「予定」が「会議」に変わるまで、必要なボタンは存在しません。

いくつかのフィールドが必要です:

private CommandBars mCommandBars;
private CommandBarButton mCommandButtonSendMeeting;

NewInspectorイベントで、これらの行を追加します

mCommandBars = this.Inspector.CommandBars;
mCommandBars.OnUpdate += CommandBars_OnUpdate;

他の場所

private void CommandBars_OnUpdate()
{
    if (mCommandButtonSendMeeting == null)
    {
        mCommandButtonSendMeeting = (CommandBarButton)CommandBars.FindControl(Missing.Value, 2617, Missing.Value, Missing.Value);
        mCommandButtonSendMeeting.Click += CommandButtonSendMeeting_Click;
    }
}

private void CommandButtonSendMeeting_Click(CommandBarButton Ctrl, ref bool CancelDefault)
{
    CancelDefault = true;
    // Do whatever here.
}
于 2012-08-24T23:55:40.607 に答える
0

ここでは、別の解決策があります。本当にボタンに触れる必要はありません。ボタンとは何の関係もありません。これらの目的のために、Outlook が提供するイベントを使用する必要があります。Add-in_StartUp に次の行を含めるだけです。

Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);  

そしてもちろん、イベント ハンドラーの実装:

void Application_ItemSend(object Item, ref bool Cancel)
{
    MessageBox.Show("Yihha!!");
    Cancel = true;
}

これにより、送信するメッセージが傍受されます。Outlook 2010 で動作します。

于 2013-06-27T16:41:53.233 に答える