3

プロキシ設定をキャプチャしようとしています (「設定を自動的に検出する」)。私のコードは XP と Vista で動作します。ただし、Windows 7 では動作しません。

対象プラットフォームの詳細をご覧ください

Windows 7 エンタープライズ、IE 8.0.7600.16385、Wininet.dll 8.0.7600.16535

コードスニペットをご覧ください

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 = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
    AfxMessageBox(L"InternetQueryOption failed! (%d)\n");

TCHAR a[100];
swprintf(a, L"Flag value is : %d",Option[0].Value.dwValue, 80); 
AfxMessageBox(a);

しかし、Windows 7 では、IE の [設定を自動的に検出する] オプションがオンになっていても、プログラムはそのフラグが設定されていないと言います。

以下に示すように、WinHttp APIでも試しました。

WINHTTP_CURRENT_USER_IE_PROXY_CONFIG stProxyConfig = {0};

WinHttpGetIEProxyConfigForCurrentUser(&stProxyConfig);

if (stProxyConfig.fAutoDetect == TRUE)
    AfxMessageBox(L"Auto proxy detection enabled");
else
    AfxMessageBox(L"Auto proxy detection disabled");

Windows 7 では、上記のコードも [設定を自動的に検出する] オプションをキャプチャできません。これに関するご意見は大歓迎です。

ありがとうジョン

4

2 に答える 2

8

これは、SmartWPADと呼ばれるIE8で導入された新しいパフォーマンス最適化機能です。

WinINETは、特定のネットワークにWPADサーバーがあるかどうかを追跡します(たとえば、自動検出機能を使用して検索するもの)。ネットワークにWPADサーバーがない場合、InternetQueryOptionを実行すると、WinINETは「自動検出を使用」ビットを効果的に「マスクアウト」します。これにより、コードがプロキシルックアップを実行してプロキシを返さないために大量の時間を浪費することがなくなります。このネットワーク。

たとえば、この情報を取得して他のネットワークなどで使用するためにキャッシュする予定であるためにUI状態を取得する必要がある場合(WinINET SWPAD機能を無効にする場合)、最初にINTERNET_PER_CONN_FLAGS_UIをクエリする必要があります。このオプションを使用すると、SWPAD機能とは関係なくUIの状態に戻ります。

このクエリが失敗した場合、システムは以前のバージョンのInternet Explorerを実行しているため、クライアントはINTERNET_PER_CONN_FLAGSを使用して再度クエリを実行する必要があります。

于 2011-02-28T04:36:08.213 に答える
1

IE接続設定の「設定を自動的に検出する」チェックボックスをオン/オフできるC#コードスニペットがあります。このスニペットで探しているものを見つけることができます。

    public bool IsIEAutoDetectProxy(bool set)
    {
        // Setting Proxy information for IE Settings.
        RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(@"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections", true);
        byte[] defConnection = (byte[])RegKey.GetValue("DefaultConnectionSettings");
        if (defConnection[8] == Convert.ToByte(9))
           return true;
        else
           return false;
    } 
于 2011-11-07T06:51:57.663 に答える