我一直试图寻找这个问题的答案......如果我忽视它,请原谅我。
我要做的是自动发送电子邮件。我在这段代码中拥有我想要的一切,但代码假定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 :(得分: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
}