如果Microsoft Outlook已经打开,如何使用C#进行检查?

时间:2016-02-05 14:05:31

标签: c# outlook email-integration

我一直试图寻找这个问题的答案......如果我忽视它,请原谅我。

我要做的是自动发送电子邮件。我在这段代码中拥有我想要的一切,但代码假定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);

5 个答案:

答案 0 :(得分:6)

因为我喜欢干净的单行,所以我使用的是:

If (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Any())
  return true;

答案 1 :(得分:4)

这是一种可以测试Outlook是否打开的方法,如果是,则“抓住”当前实例。在catch块中,您可以按照列出的方式打开新实例:

Outlook.Application ol;

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

答案 2 :(得分:2)

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

答案 3 :(得分: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
}

答案 4 :(得分:-1)

using System.Diagnostics; //to make the Process work

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