2013-03-22 56 views
0

我在写一个程序,它使用InternetQueryOption API查询代理设置。通过Windows文档InternetQueryOption,INTERNET_PER_CONN_OPTION和INTERNET_PER_CONN_FLAGS_UI标志

寻找INTERNET_PER_CONN_OPTION http://msdn.microsoft.com/en-us/library/windows/desktop/aa385145%28v=vs.85%29.aspx

有一个在文档

Windows 7和后一张纸条:
的客户端支持Internet Explorer 8应查询的连接类型使用INTERNET_PER_CONN_FLAGS_UI。如果此查询失败,则系统正在运行先前版本的Internet Explorer,并且客户端应使用INTERNET_PER_CONN_FLAGS再次查询。

无论Internet Explorer的版本如何,都使用INTERNET_PER_CONN_FLAGS恢复连接类型。

我一直在使用INTERNET_PER_CONN_FLAGS代替INTERNET_PER_CONN_FLAGS_UI运行IE9 &一切Win7的64位计算机上似乎正常工作测试。

此外,INTERNET_PER_CONN_FLAGSINTERNET_PER_CONN_FLAGS_UI的功能文档看起来完全相同。

那么使用INTERNET_PER_CONN_FLAGS_UI的原因是什么?请注意,它只是IE8或IE8 &更大。

我的程序需要支持从运行IE6的WinXP到当前的Win7机器。所以我不清楚我应该用什么。

这是我的代码

INTERNET_PER_CONN_OPTION_LIST List; 
INTERNET_PER_CONN_OPTION   Option[1]; 
unsigned long     nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 

Option[0].dwOption = INTERNET_PER_CONN_FLAGS; 

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 
List.pszConnection = 0; 
List.dwOptionCount = sizeof(Option)/sizeof(Option[0]); 
List.dwOptionError = 0; 

Option[0].Value.pszValue = 0; 

List.pOptions = Option; 

InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize); 
  1. 我应该改变INTERNET_PER_CONN_FLAGSINTERNET_PER_CONN_FLAGS_UI &然后再万一INTERNET_PER_CONN_FLAGS_UI失败INTERNET_PER_CONN_FLAGS打电话?

  2. 而且这究竟意味着

    恢复使用INTERNET_PER_CONN_FLAGS不管的Internet Explorer版本的连接类型。

这是否意味着INTERNET_PER_CONN_FLAGS_UI相关仅供InternetQueryOptionInternetSetOption,我应该使用INTERNET_PER_CONN_FLAGS始终。

回答

1

从你引用的文档和你想要达到的内容的描述来看,在我看来你的问题1和2的答案是YesYes

但是,正如所有MS文档一样,它可能不清楚,过时或者显然是错误的。所以我建议你先从你提出的问题中提出的假设开始,然后在使用虚拟机的各种平台WinXP/IE6,Win8/IE10等平台上测试代码原型。凭经验做它可能会让你更好地了解真实情况与文档,以及为进一步工作提供一些测试环境。

1

INTERNET_PER_CONN_FLAGS_UI返回代理设置,如工具> Internet选项>连接> LAN设置中所示。

这些设置可能不同于INTERNET_PER_CONN_FLAGS返回的设置,如果WinINET认为当前网络不使用WPAD,它将“隐藏”“自动检测”设置。这是性能优化,有关更多信息,请参见https://stackoverflow.com/a/5138232/126229

一般来说,只有在向用户显示设置时才应该使用INTERNET_PER_CONN_FLAGS_UI;如果您的目标是确定应使用哪个代理,请使用INTERNET_PER_CONN_FLAGS。