BOOL QueryWebIsInCompatibilityViewList(BYTE *pbURL,DWORD dwURLLen,DWORD &dwStatus)
{
LONG rv = ERROR_SUCCESS;
HKEY hKey;
CString strRegPath = _T("Software\\Microsoft\\Internet Explorer\\BrowserEmulation\\ClearableListData");
rv = RegOpenKeyEx(HKEY_CURRENT_USER,strRegPath, 0, KEY_QUERY_VALUE, &hKey);
if (ERROR_SUCCESS != rv)
{
if(rv == ERROR_FILE_NOT_FOUND)
{
dwStatus = 0;
return TRUE;
}
else
{
return FALSE;
}
}
DWORD dwDataType = REG_BINARY;
DWORD dwDataLen = 0;
rv = RegQueryValueEx(hKey,_T("UserFilter"),NULL,&dwDataType,(LPBYTE)NULL,&dwDataLen);
if (ERROR_SUCCESS != rv)
{
RegCloseKey(hKey);
if(rv == ERROR_FILE_NOT_FOUND)
{
dwStatus = 0;
return TRUE;
}
else
{
return FALSE;
}
}
// 键值存在
BYTE *pbData = new BYTE[dwDataLen];
if(pbData == NULL)
{
RegCloseKey(hKey);
return FALSE;
}
memset(pbData,0,dwDataLen);
rv = RegQueryValueEx(hKey,_T("UserFilter"),NULL,&dwDataType,pbData,&dwDataLen);
if (ERROR_SUCCESS != rv)
{
if(pbData){delete pbData;pbData = NULL;}
RegCloseKey(hKey);
if(rv == ERROR_FILE_NOT_FOUND)
{
dwStatus = 0;
return TRUE;
}
else
{
return FALSE;
}
}
RegCloseKey(hKey);
BYTE byDataInput[1024] = {0};
DWORD dwDataInputLen = sizeof(byDataInput);
if(AsniData2UnicodeData(pbURL,dwURLLen,byDataInput,dwDataInputLen)) // 将ASNI转成Unicode编码数据
{
if(pbData)
{
delete pbData;pbData = NULL;
}
return FALSE;
}
DWORD dwCount = *(DWORD*)&pbData[20];
DWORD dwPos = 24;
WORD wSize = 0;
for(DWORD nIndex = 0;nIndex < dwCount;nIndex++)
{
dwPos += 16;
wSize = *(WORD*)&pbData[dwPos];
wSize *= 2;
BYTE *pbQueryData = new BYTE[wSize];
if(pbQueryData == NULL)
{
if(pbData)
{
delete []pbData;pbData = NULL;
}
return FALSE;
}
memset(pbQueryData,0,wSize);
memcpy(pbQueryData,&pbData[dwPos+2],wSize);
if(wSize == dwDataInputLen && memcmp(pbQueryData,byDataInput,dwDataInputLen) == 0)
{
if(pbQueryData)
{
delete []pbQueryData;pbQueryData = NULL;
}
if(pbData)
{
delete []pbData;pbData = NULL;
}
dwStatus = 1;
return TRUE;
}
if(pbQueryData)
{
delete []pbQueryData;pbQueryData = NULL;
}
dwPos += (2+wSize);
}
if(pbData)
{
delete []pbData;pbData = NULL;
}
dwStatus = 0;
return TRUE;
}
添加到兼容性视图列表的方法暂时还没有找到,谁找到了可以告诉我,呵呵。
以下是我个人的分析,没有找到相关文档;
RegEdit 一路展开到下列位置
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation
可以在右侧找到键值 AllSitesCompatibilityMode 修改为1,则默认全局使用兼容性视图浏览,反之改0。
REG_DWORD类型。
兼容性视图列表保存在
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData\
UserFilter:REG_BINARY类型
8+4+4+4+4+值
开始处的24个字节含义:
前8字节(没有查到具体含义,可以写如下值:0x41,0x1f,0x00,0x00,0x53,0x08,0xad,0xba)
4字节的项数(小端存放)
4字节的长度(小端存放,该字节开始到最后一个字节的字节数)
4字节的开始号(小端存放,写1就行,即0x01,0x00,0x00,0x00)
4字节的项数(小端存放)
每一项值的组成:16字节(没有找到规律,可以随便写,没有影响)+2个字节的长度(小端)+网址(unicode编码)