簡體   English   中英

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

[英]C++/WinInet Change Proxy Settings Windows 7

[免責聲明:據我所知,這是一個Windows 7特定問題]

我有一段代碼可以更改Windows注冊表中的代理設置,然后使用以下代碼調用WinInet API:

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

這在XP和Vista中完全沒問題,但是在Windows 7中顯然發生了一些變化,並且由於某種原因,之前的注冊表鍵被重新注入,導致它無法按預期工作。

如果我注釋掉這兩行代碼,注冊表值會很明顯,但顯然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);

沒有太多信息可供使用,但如果你還沒有這樣做,你可能想嘗試在HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER中設置密鑰。

如果您只在HKEY_CURRENT_USER中設置它,則可能是從HKEY_LOCAL_MACHINE復制並覆蓋它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM