程式設計知識:
取得使用者預設的瀏覽器
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
TCHAR *strBrowser=new TCHAR[256];
if(index!=256-3){
StringCchCopy (strBrowser,index+1,buf);
strBrowser[index]=_T(' '); // 加入空白
strBrowser[index+1]=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;
}
}
0 Comments:
Post a Comment
<< Home