老榆头 发表于 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回帖过慢,闪了。。。
页: 1 [2] 3
查看完整版本: 用JS弹出的对话框内的控件,如何设置文本