2016-02-05 83 views
1

我試過尋找這個問題的答案......原諒我,如果我忽視了它。如果Microsoft Outlook已經打開,如何檢查C#?

我想要做的是自動發送電子郵件。我在代碼中擁有我想要的所有內容,但代碼假定Outlook未打開。

有沒有一種方法可以讓我測試Outlook在打開Outlook的另一個實例之前是否已打開?

   Microsoft.Win32.RegistryKey key = 
      Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\microsoft\\windows\\currentversion\\app paths\\OUTLOOK.EXE"); 
      string path = (string)key.GetValue("Path"); 
      if (path != null) 
       System.Diagnostics.Process.Start("OUTLOOK.EXE"); 
      else 
       MessageBox.Show("There is no Outlook in this computer!", "SystemError", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
+0

「的代碼假定Outlook未打開」< - 這是什麼意思? –

+0

您可以使用WMI - > select * from win32_process並檢查名稱屬性,如果找不到outlook.exe,可以打開它。另一種方式可能是[Process.GetProcessesByName](https://msdn.microsoft.com/de-de/library/z3w4xdc9(v = vs.110).aspx) –

+0

對不起,不盡可能清晰。我想說的是,即使代碼已經打開,此代碼也會打開Outlook的一個實例。我想要做的是在打開另一個實例之前測試Outlook是否打開。 –

回答

2
int procCount = 0; 
Process[] processlist = Process.GetProcessesByName("OUTLOOK"); 
foreach (Process theprocess in processlist) 
{ 
    procCount++;    
} 
if (procCount > 0) 
{ 
    //outlook is open 
} 
+0

不需要計數器,你可以做processlist.length> 0 –

+0

我用這個修改後的版本來得到我需要的結果......謝謝!我沒有足夠的代表給你+代表...悲傷的一天:( –

+0

@Piggie_Pie很高興我可以幫你:) – Isuru

3

這裏是你可以測試是否Outlook處於打開狀態的一種方式,如果是,你「搶」當前實例。在您的catch塊中,您可以按照列出的方式打開新實例:

Outlook.Application ol; 

try 
{ 
    ol = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application"); 
} 
catch (Exception ex) 
{ 
    // open your new instance 
} 
0

您可以使用Process類

Process[] localByName = Process.GetProcessesByName("outlook"); 
// empty array if no outlook process found. 
if(localByName.Length > 0) 
{ /*do work because outlook is already open*/} 
else 
{/* start outlook */} 

另一種方式可能是一個wql-query

WqlObjectQuery wqlQuery = new WqlObjectQuery("SELECT * FROM Win32_Process"); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wqlQuery); 

foreach (ManagementObject process in searcher.Get()) 
{ 
    var name = process.GetPropertyValue("Name"); // e.g. outlook.exe 
} 
-1
using System.Diagnostics; //to make the Process work 

Process[ ] processlist = Process.GetProcessesByName 
("OUTLOOK:); 
If (processlist.Length>0) 
{ 
//outlook is open 
} 
相關問題