auto 发表于 2012-4-7 21:34:26

调用 "wininet.dll" InternetSetOptionA 设置代理不成功

本帖最后由 auto 于 2012-4-15 08:49 编辑

参考VB设置代理的代码转成换AU3,总是失败。无法显示网页。
如修改注册设置代理却是可以的,不问题出在哪
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<IE.au3>

Global $ProxyServer ='http=113.106.194.220:80'

Global Const $tagWINHTTP_PROXY_INFO = "DWORD dwAccessType;ptr lpszProxy;ptr lpszProxyBypass;"
Global Const $INTERNET_OPTION_PROXY = 38
Global Const $INTERNET_OPTION_SETTINGS_CHANGED = 39
Global Const $INTERNET_OPEN_TYPE_DIRECT = 1
Global Const $INTERNET_OPEN_TYPE_PROXY = 3

$xl = GUICreate("test", 1000, 500) ;

GUISetState(@SW_SHOW)
$ProxyInfo = ProxyInfoCreate($INTERNET_OPEN_TYPE_PROXY, $ProxyServer, "") ;
DllCall("wininet.dll", 'long', 'InternetSetOption', "long", 0, 'long', $INTERNET_OPTION_PROXY, 'ptr', DllStructGetPtr($ProxyInfo), 'int', DllStructGetSize($ProxyInfo))
DllCall("wininet.dll", 'long', 'InternetSetOption', 'long',0, 'long', $INTERNET_OPTION_SETTINGS_CHANGED, 'ptr',0, 'int', 0)
Sleep(1000)
$oIE = _IECreateEmbedded()
$GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 1100, 500)
$hOpen = GUICtrlGetHandle($GUIActiveX)
$R = _IENavigate ($oIE, "http://ip.chinaz.com",0)
Sleep(5000)
$R = _IENavigate ($oIE, "http://www.cz88.net/ip/viewip468.aspx",0)

While 1
        Sleep(10)
        $msg = GUIGetMsg()
        Select
                Case $msg = $GUI_EVENT_CLOSE
                        Exit
                Case $msg = $GUI_EVENT_MINIMIZE
                        Exit
                Case $msg = $GUI_EVENT_MAXIMIZE
                        Exit
        EndSelect
       
WEnd

Func ProxyInfoCreate($dwAccessType, $sProxy, $sProxyBypass)
    Local $tWINHTTP_PROXY_INFO = ; wchar proxybypasschars[' & StringLen($sProxyBypass)+1 & ']')]
        DllStructSetData($tWINHTTP_PROXY_INFO, "dwAccessType", $dwAccessType)
    If StringLen($sProxy) Then DllStructSetData($tWINHTTP_PROXY_INFO, "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO, 'proxychars'))
    If StringLen($sProxyByPass) Then DllStructSetData($tWINHTTP_PROXY_INFO, "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO, 'proxybypasschars'))
    DllStructSetData($tWINHTTP_PROXY_INFO, "proxychars", $sProxy)
    DllStructSetData($tWINHTTP_PROXY_INFO, "proxybypasschars", $sProxyBypass)
    Return $tWINHTTP_PROXY_INFO
EndFunc

netegg 发表于 2012-4-15 04:17:57

InternetSetOptionA能用wchar吗,不太清楚,貌似带A的api都是ansi的,wchar好像对应的是unicode吧

auto 发表于 2012-4-15 08:42:53

本帖最后由 auto 于 2012-4-15 08:49 编辑

回复 2# netegg


   
其实网上大部分代码是使用InternetSetOption来设置的,
InternetSetOptionA好像也可以吧,VB使用nternetSetOptionA是可以的

结构部分是参考其他的人写的,有个http也是这么写的,却可以单独使用代理

修改为InternetSetOption也不成功。

auto 发表于 2012-4-15 09:06:54

本帖最后由 auto 于 2012-4-15 09:10 编辑

其实嵌套结构也是借用其他人写的,想不到,AU3需要这样写才可以的,别的语言不需要
引用“
嵌套的数据结构(数据结构中包含数据结构)你必须重新定义嵌套的数据结构. 举个例子,一个数据结构包含两个指针数据结构("long;long") ,必须声明为 "long;long;long;long". 最前面的两个 long 值相当于第一个指针数据结构,后面的两个值相当于第二个数据结构.(thesnoW:比C更复杂了...)”
页: [1]
查看完整版本: 调用 "wininet.dll" InternetSetOptionA 设置代理不成功