如果Microsoft Outlook已经打开,如何检查C#?
我试过寻找这个问题的答案......原谅我,如果我忽视了它。如果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);
int procCount = 0;
Process[] processlist = Process.GetProcessesByName("OUTLOOK");
foreach (Process theprocess in processlist)
{
procCount++;
}
if (procCount > 0)
{
//outlook is open
}
不需要计数器,你可以做processlist.length> 0 –
我用这个修改后的版本来得到我需要的结果......谢谢!我没有足够的代表给你+代表...悲伤的一天:( –
@Piggie_Pie很高兴我可以帮你:) – Isuru
这里是你可以测试是否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-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
}
using System.Diagnostics; //to make the Process work
Process[ ] processlist = Process.GetProcessesByName
("OUTLOOK:);
If (processlist.Length>0)
{
//outlook is open
}
“的代码假定Outlook未打开”
您可以使用WMI - > select * from win32_process并检查名称属性,如果找不到outlook.exe,可以打开它。另一种方式可能是[Process.GetProcessesByName](https://msdn.microsoft.com/de-de/library/z3w4xdc9(v = vs.110).aspx) –
对不起,不尽可能清晰。我想说的是,即使代码已经打开,此代码也会打开Outlook的一个实例。我想要做的是在打开另一个实例之前测试Outlook是否打开。 –