C# 如果Microsoft Outlook已打开,如何使用C检查?
我试着寻找这个问题的答案。。。如果我忽略了,请原谅C# 如果Microsoft Outlook已打开,如何使用C检查?,c#,outlook,email,C#,Outlook,Email,我试着寻找这个问题的答案。。。如果我忽略了,请原谅 我想做的是自动发送电子邮件。我在这段代码中有我想要的一切,但代码假定Outlook未打开 在Outlook打开另一个Outlook实例之前,是否有办法测试Outlook是否已打开 Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\microsoft\\wi
我想做的是自动发送电子邮件。我在这段代码中有我想要的一切,但代码假定Outlook未打开 在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);
这里有一种方法可以测试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 */}
另一种方式可能是
因为我喜欢干净的一行纸,所以我使用了以下内容:
if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Any())
return true;
代码假定Outlook未打开。您可以使用WMI->select*从win32_进程中选择并检查其中的name属性,如果找不到Outlook.exe,则可以打开它。另一种方式可能是为没有尽可能清楚而感到抱歉。我想说的是,这段代码会打开Outlook的一个实例,即使它已经打开了。我试图做的是在打开另一个实例之前测试Outlook是否已打开。@Piggie_Pie检查我发布的答案无需计数器,您只需执行processlist.length>0我使用了此的修改版本来获得我需要的结果。。。非常感谢。我没有足够的rep给你+rep。。。悲伤的一天:@Piggie\u Pie很高兴我能帮助你:@Piggie\u Pie-如果Irusu的答案满足你的问题,请接受并将其标记为已接受,这将比a+1更好。@Hambone-谢谢。。。我在这里还是新手,没有意识到我可以选中复选标记:问题解决了!干净的溶液很好。如果将大写字母从If编辑为小写,则复制/粘贴也可以:
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
}
if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Any())
return true;