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

100 篇文章 0 订阅
 以下是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编码)


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值