新浪微博的第三方授权页面貌似有修改,导致我写的登陆器程序在使用授权页时就报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();
即可解决该问题。