Qt / C ++获取OS代理设置

时间:2014-08-13 06:44:58

标签: c++ qt proxy

我需要在Windows上检索代理设置。它们由管理员设置,因此它们位于注册表中的位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings
ProxySettingsPerUser = 0x00000000 (0)

此条目提供的信息是代理设置是否需要从HKCU(ProxySettingsPerUser=1)HKLM(ProxySettingsPerUser=0)读取。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable = 0x00000001 (1)
ProxyServer = Host:Port

当我尝试直接读取它们时,返回默认值/字符串(即不是变量的实际内容):

代码:

#define HKLM_INTERNET_SETTINGS_KEY  "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"

//[...]

QSettings regHKLM( HKLM_INTERNET_SETTINGS_KEY, QSettings::NativeFormat );

QString read = regHKLM.value( "ProxyServer", "default" ).toString();

logDebug(QString("ProxyServer %1").arg(read));

可以毫无问题地阅读同一位置的其他条目,例如CodeBaseSearchPath = "CODEBASE"WarnOnIntranet = 0x00000001 (1)

尝试的第二种方法是使用MSDN函数::WinHttpGetIEProxyConfigForCurrentUser::WinHttpGetProxyForUrl来读取代理设置。尝试读取HKCU设置时(代表手动主机端口或pac文件),代码工作正常。但是,当需要从HKLM检索设置时,会返回以下错误:

ERROR_WINHTTP_AUTODETECTION_FAILED
12180

如果WinHTTP无法发现代理自动配置(PAC)文件的URL,则由WinHttpDetectAutoProxyConfigUrl返回。


是否有其他方法可以检索HKLM代理设置? 如果上述方法应该有效,是否需要在读取设置之前满足特殊条件/特权? (在第一次接近时,应用程序已经将特权级别提升到最大可能,并且清单文件设置为级别“asInvoker”)

祝你好运, Kornrade

0 个答案:

没有答案