您的位置:首页 > Web前端 > HTML

CHtmlView指定IE内核版本

2013-12-19 11:54 302 查看

转载自:/article/2831944.html

新浪微博的第三方授权页面貌似有修改,导致我写的登陆器程序在使用授权页时就报JS错误。

问题的原因是CHtmlView默认的内核版本太低,有太多不兼容的东西。

在指定内核版本时,需要修改注册表,因此还涉及到程序提权的问题。

所以在解决该问题时,上述两个方面都需要考虑,代码如下:

BOOL RaisePrivileges()
{
HANDLE TokenHandle;
TOKEN_PRIVILEGES t_privileges = {0};

if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &TokenHandle))
{
return FALSE;
}

if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &t_privileges.Privileges[0].Luid))
{
return TRUE;
}

t_privileges.PrivilegeCount = 1;
t_privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

if(!AdjustTokenPrivileges(TokenHandle, FALSE, &t_privileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
{
CloseHandle(TokenHandle);
return FALSE;
}
else
{
return TRUE;
}
}

void SetIECoreVersion()
{
wchar_t* path = L"SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION";
wchar_t* valueName = L"你的程序.exe";
long version=9999;
wchar_t err[1024];
HKEY hKey;
DWORD dwDisposition;
long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0,REG_LEGAL_OPTION, &hKey);
if( ret != ERROR_SUCCESS)
{
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ret, NULL,err,sizeof(err),NULL);
ret = RegCreateKeyEx(HKEY_LOCAL_MACHINE, path,0, NULL, REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL, &hKey, &dwDisposition);
if( ret != ERROR_SUCCESS)
{
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ret, NULL,err,sizeof(err),NULL);
return;
}
}

ret = RegSetValueEx( hKey, valueName, NULL, REG_DWORD, (BYTE*)&version, sizeof(version));
if( ret != ERROR_SUCCESS)
return;
}


连续调用

RaisePrivileges();

SetIECoreVersion();

即可解决该问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: