老榆头
发表于 2009-11-25 15:03:18
本帖最后由 老榆头 于 2009-11-25 15:07 编辑
麻烦afan好友再试一次,应该可以的,我刚才试了一下,可以的
http://disk.nbfas.cn/test.htm
若不行的话,多刷新两次
下面是test.htm文件
afan
发表于 2009-11-25 16:23:36
回复 16# 老榆头
我点上传没反应,也没返回?
老榆头
发表于 2009-11-25 17:20:46
本帖最后由 老榆头 于 2009-11-25 20:47 编辑
是的,afan,那是个测试页面
上传的代码我删掉了
我想实现的是:
1/单击“浏览”,会弹出对话框
2/然后设置对话框中的“文件名”位置的文本(如:c:\upload.txt)
现在的问题就是第2步实现不了
谢谢
KLU3K
发表于 2009-11-25 18:49:10
下载一个附件要消耗20金币。好贵啊!
KLU3K
发表于 2009-11-25 18:49:43
更奇怪的是我回复了你的帖子却减少了10金币!Why?
老榆头
发表于 2009-11-25 20:49:36
回复 19# KLU3K
我也不知道呀,我看了一下,金钱是0呀,
再说我也不可能找人帮忙,还问人家收钱,那也太不象话喽:)
老榆头
发表于 2009-11-25 20:52:38
就是想知道,如果那个浏览按钮是由JS脚本调出来
如何设置控件的文本
谢谢
afan
发表于 2009-11-25 21:09:42
本帖最后由 afan 于 2009-11-25 21:11 编辑
这个问题确实没遇到过,在脚本内无法捕捉选择文件的窗口,而此时外部脚本却可以。
如此的话只有再写个专门负责捕捉选择文件的窗口,执行点击等一系列动作。此脚本程序由主脚本调用并传递变量,并在执行完后自动退出。
afan
发表于 2009-11-25 21:28:05
主脚本如下:#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <File.au3>
$gc_url = "http://disk.nbfas.cn/test.htm" ;上传地址
$gc_Formtitle = "上传" ;窗体标题
If WinExists($gc_Formtitle, "") Then Exit ;查看是否窗体是否存在
$Form1 = GUICreate($gc_Formtitle, 334, 283, 193, 125, -1, $WS_EX_ACCEPTFILES)
$Label1 = GUICtrlCreateLabel("选择文件夹...", 40, 40, 73, 17)
$inputDir = GUICtrlCreateInput("", 40, 72, 177, 21)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$btnBrowse = GUICtrlCreateButton("浏览...", 240, 72, 75, 25, 0)
$btnUpload = GUICtrlCreateButton("上传", 40, 120, 75, 25, 0)
$editDisplay = GUICtrlCreateEdit("", 48, 168, 185, 89, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN))
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btnBrowse ;浏览文件夹
$dir = FileSelectFolder("请选择文件夹:", "")
If Not @error Then GUICtrlSetData($inputDir, $dir)
Case $btnUpload ;上传
Upload()
EndSwitch
WEnd
Func Upload()
$dir = GUICtrlRead($inputDir) ;读取文件夹
If FileExists($dir) = 0 Then ;<== 检查文件夹是否有错
MsgBox(0, "出错", "请检查文件夹是否正确")
GUICtrlSetState($inputDir, $GUI_FOCUS)
Else ;无错=将选定文件夹内所有文件读入数组
$aFileList = _FileListToArray($dir, "*", 1)
;<== 检查是否有文件
If @error = 4 Then ;没有文件
MsgBox(0, "", "没有发现文件")
;Exit
Else ;有文件
For $iFile = 1 To $aFileList ; 循环执行每一个文件
$sFilePath = $dir & "\" & $aFileList[$iFile]
Run('a.exe "' & $sFilePath & '"')
$oIE = _IECreate($gc_url, 0, 1)
$o_form = _IEFormGetObjByName($oIE, "upload_form")
$o_browse = _IEFormElementGetObjByName($o_form, "file")
;$hwnd_ie = _IEPropertyGet($oIE, "hwnd")
_IEAction($o_browse, "click") ;单击“浏览”
;此时已由a.exe搞定其它事务~
;_IELoadWait ($oIE)
;_IEAction($o_login, "click")
MsgBox(0, 0, $sFilePath & ' 已搞定')
Next ;<== 循环结束
EndIf ;<== 检查是否有文件
EndIf ;<== 检查文件夹是否有错
EndFunc ;==>Upload
以下这个是辅助脚本,编译为"a.exe"后和主脚本放在一起。If $CmdLine = 1 Then
AdlibRegister('sr')
$a = 1
While $a = 1
Sleep(50)
WEnd
EndIf
Func sr()
If WinActive("选择文件") Then
ControlSetText("选择文件", "文件名", "Edit1", $CmdLine)
ControlClick("选择文件", "文件名", "Button2")
$a = 0
EndIf
EndFunc ;==>sr
老榆头
发表于 2009-11-26 12:59:00
先谢谢afan好友
马上测试,谢谢
wwant
发表于 2009-11-26 13:32:03
:face (22): 我也测试下..
老榆头
发表于 2009-11-26 14:18:49
afan好友,我这儿测试没有通过
如果测试成功,那么选择的文本应该出现在“浏览”左边的文本框内
还有那个“浏览”对话框的标题是否应该为“选择要加载的文件”
代码如下:If $CmdLine = 1 Then
AdlibRegister('sr')
$a = 1
While $a = 1
Sleep(50)
WEnd
EndIf
Func sr()
If WinActive("选择要加载的文件") Then
ControlSetText("选择要加载的文件", "文件名", "Edit1", $CmdLine)
ControlClick("选择要加载的文件", "文件名", "Button1")
$a = 0
EndIf
EndFunc ;==>sr这样也是不行的
麻烦
afan
发表于 2009-11-26 14:27:25
回复 27# 老榆头
你是什么系统?我这是xpsp3,测试完全正常:
选择的文本出现在“浏览”左边的文本框内
是“选择文件”
afan
发表于 2009-11-26 14:35:19
将以下代码编译为a.exeAdlibRegister('sr')
Dim $a = 1, $bt = "选择要加载的文件"
While $a = 1
Sleep(50)
WEnd
Func sr()
If WinActive($bt) Then
ControlSetText($bt, "", "Edit1", '测试文字,有吗?')
ControlClick($bt, "", "Button1")
$a = 0
EndIf
EndFunc ;==>sr你手动运行
1,运行“a.exe”
2,打开网页
3,点击浏览
啥反应?
afan
发表于 2009-11-26 14:45:16
LZ回帖过慢,闪了。。。