gpt4 book ai didi

C++/WinInet 更改代理设置 Windows 7

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:03 26 4
gpt4 key购买 nike

[免责声明:据我所知,这是一个特定于 Windows 7 的问题]

我有一段代码可以更改 Windows 注册表中的代理设置,然后继续使用以下代码调用 WinInet API:

InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);

这在 XP 和 Vista 中完全没问题,但在 Windows 7 中显然发生了一些变化,由于某种原因,以前的注册表项被重新注入(inject)导致它无法按预期工作。

如果我注释掉这两行代码,注册表值会保留下来,但显然 IE 和其他依赖该代理信息的应用程序不知道配置已更改。

有没有更好的方法来通知系统选项已更改并需要重新加载?我在这个问题上搜索了好几天,切换了编译器等,但我所做的一切都没有让它像我在 Windows 7 中期望的那样工作。

最佳答案

FWIW 我最初的问题是没有使用整个 WinInet API 来处理代理设置。答案从一开始就在我眼前……最终的解决方案可能类似于:

LPWSTR proxyName;

if (on) {
proxyName = L"http=[IPADDRESS:PORT];https=[IPADDRESS:PORT]";
} else {
proxyName = 0;
}

INTERNET_PER_CONN_OPTION_LIST OptionList;
INTERNET_PER_CONN_OPTION Option[3];
unsigned long listSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
OptionList.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
OptionList.pszConnection = NULL;
OptionList.dwOptionCount = 3;
OptionList.dwOptionError = 0;

DWORD proxyType = PROXY_TYPE_DIRECT; // this proxy type disables any proxy server

if (proxyName) {
if (proxyName[0]) {
proxyType = PROXY_TYPE_PROXY; // a name has been passed, so choose the correct proxy type for enabling the proxy server
}
}

Option[0].Value.pszValue = (LPWSTR)proxyName;
Option[1].Value.dwValue = proxyType;
if (on) {
Option[2].Value.pszValue = (LPWSTR)L"";
} else {
Option[2].Value.pszValue = (LPWSTR)L"";
}
OptionList.pOptions = Option;

if (!InternetSetOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, &OptionList, listSize)) {
// handle error
}

InternetSetOption(0, INTERNET_OPTION_REFRESH, NULL, NULL);

关于C++/WinInet 更改代理设置 Windows 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1781616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com