您的位置:首页 > 运维架构 > 网站架构

VC代码判断网站是否在兼容性视图列表中

2011-12-27 17:35 417 查看
以下是C++代码

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编码)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: