晕,不会上传附件,代码如下:Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Const WM_SYSCOMMAND = &H112 Private Const SC_RESTORE = &HF120&Private LastState As Integer '保留原窗口状态'---------- dwMessage可以是以下NIM_ADD、NIM_DELETE、NIM_MODIFY 标识符之一---------- Private Const NIM_ADD = &H0 '在任务栏中增加一个图标 Private Const NIM_DELETE = &H2 '删除任务栏中的一个图标 Private Const NIM_MODIFY = &H1 '修改任务栏中个图标信息Private Const NIF_MESSAGE = &H1 'NOTIFYICONDATA结构中uFlags的控制信息 Private Const NIF_ICON = &H2 Private Const NIF_TIP = &H4Private Const WM_MOUSEMOVE = &H200 '当鼠标指针移至图标上Private Const WM_LBUTTONUP = &H202 Private Const WM_RBUTTONUP = &H205Private Type NOTIFYICONDATA cbSize As Long '该数据结构的大小 hwnd As Long '处理任务栏中图标的窗口句柄 uID As Long '定义的任务栏中图标的标识 uFlags As Long '任务栏图标功能控制,可以是以下值的组合(一般全包括) 'NIF_MESSAGE 表示发送控制消息; 'NIF_ICON表示显示控制栏中的图标; 'NIF_TIP表示任务栏中的图标有动态提示。 uCallbackMessage As Long '任务栏图标通过它与用户程序交换消息,处理该消息的窗口由hWnd决定 hIcon As Long '任务栏中的图标的控制句柄 szTip As String * 64 '图标的提示信息 End TypeDim myData As NOTIFYICONDATAPrivate Sub Form_Load() Me.Visible = False '隐藏窗口 '************************************************** '添加系统托盘图标 With myData .cbSize = Len(myData) .hwnd = Me.hwnd .uID = 0 .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP .uCallbackMessage = WM_MOUSEMOVE .hIcon = Me.Icon.Handle '默认为窗口图标 .szTip = "自动登陆" & vbNullChar End WithShell_NotifyIcon NIM_ADD, myData End Sub Private Sub Form_Unload(Cancel As Integer) '窗体卸载事件 Shell_NotifyIcon NIM_DELETE, myData '窗口卸载时,将状态栏中的图标一同卸载 End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '*********************** Select Case CLng(X) Case WM_RBUTTONUP '鼠标在图标上右击时弹出菜单 'Me.PopupMenu mnuTray PopupMenu rightMenu 'MsgBox "右击鼠标", , "信息" 'Case WM_LBUTTONUP '鼠标在图标上左击时窗口若最小化则恢复窗口位置 'Me.Visible = Not Me.Visible 'MsgBox "左击鼠标", , "信息" End Select End Sub Private Sub exit_Click() frmLogin.Show
End Sub Private Sub about_Click() frmAbout.Show
End Sub Private Sub mnuFile_Click()End SubPrivate Sub Timer1_Timer()
If Format(Time, "hh:mm") = "07:45" Or Format(Time, "hh:mm") = "13:15" Then Call Timer1_Load
Else End If End SubPublic Sub Timer1_Load() WebBrowser1.Navigate "http://192.168.1.9/index.jsp" End Sub Private Sub WebBrowser1_DownloadComplete() Dim vDoc, vTag Dim i As Integer Set vDoc = WebBrowser1.Document For i = 0 To vDoc.All.length - 1 '检测所有标签 If UCase(vDoc.All(i).tagName) = "INPUT" Then '找到input标签 Set vTag = vDoc.All(i) If vTag.Type = "text" Then '检测类型 Select Case vTag.Name Case "userid" '填写用户名的文本框的值 vTag.Value = "abc" End Select End If If vTag.Type = "password" Then '检测密码框类型 Select Case vTag.Name Case "password" '密码框的值 vTag.Value = "1234" End Select End If zt = WebBrowser1.Document.All Set re = CreateObject("VBScript.RegExp")re.Pattern = "\<STRONG>.*</STRONG>" Set Matches = re.Execute(UCase(zt.innerHTML)) For Each match In Matches vv = Mid(match.Value, 9, Len(match.Value) - 17) Next checknum = WebBrowser1.Document.getElementsByName("checknum") checknum.Value = vv If vTag.Name = "login" Then vTag.Click End IfEnd If Next i End Sub
我估计是这段代码出错,这段是取得网页的验证码,然后自动填写验证码的.但不知错在哪里? zt = WebBrowser1.Document.All Set re = CreateObject("VBScript.RegExp") re.Pattern = "\<STRONG>.*</STRONG>" Set Matches = re.Execute(UCase(zt.innerHTML)) For Each match In Matches vv = Mid(match.Value, 9, Len(match.Value) - 17) Next checknum = WebBrowser1.Document.getElementsByName("checknum") checknum.Value = vv
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Const WM_SYSCOMMAND = &H112
Private Const SC_RESTORE = &HF120&Private LastState As Integer '保留原窗口状态'---------- dwMessage可以是以下NIM_ADD、NIM_DELETE、NIM_MODIFY 标识符之一----------
Private Const NIM_ADD = &H0 '在任务栏中增加一个图标
Private Const NIM_DELETE = &H2 '删除任务栏中的一个图标
Private Const NIM_MODIFY = &H1 '修改任务栏中个图标信息Private Const NIF_MESSAGE = &H1 'NOTIFYICONDATA结构中uFlags的控制信息
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4Private Const WM_MOUSEMOVE = &H200 '当鼠标指针移至图标上Private Const WM_LBUTTONUP = &H202
Private Const WM_RBUTTONUP = &H205Private Type NOTIFYICONDATA
cbSize As Long '该数据结构的大小
hwnd As Long '处理任务栏中图标的窗口句柄
uID As Long '定义的任务栏中图标的标识
uFlags As Long '任务栏图标功能控制,可以是以下值的组合(一般全包括)
'NIF_MESSAGE 表示发送控制消息;
'NIF_ICON表示显示控制栏中的图标;
'NIF_TIP表示任务栏中的图标有动态提示。
uCallbackMessage As Long '任务栏图标通过它与用户程序交换消息,处理该消息的窗口由hWnd决定
hIcon As Long '任务栏中的图标的控制句柄
szTip As String * 64 '图标的提示信息
End TypeDim myData As NOTIFYICONDATAPrivate Sub Form_Load()
Me.Visible = False '隐藏窗口
'************************************************** '添加系统托盘图标
With myData
.cbSize = Len(myData)
.hwnd = Me.hwnd
.uID = 0
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon.Handle '默认为窗口图标
.szTip = "自动登陆" & vbNullChar
End WithShell_NotifyIcon NIM_ADD, myData
End Sub
Private Sub Form_Unload(Cancel As Integer) '窗体卸载事件
Shell_NotifyIcon NIM_DELETE, myData '窗口卸载时,将状态栏中的图标一同卸载
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '***********************
Select Case CLng(X)
Case WM_RBUTTONUP '鼠标在图标上右击时弹出菜单
'Me.PopupMenu mnuTray
PopupMenu rightMenu
'MsgBox "右击鼠标", , "信息"
'Case WM_LBUTTONUP '鼠标在图标上左击时窗口若最小化则恢复窗口位置
'Me.Visible = Not Me.Visible
'MsgBox "左击鼠标", , "信息"
End Select
End Sub
Private Sub exit_Click()
frmLogin.Show
End Sub
Private Sub about_Click()
frmAbout.Show
End Sub
Private Sub mnuFile_Click()End SubPrivate Sub Timer1_Timer()
If Format(Time, "hh:mm") = "07:45" Or Format(Time, "hh:mm") = "13:15" Then
Call Timer1_Load
Else
End If
End SubPublic Sub Timer1_Load()
WebBrowser1.Navigate "http://192.168.1.9/index.jsp"
End Sub
Private Sub WebBrowser1_DownloadComplete()
Dim vDoc, vTag
Dim i As Integer
Set vDoc = WebBrowser1.Document
For i = 0 To vDoc.All.length - 1 '检测所有标签
If UCase(vDoc.All(i).tagName) = "INPUT" Then '找到input标签
Set vTag = vDoc.All(i)
If vTag.Type = "text" Then '检测类型
Select Case vTag.Name
Case "userid" '填写用户名的文本框的值
vTag.Value = "abc"
End Select
End If If vTag.Type = "password" Then '检测密码框类型
Select Case vTag.Name
Case "password" '密码框的值
vTag.Value = "1234"
End Select
End If
zt = WebBrowser1.Document.All
Set re = CreateObject("VBScript.RegExp")re.Pattern = "\<STRONG>.*</STRONG>"
Set Matches = re.Execute(UCase(zt.innerHTML))
For Each match In Matches
vv = Mid(match.Value, 9, Len(match.Value) - 17)
Next
checknum = WebBrowser1.Document.getElementsByName("checknum")
checknum.Value = vv If vTag.Name = "login" Then
vTag.Click
End IfEnd If
Next i
End Sub
前一个Timer1_Load()后刷新网页,产生了WebBrowser1_DownloadComplete()事件,处理途中……
又一个Timer1_Timer()发生调用Timer1_Load()刷新网页,那么WebBrowser1.Document的成员就不完整了……
调用堆栈恢复到WebBrowser1_DownloadComplete()处理过程,那么这时你要访问WebBrowser1.Document中的成员就可能不存在了。所以你在 Timer1_Timer() 中要纪录上次的 hh:mm 是什么值,如果与当前一样,那么就不做任何处理,这样才保证初次到达07:45或13:15时只刷新一次网页。又:Form_MouseMove() 处理得莫名奇妙,X 是坐标值而不是 WM_* 。
将程序在以下几个场景下的运行状态比较一下:初始运行、第一次到时、长时间运行、第二次到时。
至少后三个场景下各个计数器应该是比较接近的。
zt = WebBrowser1.Document.All
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\<STRONG>.*</STRONG>"
Set Matches = re.Execute(UCase(zt.innerHTML))
For Each match In Matches
vv = Mid(match.Value, 9, Len(match.Value) - 17)
Next
checknum = WebBrowser1.Document.getElementsByName("checknum")
checknum.Value = vv