使用Windows安裝的最高版本IE內核加載內嵌頁

客戶端程序內嵌Webbrowser控件時,默認情況都是使用IE7兼容模式打開網頁的。但是IE7有很多新的特性不支持,導致無法正常顯示出來,所以需要強制使用高版本的IE內核來加載、渲染。上代碼:
void ChangeRegedit(const wchar_t* pExeName)
{
if ( NULL == pExeName )
return ;
TCHAR szVersion[64] = {0};   
DWORD dwSize = 64;   
HKEY hKey;
// 先獲取IE版本
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Internet Explorer"), 0, KEY_READ, &hKey))
{
//首先讀取IE11的位置
DWORD dwIeVersion = 0;
if ( ERROR_SUCCESS == RegQueryValueEx(hKey, L"svcVersion", 0, NULL, (LPBYTE)szVersion, &dwSize) )
{
TCHAR *pos = _tcschr(szVersion, TEXT('.'));
if ( pos )
dwIeVersion = _ttoi(szVersion);
}
if ( dwIeVersion == 0 )
{//讀取IE低版本的位置
if ( ERROR_SUCCESS == (hKey, L"Version", 0, NULL, (LPBYTE)szVersion, &dwSize) )
{
TCHAR *pos = _tcschr(szVersion, TEXT('.'));
if (NULL == pos)
{
RegCloseKey(hKey);
return ;
}
*pos = 0;
dwIeVersion = _ttoi(szVersion);
}
}
RegCloseKey(hKey);
switch( dwIeVersion )
{
case 11: dwIeVersion = 11001; break;
case 10: dwIeVersion = 10001; break;
case 9: dwIeVersion = 9999; break;
case 8: dwIeVersion = 8888; break;
default: return ;
}
// 設置應用程序使用的IE版本
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION", 0, KEY_WRITE, &hKey))
{
dwSize = sizeof(dwIeVersion);
RegSetValueEx(hKey, pExeName, 0, REG_DWORD, (LPBYTE)&dwIeVersion, dwSize);
RegCloseKey(hKey);
}
}
}

老外的一篇文章講的比較詳細:http://weblog.west-wind.com/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章