有没有可能捕捉到“发送”?事件在Outlook 2010插件中的按钮'

本文关键字:插件 2010 Outlook 按钮 事件 有可能 发送 | 更新日期: 2023-09-27 18:09:31

因为我在功能区的类中,所以没有指向Outlook的指针。应用程序对象。因此,我不能使用

Application.ItemSend += new ApplicationEvents_11_ItemSendEventHandler(MyItemSendEventHandler)

此事件处理程序。

如何连接Outlook。应用程序对象在功能区类或有另一种方式来捕获发送事件?

public void SendEnMail(Office.IRibbonControl control) //OnAction Function
    {
        Outlook.Application oApp = new Outlook.Application();
        Outlook._MailItem myMail = (Outlook._MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
        myMail.Display(true);
        Outlook.Application application = Globals.ThisAddIn.Application;
        application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
    }
    void Application_ItemSend(object Item, ref bool Cancel)
    {
        string a = ((Microsoft.Office.Interop.Outlook.MailItem)Item).Body;
        System.Windows.Forms.MessageBox.Show(a);
        Cancel = true;
    }

我不能像那样捕获ItemSend事件。但是如果我将事件处理程序写入ThisAddIn类

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
         Application.ItemSend += new               Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
    }
void Application_ItemSend(object Item, ref bool Cancel)
    {
        string a = ((Microsoft.Office.Interop.Outlook.MailItem)Item).Body;
        System.Windows.Forms.MessageBox.Show(a);
        Cancel = true;
    }

有没有可能捕捉到“发送”?事件在Outlook 2010插件中的按钮'

我通常这样做:

Outlook.Application application = Outlook.Application.GetActiveInstance();

但这应该是一样的:

Outlook.Application application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;

或者如果你在制作COMAddIn,你可以在OnConnection事件中捕获应用程序对象。希望能有所帮助

编辑:在插件启动时完成对事件的绑定是有意义的。当您绑定到onAction上的事件时,您将(从那时起)为每个Item捕获您单击按钮的次数(因为它添加了一个新的处理程序)。你也可以试着接邮件。SendEvent

private Outlook.MailItem myMail;
public void SendEnMail(Office.IRibbonControl control) //OnAction Function
{
    myMail = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    myMail.Send += mail_Send;
}
void mail_Send(ref bool Cancel)
{
    string a = myMail.Body;
    System.Windows.Forms.MessageBox.Show(a);
    Cancel = true;
}

Edit2:对不起,我在用另一个图书馆。根据MSDN,它应该是Send事件而不是SendEvent事件。我已经相应地更改了示例。希望这次能成功。

我想我看到的问题是你使用的_MailItem,这是MailItem接口的一个接口。使用MailItem接口代替