2009-05-05 83 views
5

我可以讓C#在代碼中啓動Outlook嗎?用c啓動Outlook#

在VB6中,我們使用對象 'Outlook.Application' 和寫:」從鏈接

Set oOutlook = CreateObject("Outlook.Application") 
Set oNameSpace = oOutlook.GetNamespace("MAPI") 
Set oInbox = oNameSpace.Folders(1) 
'Set oInbox = oInbox.Folders("Inbox") 
oInbox.Display 
'oOutlook.Quit 'Close All Outlook copies 

複製/粘貼:http://www.ozgrid.com/forum/showthread.php?t=73886

回答

4

如果你只是想啓動的前景;使用System.Diagnostics.Process將是最簡單的方法。 :)

+0

我認爲,將工作:)。謝謝! – jeje1983 2009-05-05 10:49:19

+0

並不真正適用於問題中的代碼,但是確定 – 2009-05-05 11:17:07

7

System.Diagnostics.Process只會啓動一個進程。

要執行其他操作(如選擇文件夾),您需要使用Microsoft Visual Studio Tools for Office(VSTO)。 here是它的參考。例如:

var outlook = new Microsoft.Office.Interop.Outlook.ApplicationClass(); 
outlook.Quit(); 
4

你可以使用它的ProgID獲得的類型和活化劑

Type objectType = Type.GetTypeFromProgID("Outlook.Application"); 
object outlook = Activator.CreateInstance(objectType); 

但在C#中使用這個,你將失去所有類型信息(即沒有智能感知),你需要調用使用LateBinding調用操作的一些難看的方法(Google for Type.Invoke)

其他選項是添加對Microsoft.Office.Interop.Outlook.ApplicationClass的引用,因此您有編譯時間類型信息併爲Outlook創建實例以通常的方式

using Microsoft.Office.Interop.Outlook; 
Microsoft.Office.Interop.Outlook.ApplicationClass outlook 
    = new Microsoft.Office.Interop.Outlook.ApplicationClass(); 

或者你可以使用我的Late Binding Helper庫,並使用它像這樣

Invoker outlook = BindingFactory.CreateAutomationBinding("Outlook.Application"); 
outlook.Method("Quit").Invoke(); 

沒有智能感知與這一個,但至少該庫將節省您從醜陋調用Type.Invoke,給你可以使用流暢的界面。

0

此作品(您可能需要將路徑更改爲它在其上的應用程序將運行在機器上的):

public static void StartOutlookIfNotRunning() 
{ 
    string OutlookFilepath = @"C:\Program Files (x86)\Microsoft Office\Office12\OUTLOOK.EXE"; 
    if (Process.GetProcessesByName("OUTLOOK").Count() > 0) return; 
    Process process = new Process(); 
    process.StartInfo = new ProcessStartInfo(OutlookFilepath); 
    process.Start(); 
}