4

[免責事項:これは、私が知る限り、Windows7固有の問題です]

Windowsレジストリのプロキシ設定を変更し、次のコマンドを使用してWinInetAPIを呼び出すコードのブロックがあります。

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

これはXPとVistaでは完全に問題ありませんが、Windows 7では明らかに何かが変更されており、何らかの理由で以前のレジストリキーが注入されて、期待どおりに機能しなくなります。

これらの2行のコードをコメントアウトすると、レジストリ値は固定されますが、そのプロキシ情報に依存しているIEやその他のアプリケーションは、構成が変更されたことを認識していません。

オプションが変更され、リロードする必要があることをシステムに通知するためのより良い方法はありますか?私はこの問題、スイッチドコンパイラなどについて何日も検索しましたが、Windows7で期待するように動作させることはできません。

4

2 に答える 2

6

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);
于 2010-02-22T01:47:21.390 に答える
0

通過する情報はそれほど多くありませんが、まだ行っていない場合は、HKEY_LOCAL_MACHINEとHKEY_CURRENT_USERの両方でキーを設定してみることをお勧めします。

HKEY_CURRENT_USERでのみ設定している場合は、HKEY_LOCAL_MACHINEからコピーされて上書きされている可能性があります。

于 2009-11-23T12:21:11.313 に答える