|
@@ -55,41 +55,48 @@ class WindowsProxyManager {
|
|
|
void setSystemProxy(String proxyServer, {String bypassList = ""}) {
|
|
|
final proxyInfo = calloc<INTERNET_PER_CONN_OPTION_LIST>();
|
|
|
proxyInfo.ref.dwSize = sizeOf<INTERNET_PER_CONN_OPTION_LIST>();
|
|
|
- proxyInfo.ref.dwOptionCount = 2;
|
|
|
+ proxyInfo.ref.dwOptionCount = 3; // 设置为3个选项
|
|
|
proxyInfo.ref.dwOptionError = 0;
|
|
|
|
|
|
- final options = calloc<INTERNET_PER_CONN_OPTION>(2);
|
|
|
+ // 分配三个选项的空间
|
|
|
+ final options = calloc<INTERNET_PER_CONN_OPTION>(3);
|
|
|
+
|
|
|
+ // 启用代理
|
|
|
+ options[0].dwOption = INTERNET_OPTION_PROXY_ENABLE;
|
|
|
+ options[0].Value.dwValue = 1; // 1 表示启用代理
|
|
|
|
|
|
// 设置代理服务器
|
|
|
- options[0].dwOption = INTERNET_OPTION_PROXY_SERVER;
|
|
|
- options[0].Value.pszValue = proxyServer.toNativeUtf16();
|
|
|
+ options[1].dwOption = INTERNET_OPTION_PROXY_SERVER;
|
|
|
+ options[1].Value.pszValue = proxyServer.toNativeUtf16();
|
|
|
|
|
|
// 设置绕过列表
|
|
|
- options[1].dwOption = INTERNET_OPTION_PROXY_BYPASS;
|
|
|
- options[1].Value.pszValue = bypassList.toNativeUtf16();
|
|
|
+ options[2].dwOption = INTERNET_OPTION_PROXY_BYPASS;
|
|
|
+ options[2].Value.pszValue = bypassList.toNativeUtf16();
|
|
|
|
|
|
proxyInfo.ref.pOptions = options;
|
|
|
|
|
|
+ // 调用 API 设置代理
|
|
|
final result = _internetSetOption(
|
|
|
0,
|
|
|
- INTERNET_OPTION_SETTINGS_CHANGED,
|
|
|
+ INTERNET_OPTION_PER_CONNECTION_OPTION,
|
|
|
proxyInfo.cast<Void>(),
|
|
|
proxyInfo.ref.dwSize,
|
|
|
);
|
|
|
|
|
|
if (result != 0) {
|
|
|
+ _internetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, nullptr, 0);
|
|
|
_internetSetOption(0, INTERNET_OPTION_REFRESH, nullptr, 0);
|
|
|
print("系统代理已设置为: $proxyServer");
|
|
|
} else {
|
|
|
print("设置代理失败。");
|
|
|
}
|
|
|
|
|
|
+ // 释放内存
|
|
|
calloc.free(proxyInfo);
|
|
|
- calloc.free(options[0].Value.pszValue);
|
|
|
calloc.free(options[1].Value.pszValue);
|
|
|
+ calloc.free(options[2].Value.pszValue);
|
|
|
calloc.free(options);
|
|
|
}
|
|
|
-
|
|
|
void disableSystemProxy() {
|
|
|
final proxyInfo = calloc<INTERNET_PER_CONN_OPTION_LIST>();
|
|
|
proxyInfo.ref.dwSize = sizeOf<INTERNET_PER_CONN_OPTION_LIST>();
|
|
@@ -152,9 +159,9 @@ base class INTERNET_PER_CONN_OPTION_Union extends Union {
|
|
|
const INTERNET_OPTION_PROXY_ENABLE = 3;
|
|
|
const INTERNET_OPTION_PROXY_SERVER = 2;
|
|
|
const INTERNET_OPTION_PROXY_BYPASS = 3;
|
|
|
-const INTERNET_OPTION_PER_CONNECTION_OPTION = 75;
|
|
|
const INTERNET_OPTION_SETTINGS_CHANGED = 39;
|
|
|
const INTERNET_OPTION_REFRESH = 37;
|
|
|
+const INTERNET_OPTION_PER_CONNECTION_OPTION = 75;
|
|
|
|
|
|
// void main() {
|
|
|
// if (Platform.isWindows) {
|