如何使用 C# 检查 Outlook 是否已打开Microsoft

本文关键字:Microsoft 是否 Outlook 何使用 检查 | 更新日期: 2023-09-27 18:33:20

我试过寻找这个问题的答案...如果我忽略了它,请原谅我。

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

如何使用 C# 检查 Outlook 是否已打开Microsoft

由于我喜欢干净的单行代码,因此我使用的是以下内容:

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

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

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

您可以使用 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 查询

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
}
using System.Diagnostics; //to make the Process work
Process[ ] processlist = Process.GetProcessesByName 
("OUTLOOK:);
If (processlist.Length>0)
{
//outlook is open
}