2012-03-05 51 views
1

實驗的幾個小時後和谷歌搜索,我終於來到了什麼我可以計算出我自己的結尾,所以這裏是我現在有:Outlook 2010加載項,我如何取消關閉事件,最小化窗口? (C#)

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Application.Startup += new 
     Outlook.ApplicationEvents_11_StartupEventHandler(
     ApplicationObject_Startup); 
    ((Outlook.ApplicationEvents_11_Event)Application).Quit += new 
     Outlook.ApplicationEvents_11_QuitEventHandler(
     ApplicationObject_Quit); 
} 
void ApplicationObject_Startup() 
{ 
    MessageBox.Show("Startup Event"); 
    ((Outlook.ExplorerEvents_10_Event)Application.ActiveExplorer()).Close += new 
     Outlook.ExplorerEvents_10_CloseEventHandler(
     ExplorerObject_Close); 
} 

void ApplicationObject_Quit() 
{ 
    MessageBox.Show("Quit Event"); 
} 

void ExplorerObject_Close() 
{ 
    MessageBox.Show("Explorer Close Event"); 
} 

所有這些作品,當我關閉Outlook時,我會看到資源管理器關閉事件並按順序退出事件消息框。然而,這個觀點似乎已經關閉了,我不知道如何取消這些事件(對於其他一些事件,有一個布爾值Cancel可以設置爲false,但不適用於這些事件?),或發送一個最小化事件(我一直無法如何解決這個問題)。

如果有人有任何建議,我會很感激。我在工作中有一些閒暇時間,並且認爲我會嘗試學習一些插件開發的東西,並且同時解決一個非常討厭的前景部分!

編輯:我也曾嘗試:

Application.ActiveExplorer().WindowState = Outlook.OlWindowState.olMinimized; 

在啓動時只需立即最小化窗口。它最大限度地減少了前景,但不會將系統托盤放到系統托盤上(這很有趣,可能實際上是一個錯誤,因爲最小化設置爲最小化托盤...)但是,如果我可以擺脫關閉/退出事件(S)我可以至少只是最小化任務欄的窗口。

+0

據我所知,無法阻止Outlook關閉AddIn。 – user7116 2012-03-05 20:31:34

+0

如果不在Addin那麼如何?你有沒有資源可以指給我? – paycheck87 2012-03-05 20:56:51

+0

和我只是得到虛假的希望通過看到設置的方法的返回值從VB取消事件的錯誤? http://msdn.microsoft.com/en-us/library/ff862184.aspx – paycheck87 2012-03-05 20:58:21

回答

2
private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     try 
     { 
      // Assign startup and quit events 
      Application.Startup += new Outlook.ApplicationEvents_11_StartupEventHandler(ApplicationObject_Startup); 
      ((Outlook.ApplicationEvents_11_Event)Application).Quit += new Outlook.ApplicationEvents_11_QuitEventHandler(ApplicationObject_Quit); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e) 
    { 
     try 
     { 
      // Remove the startup and quit events 
      Application.Startup -= new Outlook.ApplicationEvents_11_StartupEventHandler(ApplicationObject_Startup); 
      ((Outlook.ApplicationEvents_11_Event)Application).Quit -= new Outlook.ApplicationEvents_11_QuitEventHandler(ApplicationObject_Quit); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

    void ApplicationObject_Startup() 
    { 
     try 
     { 
      // Minimize to taskbar 
      Application.ActiveExplorer().WindowState = Outlook.OlWindowState.olMinimized; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

    void ApplicationObject_Quit() 
    { 
     try 
     { 
      // Restart outlook minimized 
      ProcessStartInfo psiOutlook = new ProcessStartInfo("OUTLOOK.EXE", "/recycle"); 
      psiOutlook.WindowStyle = ProcessWindowStyle.Minimized; 
      Process.Start(psiOutlook); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "EXCEPTION", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

這不是很乾淨,但這對我很有用。它只是在您關閉Outlook時啓動一個新的Outlook實例,並始終在啓動時最小化Outlook。主要缺點是,如果不先禁用外接程序或在任務管理器中查殺「outlook.exe」,則無法再真正關閉Outlook。不是最好的解決方案,但它確實可以確保您永遠不會錯過電子郵件或日曆提醒,因爲您意外關閉了Outlook。

編輯(10/02/12):我更新了代碼的重啓展望部分。它現在用/ recycle開關啓動outlook.exe。這會嘗試在現有窗口中重新加載Outlook。它還使用最小化的窗口樣式重新啓動Outlook。這可以防止Outlook的加載窗口出現。