客户端程序内嵌Webbrowser控件时,默认情况都是使用IE7兼容模式打开网页的。但是IE7有很多新的特性不支持,导致无法正常显示出来,所以需要强制使用高版本的IE内核来加载、渲染。
void ChangeRegedit(const wchar_t* pExeName)
{
if ( NULL == pExeName )
return ;
TCHAR szVersion[] = {};
DWORD dwSize = ;
HKEY hKey;
// 先获取IE版本
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Internet Explorer"), , KEY_READ, &hKey))
{
//首先读取IE11的位置
DWORD dwIeVersion = ;
if ( ERROR_SUCCESS == RegQueryValueEx(hKey, L"svcVersion", , NULL, (LPBYTE)szVersion, &dwSize) )
{
TCHAR *pos = _tcschr(szVersion, TEXT('.'));
if ( pos )
dwIeVersion = _ttoi(szVersion);
}
if ( dwIeVersion == )
{//读取IE低版本的位置
if ( ERROR_SUCCESS == (hKey, L"Version", , NULL, (LPBYTE)szVersion, &dwSize) )
{
TCHAR *pos = _tcschr(szVersion, TEXT('.'));
if (NULL == pos)
{
RegCloseKey(hKey);
return ;
}
*pos = ;
dwIeVersion = _ttoi(szVersion);
}
}
RegCloseKey(hKey);
switch( dwIeVersion )
{
case : dwIeVersion = ; break;
case : dwIeVersion = ; break;
case : dwIeVersion = ; break;
case : dwIeVersion = ; break;
default: return ;
}
// 设置应用程序使用的IE版本
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION", , KEY_WRITE, &hKey))
{
dwSize = sizeof(dwIeVersion);
RegSetValueEx(hKey, pExeName, , REG_DWORD, (LPBYTE)&dwIeVersion, dwSize);
RegCloseKey(hKey);
}
}
}