2013-03-13 97 views
0

如何使用C#查找默認郵件客戶端?我檢查了這裏的一些貼,但它並沒有幫助我..使用C#代碼檢查默認郵件客戶端

我用這個代碼

object mailClient = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail", "", "none"); 

在我的電腦上都的Windows Live Mail和Outlook安裝和defualt客戶端但是的Windows Live Mail,如果我打印mailclient它將顯示defualt郵件客戶端作爲outlook。

但如果我使用System.Diagnostics.Process.Start("mailto:")那麼它將在Windows Live郵件中打開,這是正確的。

我需要一種方法來發現通過C#代碼defualt客戶.....

回答

1

的註冊表項:

機:
HKEY_CLASSES_ROOT\mailto\shell\open\command

用戶:
HKEY_CURRENT_USER\Software\Classes\mailto\shell\open\command

這些鍵的值是執行的命令行,並且在mailto:之後的地址中包含%1。正因爲如此,你可能必須做一些額外的解析來獲得可執行只是路徑:

例子:
"C:\PROGRA~2\MICROS~4\Office14\OUTLOOK.EXE" -c IPM.Note /m "%1"需要剛剛成爲"C:\PROGRA~2\MICROS~4\Office14\OUTLOOK.EXE"

+0

謝謝丹。這個工作正常。 – 2016-05-10 15:18:06

0

爲配合「到」已經瀰漫開來的消息,嘗試

string target = "[email protected]"; 

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); 
相關問題