2009-05-05 16 views
5

Posso fare in modo che C# avvii Outlook nel codice?Avviare Outlook con C#

In VB6 usiamo oggetto 'Outlook.Application' e scrivere:'

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 

Copia/Incolla da link: http://www.ozgrid.com/forum/showthread.php?t=73886

risposta

4

Se si desidera solo per avviare la prospettiva; usando System.Diagnostics.Process sarebbe il modo più semplice. :)

+0

penso che funzionerà :). Grazie! – jeje1983

+0

Non si applica realmente al codice nella domanda, ma ok –

7

System.Diagnostics.Process inizierà solo un processo.

Per eseguire azioni aggiuntive come la scelta delle cartelle, è necessario utilizzare Microsoft Visual Studio Tools per Office (VSTO). E here è di riferimento. Per esempio:

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

Mi viene detto che quando si utilizza l'interoperabilità di Office, non utilizzare mai le classi XXXClass. Penso che tu intenda var outlook = new Microsoft.Office.Interop.Outlook.Application(); – foson

+0

Grazie! Opinione molto interessante. Sai perché - non usi? Ho un'applicazione con elaborazione dati Excel-to-Excel complessa dove ci sono molti usi delle classi Excel.ApplicationClass. Tutto funziona in modo assolutamente corretto! Anche http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.application.aspx è un'interfaccia, non è vero? – abatishchev

+1

Utilizzo dell'applicazione funziona se Outlook è già in esecuzione ma non invocherà una nuova istanza di Outlook. Ho dovuto usare ApplicationClass che userà un'istanza esistente o invocherà una nuova istanza se necessario. – Damien

4

Si potrebbe utilizzare il suo ProgID per ottenere il tipo e l'attivatore

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

Ma usando questo in C# si perderanno tutte le informazioni sul tipo (cioè non IntelliSense) e avete bisogno di chiamare qualche brutto metodo per invocare le operazioni con LateBinding (google per Type.Invoke)

Un'altra opzione è aggiungere un riferimento a Microsoft.Office.Interop.Outlook.ApplicationClass, in modo da avere le informazioni sul tipo di tempo di compilazione e creare un'istanza per Outlook nel solito modo

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

Oppure si potrebbe usare la mia libreria Late Binding Helper e utilizzarlo come questo

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

No Intellisense con questo, ma almeno la biblioteca si salverà dal brutto chiamate Type.Invoke e dare invece un'interfaccia fluente.

0

Questo funziona (potrebbe essere necessario modificare il percorso a quello che è sulla macchina su cui verrà eseguito l'applicazione):

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