小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VC獲取默認(rèn)瀏覽器

 firefox_zyw 2014-01-09

如何獲取系統(tǒng)當(dāng)前的默認(rèn)瀏覽器呢?呃,如果你說,去讀 HKEY_CLASSES_ROOT\http\shell\open\command 的注冊表值,也不是不可以,但在
WIN7 下不一定正確。那么我是怎么知道的呢?





昨天這樣讀了半天,發(fā)現(xiàn)總是不正確,我們將 Chrome 設(shè)為默認(rèn)瀏覽器,發(fā)現(xiàn) QQ 電腦管家彈出提示,然后果斷打開之,發(fā)現(xiàn):











我們果斷得到了一個注冊表項:


HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\Ftp\UserChoice[Progid]。


然后發(fā)現(xiàn)它的值為 ChromeHTML.FXI4CGER3K4X3DSME7GMQ74NWM。





然后我們?nèi)?span style="font-family: Comic Sans MS;">HKEY_CLASSES_ROOT\ChromeHTML.FXI4CGER3K4X3DSME7GMQ74NWM\shell\open\command 下,就可以讀出默認(rèn)值了。











如果是 IE 瀏覽器的話,將在 HKEY_CLASSES_ROOT\IE.FTP\shell\open\command 下獲取到。所以,在
WIN7 下整個獲取過程如下:



  1. void LaunchDefaultBrowser()  
  2. {  
  3.     HKEY hDefBrowserPos = NULL;  
  4.     wstring wstrDefBrowserPath = L"iexplore.exe";  
  5.   
  6.     WCHAR wszBuffer[MAX_PATH + 1] = {0};  
  7.     DWORD dwDataSize = sizeof(wszBuffer);  
  8.   
  9.     if (ERROR_SUCCESS == ::RegGetValueW(  
  10.         HKEY_CURRENT_USER,  
  11.         L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\Ftp\\UserChoice\\",  
  12.         L"Progid",  
  13.         RRF_RT_REG_SZ,  
  14.         0,  
  15.         wszBuffer,  
  16.         &dwDataSize  
  17.         ))  
  18.     {  
  19.         wstring wstrDefBrowserPos = wszBuffer;  
  20.         wstrDefBrowserPos += L"\\shell\\open\\command\\";  
  21.         dwDataSize = sizeof(wszBuffer);  
  22.   
  23.         if (ERROR_SUCCESS == ::RegGetValueW(  
  24.             HKEY_CLASSES_ROOT,  
  25.             wstrDefBrowserPos.c_str(),  
  26.             NULL,  
  27.             RRF_RT_REG_SZ,  
  28.             0,  
  29.             wszBuffer,  
  30.             &dwDataSize  
  31.             ))  
  32.         {  
  33.             // 解出 exe 路徑.  
  34.             wstrDefBrowserPath = wszBuffer;  
  35.             wstring::size_type leftQuotation = wstrDefBrowserPath.find(L'"');  
  36.             if (leftQuotation != wstring::npos)  
  37.             {  
  38.                 wstring::size_type rightQuotation = wstrDefBrowserPath.find(L'"', leftQuotation + 1);  
  39.                 if (rightQuotation != wstring::npos)  
  40.                 {  
  41.                     wstrDefBrowserPath.assign(  
  42.                         wstrDefBrowserPath.begin() + leftQuotation + 1,  
  43.                         wstrDefBrowserPath.begin() + rightQuotation  
  44.                         );  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49.   
  50.     ::ShellExecuteW(  
  51.         NULL,  
  52.         L"open",  
  53.         wstrDefBrowserPath.c_str(),  
  54.         NULL,  
  55.         NULL,  
  56.         SW_NORMAL  
  57.         );  
  58. }  






整個過程比較繁瑣,但還是比較容易理解的。














    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多