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编码)
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编码)
相关文章推荐
- C# 实现向浏览器的兼容性视图列表中添加、删除网站和检查网站是否在兼容性网站列表中
- webex js 判断是否是ie 以及兼容性代码
- vc CListCtrl 如何判断列表中的内容是否被选中
- vc判断当前用户是否具有administrator 权限代码
- vc CListCtrl 如何判断列表中的内容是否被选中?如何获取CListCtrl当前选中的行
- 【代码重构 & JDT】判断一个方法是否是实现重写,继承重写和递归
- 一行代码判断一个数x是否是2的次幂(笔试题)
- Javascript 判断Flash是否加载完成的代码
- js 原生判断内容区域是否滚动到底部的实例代码
- js判断变量是否空值的代码
- sas 判断数据集是否存在及如何用sas代码关闭已打开的数据集
- 判断一个视图控制器的 view 是否加载过了
- Discuz!X 插件开发判断用户是否登录的代码怎么写
- sql server 判断是否存在数据库,表,列,视图
- GStreamer中对RTP包seqnum是否wraparound的判断只用一句代码
- 我的Js代码-按钮按下时判断是否选择了最后一行,给出提示
- JQuery判断radio是否选中并获取选中值的示例代码
- 实例代码-判断是否安装app的代码
- 判断网站地址是否是http开头
- sql server 2000/2005 判断存储过程、触发器、视图是否存在并删除