Wie Sie programmgesteuert Abfragen und Proxyeinstellungen in Internet Explorer

Veralteter Haftungsausschluss für KB-Inhalte

Dieser Artikel wurde für Produkte geschrieben, für die Microsoft keinen Support mehr anbietet. Deshalb wird dieser Artikel im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.

Zusammenfassung

Programmgesteuert Abfragen und festlegen den Einstellung Proxyinformationen für Internet Explorer erforderlichen Schritte erläutert.

Internet Explorer 4.x und früher InternetSetOption und InternetQueryOption APIs mit dem INTERNET_OPTION_PROXY-Flag verwendet. Während diese Option weiterhin unter Internet Explorer 5 arbeiten, wurden mehrere Verbindungsoptionen in der neuen Version eingeführt. Deshalb wird das INTERNET_OPTION_PROXY-Flag nur den "statische" Proxyserver festlegen zurück. Die Option statische wird die Proxyserver-Informationen im Hive HKEY_CURRENT_USER so unter Internet Explorer 4.0 wurde gespeichert

Hinweis INTERNET_OPTION_PROXY wird die Einstellung nicht dauerhaft geändert. Dies geschieht für den aktuellen Prozess nur, wenn ein NULL-Handle verwendet wird. Es kann jedoch auch auf einer Basis pro Sitzung ändern, wenn eine gültige Sitzungshandle (Sitzung erhalten behandelt werden mithilfe der InternetOpen()-API) gesendet.


Internet Explorer 5 angegeben (z. B. eine DFÜ-Verbindung) eine andere Verbindungsoption standardmäßig kann es möglich, dass die Proxy-Informationen erhalten Sie über die INTERNET_OPTION_PROXY kennzeichnen für die aktuelle Internet Explorer-Sitzung falsch sein. Deshalb unter Internet Explorer 5 wird empfohlen, die INTERNET_OPTION_PER_CONNECTION_OPTION verwendet werden.

Hinweis INTERNET_OPTION_PER_CONNECTION_OPTION wird die Einstellung auf einem System geändert werden, wenn ein NULL-Handle verwendet wird. Um globale Proxyeinstellungen korrekt wiederzugeben, müssen Sie die Funktion InternetSetOption mit der Option INTERNET_OPTION_REFRESH aufrufen. Oder um Einstellungen auf einer Basis pro Sitzung gültige Sitzungshandle verwendet werden kann.


Hinweis Es kann noch Proxyinformationen für den Whgke-Prozess zu ändern, ohne globale Einstellungen in Internet Explorer 5 oder höher. Dazu müssen Sie die Funktion InternetSetOption auf dem Handle aufrufen, die InternetOpen -Funktion zurückgegeben wird, mithilfe der INTERNET_OPTION_PER_CONNECTION_OPTION-Option. Im folgenden Codebeispiel wird wird den Proxy für den gesamten Prozess, obwohl die hInternet geschlossen wird und nicht für die aktuelle Anforderung verwendet.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...); 
InternetCloseHandle (hInternet);

Weitere Informationen

Internet Explorer 4.x, übliche Mechanismus Abfrage Proxyinformationen würde folgendermaßen lauten:
unsigned long        nSize = 4096;char                 szBuf[4096] = { 0 };
INTERNET_PROXY_INFO* pInfo = (INTERNET_PROXY_INFO*)szBuf;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PROXY, pInfo, &nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());

Unter Internet Explorer 5 ist die empfohlene Methode Code ähnlich dem folgenden:

INTERNET_PER_CONN_OPTION_LIST    List;INTERNET_PER_CONN_OPTION         Option[5];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
Option[2].dwOption = INTERNET_PER_CONN_FLAGS;
Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 5;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());
if(Option[0].Value.pszValue != NULL)
printf("%s\n", Option[0].Value.pszValue);

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_PROXY_URL) == PROXY_TYPE_AUTO_PROXY_URL)
printf("PROXY_TYPE_AUTO_PROXY_URL\n");

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_DETECT) == PROXY_TYPE_AUTO_DETECT)
printf("PROXY_TYPE_AUTO_DETECT\n");

INTERNET_VERSION_INFO Version;
nSize = sizeof(INTERNET_VERSION_INFO);

InternetQueryOption(NULL, INTERNET_OPTION_VERSION, &Version, &nSize);

if(Option[0].Value.pszValue != NULL)
GlobalFree(Option[0].Value.pszValue);

if(Option[3].Value.pszValue != NULL)
GlobalFree(Option[3].Value.pszValue);

if(Option[4].Value.pszValue != NULL)
GlobalFree(Option[4].Value.pszValue);

Der obige Code gibt die Verbindung mit der PszConnection-Zeichenfolge in der INTERNET_PER_CONN_OPTION_LIST-Struktur. Diese Zeichenfolge auf NULL festlegen, die Konfigurationsinformationen für den Standardwert (oder LAN) abgerufen werden Einstellungen.

Die erste Option (Option [0] INTERNET_PER_CONN_AUTOCONFIG_URL) für die automatische Konfiguration des Proxyservers angegebene URL zurück. Die zweite Option (Option [1] INTERNET_PER_CONN_AUTODISCOVERY_FLAG) erkennt, ob die automatische Erkennung aktiviert ist oder nicht für die angegebene Verbindung. Die dritte Option bestimmt, welche Kombination von Flags für diese spezielle Verbindung festgelegt wurden. Die letzten beiden Optionen entsprechen die gleichen Informationen wie abgerufenen Whe INTERNET_OPTION_PROXY in Internet Explorer 4.x.

Siehe auch, sind die Optionen, die potenziell Zeichenfolgenwerte zurückgeben kann mit GlobalFree() freigegeben. Ist der Zeichenfolgenpuffer wurden Sie von der WININET-Bibliothek und dem Programmierer Puffer nach Verwendung frei ist.

Informationen für eine andere Verbindung Interesse ändern Sie einfach die List.pszConnection Zeichenfolge die Einstellung DFÜ-Sie sind es.

Um Proxyinformationen festzulegen, verwenden Sie entsprechend das gleiche Verfahren mit InternetSetOption() für Beispiel:
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_PROXY_SERVER;
Option[0].Value.pszValue = "http://myproxy:8080";

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());


Wieder im obige Beispiel ändert sich die Standardeinstellung (oder LAN) Settings (List.pszConnection == NULL). Im Beispiel wird die "statische" Proxyserver-Informationen in "http://myproxy" an Port 8080 geändert. Ebenso können Sie die URL für automatische Konfiguration ändern:
INTERNET_PER_CONN_OPTION_LIST    List;INTERNET_PER_CONN_OPTION         Option[2];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[0].Value.pszValue = "http://myserver/get_proxy_info.dll";
Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[1].Value.dwValue = PROXY_TYPE_AUTO_PROXY_URL;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 2;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
printf("InternetQueryOption failed! (%d)\n", GetLastError());

Beim Konfigurieren von Internet Explorer einen Proxyserver HTTP und für andere Protokolle direkt verwenden Sie den Code zum.

Hinweis An INTERNET_PER_CONN_PROXY_SERVER übergebene Puffer hat die Einstellung für jedes Protokoll (dieser Code wird nur HTTP- und alle anderen Protokolle direkte Verbindung verwenden).

Hinweis Der INTERNET_PER_CONN_FLAGS wird der Wert für beide Proxy (direkt und über Proxy) in einem Element des Arrays Liste Option wie folgt im Code.

Hinweis Sie ODER diese flags in einem Ort. Setzen diese Flags in ein anderes Listenelement wird sie korrekt angezeigt (INTERNETOPTIONEN), jedoch nur eines der Flags (die erste festgelegt ist).

int main(int argc, char * argv[]) { 
char buff[256] = "http=http://<ProxyServerName>:80";
// To include server for FTP, HTTPS, and so on, use the string
// (ftp=http://<ProxyServerName>:80; https=https://<ProxyServerName>:80)
INTERNET_PER_CONN_OPTION_LIST List;
INTERNET_PER_CONN_OPTION Option[3];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[0].Value.pszValue = buff;

Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[1].Value.dwValue = PROXY_TYPE_PROXY;
Option[1].Value.dwValue |= PROXY_TYPE_DIRECT;
// This option sets all the possible connection types for the client.
// This case specifies that the proxy can be used or direct connection is possible.

Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[2].Value.pszValue = "<local>";



List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 3;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
printf("InternetSetOption failed! (%d)\n", GetLastError());

InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL);
//The connection settings for other instances of Internet Explorer.

return 0;

}

Im obigen Beispiel (wieder Standard oder LAN-Einstellung) müssen Sie die automatische Proxy-Konfiguration URL angeben und die Option Flat ermöglichen die automatische Proxy-Konfiguration.

Referenzen

MSDN WinInet-API-Dokumentation, April 1999
Eigenschaften

Artikelnummer: 226473 – Letzte Überarbeitung: 08.01.2017 – Revision: 1

Feedback