找回密码
 加入
搜索
查看: 3711|回复: 3

[网络通信] 调用 "wininet.dll" InternetSetOptionA 设置代理不成功

[复制链接]
发表于 2012-4-7 21:34:26 | 显示全部楼层 |阅读模式
本帖最后由 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[0]), 'int', DllStructGetSize($ProxyInfo[0]))
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[2] = [DllStructCreate($tagWINHTTP_PROXY_INFO), DllStructCreate('wchar proxychars[' & StringLen($sProxy)+1 & ']; wchar proxybypasschars[' & StringLen($sProxyBypass)+1 & ']')]
        DllStructSetData($tWINHTTP_PROXY_INFO[0], "dwAccessType", $dwAccessType)
    If StringLen($sProxy) Then DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxy", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxychars'))
    If StringLen($sProxyByPass) Then DllStructSetData($tWINHTTP_PROXY_INFO[0], "lpszProxyBypass", DllStructGetPtr($tWINHTTP_PROXY_INFO[1], 'proxybypasschars'))
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxychars", $sProxy)
    DllStructSetData($tWINHTTP_PROXY_INFO[1], "proxybypasschars", $sProxyBypass)
    Return $tWINHTTP_PROXY_INFO
EndFunc
发表于 2012-4-15 04:17:57 | 显示全部楼层
InternetSetOptionA能用wchar吗,不太清楚,貌似带A的api都是ansi的,wchar好像对应的是unicode吧
 楼主| 发表于 2012-4-15 08:42:53 | 显示全部楼层
本帖最后由 auto 于 2012-4-15 08:49 编辑

回复 2# netegg


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

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

修改为InternetSetOption也不成功。
 楼主| 发表于 2012-4-15 09:06:54 | 显示全部楼层
本帖最后由 auto 于 2012-4-15 09:10 编辑

其实嵌套结构也是借用其他人写的,想不到,AU3需要这样写才可以的,别的语言不需要
引用“
嵌套的数据结构(数据结构中包含数据结构)你必须重新定义嵌套的数据结构. 举个例子,一个数据结构包含两个指针数据结构("long;long") ,必须声明为 "long;long;long;long". 最前面的两个 long 值相当于第一个指针数据结构,后面的两个值相当于第二个数据结构.(thesnoW:比C更复杂了...)”
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-24 03:53 , Processed in 0.076582 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表