2009-05-05 5 views
5

Puis-je faire C# démarrer Outlook dans le code?Démarrer Outlook avec C#

En VB6 nous utilisons l'objet 'Outlook.Application' et écrire: »

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 

Copier/Coller lien: http://www.ozgrid.com/forum/showthread.php?t=73886

Répondre

4

Si vous voulez juste commencer les perspectives; en utilisant System.Diagnostics.Process serait le moyen le plus facile. :)

+0

Je pense que cela va fonctionner :). Merci! – jeje1983

+0

Ne s'applique pas vraiment au code dans la question, mais ok –

7

System.Diagnostics.Process démarre seulement un processus.

Pour effectuer des actions supplémentaires telles que la sélection de dossiers, vous devez utiliser Microsoft Visual Studio Tools pour Office (VSTO). Et here c'est sa référence. Par exemple:

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

On me dit que lorsque vous utilisez Office interop, n'utilisez jamais les classes XXXClass. Je pense que vous voulez dire var outlook = new Microsoft.Office.Interop.Outlook.Application(); – foson

+0

Merci! Avis très intéressant Savez-vous pourquoi - ne pas utiliser? J'ai une application avec Excel-to-Excel complexe de traitement de données où il y a beaucoup de classes Excel.ApplicationClass classes. Tout fonctionne parfaitement correctement! Aussi http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.application.aspx est une interface, n'est ce pas? – abatishchev

+1

L'utilisation de l'application fonctionne si Outlook est déjà en cours d'exécution mais n'invoque pas une nouvelle instance d'Outlook. J'ai dû utiliser ApplicationClass qui utilisera une instance existante ou appellera une nouvelle instance si nécessaire. – Damien

4

Vous pouvez utiliser le ProgID pour obtenir le type et l'activateur

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

Mais en utilisant cela en C#, vous perdrez toutes les informations de type (ie pas IntelliSense) et vous devez appeler une méthode laide pour invoquer les opérations avec LateBinding (google pour Type.Invoke)

Autre option est d'ajouter une référence à Microsoft.Office.Interop.Outlook.ApplicationClass, de sorte que vous avez compiler des informations de type de temps et de créer une instance pour Outlook de la manière habituelle

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

Ou vous pouvez utiliser ma bibliothèque Late Binding Helper et de l'utiliser comme celui-ci

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

Pas IntelliSense avec celui-ci, mais au moins la bibliothèque vous permettra d'économiser des appels laids à Type.Invoke et donner vous une interface fluide à la place.

0

Cela fonctionne (vous devrez peut-être changer le chemin de ce qu'elle est sur la machine sur laquelle l'application se déroulera):

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