如何以编程方式打开/关闭 Windows 代理

Posted

技术标签:

【中文标题】如何以编程方式打开/关闭 Windows 代理【英文标题】:How to turn Windows Proxy On/Off programmatically 【发布时间】:2021-01-03 06:07:41 【问题描述】:

我需要一个代码来打开或关闭Windows Proxy。我试过了:

WINHTTP_PROXY_INFO proxyInfo;
proxyInfo.dwAccessType = WINHTTP_ACCESS_TYPE_NO_PROXY;
proxyInfo.lpszProxy = new WCHAR[25]   0 ;
proxyInfo.lpszProxyBypass = new WCHAR[25]   0 ;
WinHttpSetDefaultProxyConfiguration(&proxyInfo)

但即使具有管理员权限,它也不会关闭代理。

有没有winapi代码可以做到这一点?

【问题讨论】:

【参考方案1】:

打开 Windows 代理,

#include <Windows.h>
#include <wininet.h>

#pragma comment(lib,"Wininet.lib")
void main()

    INTERNET_PER_CONN_OPTION options[2];
    INTERNET_PER_CONN_OPTION_LIST list;
    list.dwSize = sizeof(list);
    list.dwOptionCount = 1;
    list.pOptions = options;
    options[0].dwOption = INTERNET_PER_CONN_FLAGS_UI;

    // Query the current value
    DWORD listSize = sizeof(list);
    InternetQueryOption(nullptr, INTERNET_OPTION_PER_CONNECTION_OPTION, &list, &listSize);
    options[0].Value.dwValue |= PROXY_TYPE_PROXY; 
    list.dwOptionCount = 2;
    options[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
    WCHAR proxy[] = L"192.3.3.6";
    options[1].Value.pszValue = proxy;

    InternetSetOption(nullptr, INTERNET_OPTION_PER_CONNECTION_OPTION, &list, sizeof(list));
    InternetSetOption(nullptr, INTERNET_OPTION_SETTINGS_CHANGED, nullptr, 0);

关闭 Windows 代理,

修改这一行:

options[0].Value.dwValue |= PROXY_TYPE_DIRECT; 

【讨论】:

谢谢。 options[0].Value.dwValue = PROXY_TYPE_DIRECT; 用于关闭。而L"192.168.49.1:9099"可以用来设置端口。但我仍然有问题。开启proxy时不想更改默认值?

以上是关于如何以编程方式打开/关闭 Windows 代理的主要内容,如果未能解决你的问题,请参考以下文章

windows11 技巧win11如何关闭你要以何方式打开此文件

如何以编程方式在 Windows 8 和 Windows 10 桌面登录屏幕上显示状态栏? [关闭]

Angular 2材料垫选择以编程方式打开/关闭

如何在 android Pie 和 UP 中以编程方式打开/关闭扬声器

如何以编程方式关闭画中画

AVPlayer - 如何以编程方式打开/关闭来自 HTTP Live Streaming 视频的 CC?