曲柄摇杆机构计算公式:一个vb的问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 21:10:45
点击按键,就打开ie并自动登陆一个需要post登陆的网站。不是get登陆。
怎么实现??
对呀,是说打开默认的浏览器并实现自动登录?
ShellExecute API 怎么用post方式提交?用户名、密码在哪里写?

这个要用到一个IE控制
可以写一个DLL文件,在加载IE时自动加载本DLL
在DLL文件中加入打开IE时要启动或是要登录的内容
其实有点类似3721的那种功能
首先实现IObjectWithSite、IUnknown这两个接口。

我们需要创建一个odl文件,通过它来创建一个tlb:

[
uuid(CF9D9B76-EC4B-470D-99DC-AEC6F36A9261),
helpstring("VB IObjectWithSite Interface"),
version(1.0)
]
library IObjectWithSiteTLB
{
importlib("stdole2.tlb");
typedef [public] long GUIDPtr;
typedef [public] long VOIDPtr;
[
uuid(00000000-0000-0000-C000-000000000046),
odl
]
interface IUnknownVB
{
HRESULT QueryInterface(
[in] GUIDPtr priid,
[out] VOIDPtr *pvObj
);
long AddRef();
long Release();
}
[
uuid(FC4801A3-2BA9-11CF-A229-00AA003D7352),
odl
]
interface IObjectWithSite:IUnknown
{
typedef IObjectWithSite *LPOBJECTWITHSITE;
HRESULT SetSite([in] IUnknownVB* pSite);
HRESULT GetSite([in] GUIDPtr priid, [in, out] VOIDPtr* ppvObj);
}
};

把它保存为odl然后,用typelib创建一个tlb文件,创建后我们引用这个文件。

添加如下代码

Implements IObjectWithSiteTLB.IObjectWithSite
Dim WithEvents IE As InternetExplorer
Dim M_Site As IUnknownVB

Private Sub IObjectWithSite_GetSite(ByVal Priid As IObjectWithSiteTLB.GUIDPtr, PPVobj As IObjectWithSiteTLB.VOIDPtr)
M_Site.QueryInterface Priid, PPVobj
End Sub

Private Sub IObjectWithSite_SetSite(ByVal pSite As IObjectWithSiteTLB.IUnknownVB)
Set M_Site = pSite
Set IE = pSite
End Sub

我们现在已经实现了这两个接口,为了实现我们的中文搜索,我们不能使用urlsearchhook,所以我们通过接口 InternetExplorer来实现我们的功能:

Private Sub IE_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)

...这里填写你需要的代码...
End Sub

你需要添加到注册表的brow help object的里面,名字为这个com的classid
这儿注册表部分没具体讲
详细请QQ408611119

<html>
<head>
<SCRIPT LANGUAGE="javascript">
function openwin()
{
var username='test'
var password='test'
OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no,scrollbars=no,menubar=no")
OpenWindow.document.write("<title>登录</title>")
OpenWindow.document.write("<BODY>")
OpenWindow.document.write("<form action=checkuser.asp method=post name=login>")
OpenWindow.document.write("<input type=hidden value="+username+" name=username \/>")
OpenWindow.document.write("<input type=hidden value="+password+" name=password \/>")
OpenWindow.document.write("</form>")
OpenWindow.document.write("<\Script>login.submit();<\/SCRIPT>")
OpenWindow.document.write("</BODY>")
OpenWindow.document.write("</HTML>")
OpenWindow.document.close()
}
</SCRIPT>
</head>
<body>
<a href="#" onclick="openwin()">打开一个窗口</a>
<input type="button" onclick="openwin()" value="打开窗口">
</body>
</html>

使用 ShellExecute API 函数能够实现自动登录,具体声明请你参考一下 MSDN 或者使用 VB 自带的 API 查看器来粘贴声明代码,用法如下:

Shellexecute Form1.Hwnd,"open","网址名称","",SW_Restore

将这些代码写进标签的 Click 事件中就可以了。

建立一个WebBrowser控件,不用放到界面上
有一个函数
Navigate(URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant)
其中URL是字符串型的网址。
Flags为""。
TargetFrameName用"_blank",这样可以打开新窗口。
PostData是Byte数组,是字符串每位的ASCII值。转换如下:
Private Function Convert(data As String) As Variant
Dim i As Integer, rVal() As Byte
ReDim rVal(1 To Length(data))
For i = 1 To Length(data)
rVal(i) = Asc(mid(data,i,1))
Next i
Convert=rVal
Exit Function
很久没写VB了,家里也没装VB。可能有错误,知道意思就行了。
最后,Headers用""。

怎么写那么复杂

shell "cmd /c start www.baidu.com"

加什么参数,就在后面加就行了.

利用web控件或者使用shell命令,或者启用快捷方式.很多办法.