微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HTA、VBScript 设置超时、更新元素不起作用

如何解决HTA、VBScript 设置超时、更新元素不起作用

场景:从正在运行的 HTA 中提取信息并使用每 1 秒更新一次的信息更新 INPUT 字段。这个概念是在处理数千个文件(例如 12300+文件)时将 INPUT 字段用作一种进度条,这样它就不会坐在那里近半小时什么都不做!最终结果没有报错,但是INPUT字段还是空的。

这是我的代码(我知道它是“脏的”,但我仅用于测试):

<Meta http-equiv='X-UA-Compatible' content='IE=8; IE=7' />

<html>
<head>
<hta:application id=oHTA 
border=none 
caption=no 
contextmenu=no 
innerborder=yes 
scroll=no 
showintaskbar=no 
/>

<style> 
body{
  padding: 0;
  margin: 0;
  background-color: #000;
  display: flex;
  align-items: center;
  justify-content: center;
}

img{width:100%;height:100%;left:0;top:0;position:absolute;}
div{z-index:1;position:absolute;color:black;top:80%;width:100%;}
input{width:20%;color:red;background:transparent;}
</style>
</head>


<body style='text-align:center;background:black;'  >
<div>
<button id=click>Click</button><br>
</div>
<input type=text id=myinput />




<script language="vbscript">

mm=self.location.pathname
curdir = split(mm,"\")
for x =0 to ubound(curdir)
settimeout "updater(curdir(x))",10000
next

sub click_onclick
self.close
end sub

function updater(xx)
set ii = document.getelementbyid("myinput")
ii.value=xx
end function
</script>

解决方法

正如 LesFerch 所提到的,我最终确实显示了正在处理的文件名以及功能进度条。在这里输入整个 HTA 内容的代码太多,但这会给你一个不错的主意。整个代码超过 1000 行,因为我包含了一个 Base64 编码的图像。本质上,这是一个重命名 mp3 文件的测试:找到“,The”或“,A”的条目,删除所述条目,将“The”或“A”添加到相应部分的开头,无论是艺术家还是标题。因为我有超过 14000 个 MP3,我最初制作的代码运行良好,让最终用户(在这种情况下是我!)想知道它是否仍在运行。今天,这个问题有了答案!代码仍然很丑,我相信它可以消除很多死空间,但我很自豪。

    <body style='text-align:center;background:black;'>
    
    <input type=text id="myinput" value=""  />
    <div style="width:100%;top:10px;text-align:center;" id="myDiv2"></div>
    <div id="myDiv" style="font-size:32px;">
    </div>
    <div style="top:10%;left:0;width:100%;"><h2>TheA: The File Fixer</h2></div>
    <button id="myButton" onclick="killvid()" >Close</button>
    <button id="myAbout" onclick="bignews()" style="left:10%;">About</button>
    <button id="myStart" onclick="startproc()" style="left:43%;">Start</button>    
    
    function myTime(xt)
                    set ws = createobject("wscript.shell")
                    xtr=0
                    do until xtr > xt
                    xtr = xtr+1
                    ws.Run "ping 127.0.0.1 -n 1",true
                    loop
        end function
        
        
        
            function updater(xx,yy)
                set ii = document.getelementbyid("myinput")
                if len(ii.value) < 70 then
                ii.value= ii.value & "|"
                else
                ii.value =""
                end if
                myTime(.25)     
            end function

function startproc()
    window.moveto -19999,-19999
    set s = document.getelementsbytagname("BUTTON")
    for each b in s
    b.style.display = "none"
    next
    set  s = nothing
            on error resume next
    
            str = document.location.pathname
            set ws = createobject("wscript.shell") 
            set fs = createobject("scripting.filesystemobject") 
'Open the BrowseForFolder dialog 
        
                Set a2 = sa.BrowseForFolder( 0,"Select Folder",1,&h11&)
                    sp = a2.Self.Path
    window.moveto screen.width / 2 - 900,screen.height /2 - 500
                        if err.number>0 then 
    
                        set mb = document.getelementbyid("myButton")
                        set md = document.getelementbyid("myDiv")
                        md.innertext="Nothing ventured,Nothing gained!" &vbcrlf & "Please exit this window!"
                        mb.style.display="block"
exit function

'more of the function excerpted

if bfn <> dd then
                fs.copyfile file.path,replace(file.path,bfn,dd),1
                rrr = rrr+1
                    if instr(bfn,rr) then
                    fs.deletefile file.path
                md.innertext = "Renaming " & bfn & " to " &vbcrlf & _
                dd & vbcrlf & "Processing " & dtx & " files." & vbcrlf &_
                "Please wait..."
                    elseif instr(bfn,ss) then
                    fs.deletefile file.path
                dtx = dtx-1
                md.innertext = "Renaming " & bfn & " to " &vbcrlf & _
                dd & vbcrlf & "Processing " & dtx & " files." & vbcrlf &_
                "Please wait..."
                    END IF

                updater bfn,dd  
                end if
end function

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。