我有一个自动压缩和上传到服务器的程序要写:
For n = 1 To 207 '这儿是把所有的文件都循环一下
If Check1(n - 1).Visible And Check1(n - 1).Value = 1 Then '这儿是被选定的文件
rarpath = App.Path + "\winrar.exe" 'winrar的路径
ShellEx rarpath & " a -r " & App.Path & "\" & Date & ".rar " & " " & App.Path & "\" & Check1(n - 1).ToolTipText & "\*.* " '压缩选定的文件
End If
Next
'这儿结束后有一个问题了,就是压缩会很慢,程序完成时压缩还在进行中,用什么样的等待让它往后的运行正常进行?
path1 = App.Path & "\" & Date & ".rar" '需要上传的压缩文件路径
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.Name = "file1" Then
Clipboard.SetText path1
vtag.Focus
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) '这四句把文件复制到上传文件框中
End If
End If
Next
'到这儿结束都没有问题,也就是差最后一步提交了,但如果把下面标记掉的语句打开,复制就不会完成,也就是提交时会是一个空的内容.用什么样的等待让它能提交掉?
'For i = 0 To vDoc.All.Length - 1 '检测所有标签
'If UCase(vDoc.All(i).tagName) = "INPUT" Then '找到input标签
' Set vtag = vDoc.All(i)
' If vtag.Name = "Submit" Then
' vtag.Select '光标指定
' vtag.Click '点击提交了
' End If
'End If
'Next
'如果标记掉上面内容,文件框内有内容,如果不标记掉就没有内容.
For n = 1 To 207 '这儿是把所有的文件都循环一下
If Check1(n - 1).Visible And Check1(n - 1).Value = 1 Then '这儿是被选定的文件
rarpath = App.Path + "\winrar.exe" 'winrar的路径
ShellEx rarpath & " a -r " & App.Path & "\" & Date & ".rar " & " " & App.Path & "\" & Check1(n - 1).ToolTipText & "\*.* " '压缩选定的文件
End If
Next
'这儿结束后有一个问题了,就是压缩会很慢,程序完成时压缩还在进行中,用什么样的等待让它往后的运行正常进行?
path1 = App.Path & "\" & Date & ".rar" '需要上传的压缩文件路径
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.Name = "file1" Then
Clipboard.SetText path1
vtag.Focus
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) '这四句把文件复制到上传文件框中
End If
End If
Next
'到这儿结束都没有问题,也就是差最后一步提交了,但如果把下面标记掉的语句打开,复制就不会完成,也就是提交时会是一个空的内容.用什么样的等待让它能提交掉?
'For i = 0 To vDoc.All.Length - 1 '检测所有标签
'If UCase(vDoc.All(i).tagName) = "INPUT" Then '找到input标签
' Set vtag = vDoc.All(i)
' If vtag.Name = "Submit" Then
' vtag.Select '光标指定
' vtag.Click '点击提交了
' End If
'End If
'Next
'如果标记掉上面内容,文件框内有内容,如果不标记掉就没有内容.
Set tsob = fs.CreateTextFile(App.Path + "\winrar.bat", True)
lst = "cd\" + App.Path
tsob.Writeline lst
For n = 1 To 207
If Check1(n - 1).Visible And Check1(n - 1).Value = 1 Then
lst = "winrar.exe a -r " & Date & ".rar " & Check1(n - 1).ToolTipText & "\zrsl.mdb"
tsob.Writeline lst
End If
Next
Set tsob = Nothing
Set oScript = CreateObject("WSCRIPT.SHELL")
oScript.Run App.Path & "\winrar.bat"
mp = 0
path1 = App.Path & "\" & Date & ".rar"
Do Until fs.fileExists(path1)
Sleep (200)
mp = mp + 1
If mp > 50 Then Exit Do
Loop
If Not fs.fileExists(path1) Then
MsgBox "请先选中要上传的项目并压缩后再上传!" & Chr(13) & "或手动选择已有的压缩文件后上传!"
Exit Sub
End If
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.Name = "file1" Then
vtag.Focus
vtag.Select
Clipboard.Clear
Clipboard.SetText path1
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
End If
End If
Next我使用上述等待的方法,但是好怪,这个复制到上传文件框内的操作就是不执行!
但只要这个文件在压缩前已经存在,它就可以复制过去.
真的好怪!郁闷!
话说你不要用复制粘贴
试试这个,我根据web开发的经验写的,不知道能不能成功
If vtag.Name = "file1" Then
vtag.value=path1
End If
至于同步的问题,可以定义一个事件,在压缩完成的时候,cmd应该有写什么压缩完成之类的咯,这个时候捕捉到然后raiseevent,在没有发生事件时把所有控件的enable设置成false,等压缩完了再恢复
哈哈,要能这样,我就不必画蛇添足了,你最好试一下,这样是行不通的.
因为我的是文件格式,不是text格式的inputjennyvenus:
可以给一个类似的例子吗?
vtag.Select
Clipboard.Clear
Clipboard.SetText path1
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), 0, 0)
Call keybd_event(vbKeyV, MapVirtualKey(vbKeyV, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) 这个不就是把一个路径字符串复制到input标记里么
怎么是文件格式呢
没见过文件格式的input吗?给你一个例子吧.
doevents
'For i = 0 To vDoc.All.Length - 1 '检测所有标签
'If UCase(vDoc.All(i).tagName) = "INPUT" Then '找到input标签
' Set vtag = vDoc.All(i)
' If vtag.Name = "Submit" Then
' vtag.Click '点击提交了
' End If
'End If
'Next
试一下
前面哪个用jennyvenus 说的吧