程式設計知識: 取得使用者預設的瀏覽器 by 井民全 關鍵片段: Registry.ClassesRoot.OpenSubKey Story: 如果你的客戶用的是 FireFox, 那麼他可能不喜歡點選你的程式時, 使用 IExpore 瀏覽網頁. 下面的片段是簡介如何取得使用者預設瀏覽器的執行檔位置. Sample Index: 1. C++ Win32 範例 2. C# .Net Framework 範例 // C++ 範例片段 (Win32) TCHAR* getDefaultBrowser() { // Step 1: 開啟預設瀏覽器的 key HKEY key; LONG result=RegOpenKeyEx(HKEY_CLASSES_ROOT,_T("HTTP\\shell\\open\\command"),0, KEY_QUERY_VALUE,&key); if(result!=ERROR_SUCCESS){ ShowError(); } // Step 2: 讀取瀏覽器執行檔的指令格式 ex: C:\PROGRA~1\MOZILL~1\FIREFOX.EXE -url "%1" DWORD Size = 256; TCHAR buf[256]; RegQueryValueEx (key, NULL, NULL, NULL, (LPBYTE)buf, &Size); RegCloseKey (key); // Step 3: 取得執行檔的絕對路徑字串 int index=0; for(;index<256-3;index++){ bool be=(*(buf+index)=='e' || *(buf+index)=='E'); bool bx=(*(buf+index+1)=='x' || *(buf+index+1)=='X'); bool bee=(*(buf+index+2)=='e' || *(buf+index+2)=='E'); if(be && bx && bee){ break; } } index=index+3; // 包含整個 exe if(buf[0]=='"') SkipProgramFileProblem=1; // 取得的路徑為 Program File 型態 ( 相對於 Progr~1 ) TCHAR *strBrowser=new TCHAR[256]; if(index!=256-3){ StringCchCopy (strBrowser,index+1-SkipProgramFileProblem,buf+SkipProgramFileProblem); strBrowser[index-SkipProgramFileProblem]=_T(' '); // 加入空白 strBrowser[index+1-SkipProgramFileProblem]=NULL; return strBrowser; }else{ return NULL; } } // C# 範例片段 (.Net Framework) public static string getDefaultBrowser() { string browser = string.Empty; RegistryKey key = null; try { key = Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false); browser = key.GetValue(null).ToString().ToLower().Replace("\"", ""); if (!browser.EndsWith("exe")) { browser = browser.Substring(0, browser.LastIndexOf(".exe")+4); } } finally { if (key != null) key.Close(); } return browser; } }