嵌ったのでメモ。UNICODEバージョンにバグがあるのかちゃんと動かないのでANSCIIバージョンを呼ぶと動く。構造体INTERNET_PROXY_INFOはAとWで分かれてないのでAを作る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
typedef struct { // // dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or // INTERNET_OPEN_TYPE_PRECONFIG (set only) // DWORD dwAccessType; // // lpszProxy - proxy server list // LPCSTR lpszProxy; // // lpszProxyBypass - proxy bypass list // LPCSTR lpszProxyBypass; } INTERNET_PROXY_INFOA; BOOL ChangeProxySetting(int useproxy, LPCSTR server, LPCSTR bypass) { tstring error; switch (useproxy) { case 0: { INTERNET_PROXY_INFOA pi = { 0 }; pi.dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG; if (!InternetSetOptionA(NULL, INTERNET_OPTION_PROXY, &pi, sizeof(pi))) { error = GetLastErrorString(GetLastError()); } } break; case 1: { INTERNET_PROXY_INFOA pi = { 0 }; pi.dwAccessType = INTERNET_OPEN_TYPE_DIRECT; if (!InternetSetOptionA(NULL, INTERNET_OPTION_PROXY, &pi, sizeof(pi))) { error = GetLastErrorString(GetLastError()); } } break; case 2: { INTERNET_PROXY_INFOA pi = { 0 }; pi.dwAccessType = INTERNET_OPEN_TYPE_PROXY; pi.lpszProxy = server; pi.lpszProxyBypass = bypass; if (!InternetSetOptionA(NULL, INTERNET_OPTION_PROXY, &pi, sizeof(pi))) { error = GetLastErrorString(GetLastError()); } } break; default: error = I18N(_T("Invalid Proxy Settings")); break; } if (error.size() != 0) { tstring message = I18N(_T("Proxy Settings Failed.")); message += _T("\r\n") + error; AfxMessageBox(message.c_str()); } return error.size()==0; } |