2012-03-03 22 views
5

インターネットエクスプローラーで私はプロキシサーバーを設定できます。 Internet Explorerにアクセスすると、プロキシの資格情報が表示され、必要に応じて保存されます。 IEの新しいインスタンスが資格情報を取得します。IEのプロキシサーバーの資格情報を使用するようにWinINetに指示する方法

資格情報は、資格情報マネージャーに一般資格情報として保存されていることがわかります。名前は、Microsoft_WinInet_ [proxyserver:port]/[proxyserver.acme.com]のような命名規則に従います。

私のアプリはWinINetを使用しています。現在InternetSetOption経由でINTERNET_OPTION_PROXY_USERNAMEとINTERNET_OPTION_PROXY_PASSWORDを使用して資格情報を設定しています。

代わりに、WinINetに現在のユーザーのIE(またはCredentials Manager)資格情報を使用するように伝えたいとします。それは資格証明書を得ることに成功した場合

retry: 
    BOOL fRet = ::HttpSendRequest(hRequest, NULL, 0, NULL, 0); 
    DWORD dwError = ::GetLastError(); 
    DWORD statusCode(0); 
    DWORD statusLen = sizeof(DWORD); 
    DWORD headerIndex = 0; 
    ::HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, 
        &statusCode, &statusLen, &headerIndex); 

    if (statusCode == HTTP_STATUS_PROXY_AUTH_REQ) 
    { 
    DWORD dwFlags = FLAGS_ERROR_UI_FILTER_FOR_ERRORS | 
        FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | 
        FLAGS_ERROR_UI_FLAGS_GENERATE_DATA; 
    DWORD res =::InternetErrorDlg(GetDesktopWindow(), hRequest, 
            ERROR_INTERNET_INCORRECT_PASSWORD, dwFlags, NULL); 
    if (res == ERROR_INTERNET_FORCE_RETRY) 
     goto retry; 
    else 
     return false; 
    } 

InternetErrorDlg(CMから、あるいはユーザに促すことで)ERROR_INTERNET_FORCE_RETRYを返します。そうは次のようにWinINetの資格情報マネージャの資格情報を使用して持っている

答えて

2

方法は、InternetErrorDlg関数を使用することです。

FLAGS_ERROR_UI_FLAGS_NO_UIフラグ(上記では使用しません)を使用すると、ユーザーに資格情報の入力を求めるダイアログボックスが表示されないようにすることができます。

フリオ

1

この

HINTERNET hOpen = NULL; 

hOpen = InternetOpen(L"XXX", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 

などのIEから事前に定義されたプロキシパラメータを持つWinInet関数の使用を初期化...

関連する問題