2009-05-05 43 views
5

Tôi có thể đặt C# bắt đầu Outlook trong mã không?Bắt đầu Outlook với C#

Trong VB6 chúng tôi sử dụng đối tượng 'Outlook.Application' và viết:'

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 

Copy/Paste từ liên kết: http://www.ozgrid.com/forum/showthread.php?t=73886

Trả lời

4

Nếu bạn chỉ muốn bắt đầu triển vọng; sử dụng System.Diagnostics.Process sẽ là cách dễ nhất. :)

+0

Tôi nghĩ rằng sẽ làm việc :). Cảm ơn! – jeje1983

+0

Không thực sự áp dụng cho mã trong câu hỏi, nhưng ok –

7

System.Diagnostics.Process sẽ chỉ bắt đầu quá trình.

Để thực hiện các tác vụ bổ sung như chọn thư mục, bạn cần sử dụng Microsoft Visual Studio Tools for Office (VSTO). Và here là tham chiếu của nó. Ví dụ:

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

Tôi được thông báo rằng khi sử dụng Office interop, không bao giờ sử dụng các lớp XXXClass. Tôi nghĩ bạn có nghĩa là var outlook = new Microsoft.Office.Interop.Outlook.Application(); – foson

+0

Cảm ơn! Ý kiến ​​rất thú vị. Bạn có biết tại sao - không sử dụng? Tôi có một ứng dụng với xử lý dữ liệu Excel-to-Excel phức tạp, nơi có rất nhiều các lớp Excel.ApplicationClass sử dụng. Mọi thứ hoạt động hoàn toàn chính xác! Ngoài ra http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.application.aspx là một giao diện, phải không? – abatishchev

+1

Sử dụng Ứng dụng hoạt động nếu Outlook đang chạy nhưng nó sẽ không gọi một phiên bản Outlook mới. Tôi đã phải sử dụng ApplicationClass mà sẽ sử dụng một thể hiện có hoặc gọi một thể hiện mới nếu cần thiết. – Damien

4

Bạn có thể sử dụng ProgID của nó để có được các loại và các hoạt

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

Nhưng sử dụng điều này trong C# bạn sẽ mất tất cả các loại thông tin (tức là không có IntelliSense) và bạn cần phải gọi một số phương pháp xấu xí để gọi các hoạt động với LateBinding (google cho Type.Invoke)

Tùy chọn khác là thêm tham chiếu đến Microsoft.Office.Interop.Outlook.ApplicationClass, vì vậy bạn có thể biên dịch thông tin kiểu thời gian và tạo một cá thể cho Outlook theo cách thông thường

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

Hoặc bạn có thể sử dụng thư viện Late Binding Helper tôi và sử dụng nó như thế này

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

Không Intellisense với thế này, nhưng ít nhất thư viện sẽ giúp bạn tiết kiệm từ các cuộc gọi xấu xí để Type.Invoke và cung cấp cho thay vào đó, bạn sử dụng giao diện thông thạo.

0

này hoạt động (bạn có thể phải thay đổi đường dẫn đến những gì nó là trên máy mà trên đó các ứng dụng sẽ chạy):

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(); 
}