如何使用C#查找默认邮件客户端?我查了一些贴在这里,但它没有帮助我..
我使用了这段代码
object mailClient = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail", "", "none");
在我的计算机上,两个Windows实时邮件和Outlook都安装了,而defualt客户端是windows live mail但是如果我打印mailclient它将显示defualt邮件客户端作为outlook。
但如果我使用System.Diagnostics.Process.Start("mailto:")
,那么它将在Windows Live mail中打开,这是正确的。
我需要一种通过C#代码找到defualt客户端的方法.....
答案 0 :(得分:2)
注册表项是:
<强>机:强>
HKEY_CLASSES_ROOT\mailto\shell\open\command
用户:强>
HKEY_CURRENT_USER\Software\Classes\mailto\shell\open\command
这些键的值是执行的命令行,它们包含%1
之后的地址mailto:
。因此,您可能需要进行一些额外的解析才能获得可执行文件的路径:
示例:
"C:\PROGRA~2\MICROS~4\Office14\OUTLOOK.EXE" -c IPM.Note /m "%1"
需要成为"C:\PROGRA~2\MICROS~4\Office14\OUTLOOK.EXE"
。
答案 1 :(得分:0)
使用&#34; To&#34;打开消息已经填好,试试
string target = "joe.doe@doecontry.dc";
string mailtoCommand =
(string) Registry.GetValue(@"HKEY_CURRENT_USER\Software\Classes\mailto\shell\open\command", @"", @"none");
mailtoCommand = mailtoCommand.Replace("\"", string.Empty).Replace("%1", target);
string arguments =
mailtoCommand.Substring(mailtoCommand.ToLower().IndexOf(@".exe", StringComparison.Ordinal) + 4);
string fileName = mailtoCommand.Substring(0, mailtoCommand.Length - arguments.Length);
Process.Start(fileName, arguments);