2015-07-01 130 views
1

我正在尋找一些代碼來讓HTA從頭開始重新啓動。我在這個網站上看到了一個論壇,它創建了一個HTA,用於調用.vbs並週期性地重新啓動,但我希望找到一行或5個代碼,以便從頭開始啓動HTA。重新啓動HTA?

我可以做的是讓腳本重新打開HTA shell.run命令,然後關閉它,但有沒有更乾淨的方法來做到這一點?

+0

到self.close退出應用程序,僅self.restart()或類似的規定 – mottmoore

+3

'Location.Reload TRUE'()方法相似? –

+0

@MCND說什麼。 HTA基本上是網頁,所以重新加載應該做你想要的。 –

回答

0

下面是一個完整的例子顯示我們如何使用Location.Reload(True)重新加載HTA文件

好密碼是

<HTML> 
<HEAD> 
<TITLE></TITLE> 
<HTA:APPLICATION 
APPLICATIONNAME="Access to the system © Hackoo © 2015" 
BORDER="THIN" 
BORDERSTYLE="NORMAL" 
ICON="Explorer.exe" 
INNERBORDER="NO" 
MAXIMIZEBUTTON="NO" 
MINIMIZEBUTTON="NO" 
SCROLL="NO" 
SELECTION="NO" 
SINGLEINSTANCE="YES"/> 
</HEAD> 
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="YES"> 
<BODY TOPMARGIN="1" LEFTMARGIN="1"><CENTER><DIV><SPAN ID="ONSCR"></SPAN></DIV></CENTER></BODY> 
<SCRIPT LANGUAGE="VBScript"> 
Option Explicit 
Dim Title,ws,Voice,ErrorMsg,WelcomeMsg,MyGoodPassword,Password,Temp,Tests,ProcessEnv,UserName 
Title = "Access to the system © Hackoo 2015" 
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set ws = CreateObject("wscript.Shell") 
Set ProcessEnv = Ws.Environment("Process") 
UserName = ProcessEnv("USERNAME") 
Temp = WS.ExpandEnvironmentStrings("%Temp%") 
Tests = Temp &"\Tests.txt" 
'------------------------------------------------------------------------------------ 
Sub window_onload() 
    CenterWindow 280,180 
    Call PasswordForm() 
    Call TextFocus 
    Dim Count : Count = 0 
    If Not objFSO.FileExists(Tests) Then 
     Dim Logfile : Set Logfile = objFSO.OpenTextFile(Tests,2,True) 
     Logfile.writeline Count 
     Logfile.Close 
    end If 
    Call Kill("Explorer.exe") 
    Call DisableTaskMgr() 
End Sub 
'------------------------------------------------------------------------------------ 
Sub CenterWindow(x,y) 
    Dim iLeft,itop 
    window.resizeTo x,y 
    iLeft = window.screen.availWidth/2 - x/2 
    itop = window.screen.availHeight/2 - y/2 
    window.moveTo ileft,itop 
End Sub 
'------------------------------------------------------------------------------------ 
Sub PasswordForm() 
    Self.document.title = "Access to the system © Hackoo 2015" 
    Self.document.bgColor = "DarkOrange" 
    ONSCR.InnerHTML="<center><FONT COLOR=""#FFFFFF"" SIZE=""+1"" FACE=""VERDANA,ARIAL,HELVETICA,SANS-SERIF"">Type your Password</FONT><br><br><input type=""password"" name=""PasswordArea"" size=""20"" onKeyUp=""TextFocus""><P>"_ 
    &"<input type=""Submit"" STYLE=""HEIGHT:25;WIDTH:190"" value=""Access to the system"" name=""run_button"" onClick=""CheckPassword"">" 
END Sub 
'------------------------------------------------------------------------------------ 
Sub CheckPassword 
    Dim NB_Tests_MAX : NB_Tests_MAX = 3 
    Dim Readfile,Count,NB_Tests_Remaining,Logfile,Controle,Command,Executer,MsgNumbTests,MsgReboot 
    Set Voice = CreateObject("SAPI.SpVoice") 
    ErrorMsg = "ATTENTION ! ! ! "& vbcr &"The Password is Wrong ! "& vbcr &"Try Again !" 
    WelcomeMsg = "Welcome again "& DblQuote(UserName) &" in your System !" 
    MyGoodPassword = "9999" 
    Set Readfile = objFSO.OpenTextFile(Tests,1) 
    Count = Readfile.ReadAll 
    Readfile.Close 
    Controle = True 
    While Controle 
     Count = Count + 1 
     NB_Tests_Remaining = NB_Tests_MAX - Count 
     Set Logfile = objFSO.OpenTextFile(Tests,2,True) 
     Logfile.writeline Count 
     Logfile.Close 
     If PasswordArea.Value <> MyGoodPassword Then 
      Voice.Speak ErrorMsg 
      ws.Popup ErrorMsg,"1",Title,0+16 
      MsgNumbTests = "ATTENTION !!! "&vbcr&"Bad Password and NB°of TESTS is " & Count &"."&vbCr&_ 
      "The remaining number of tests is "& NB_Tests_Remaining 
      Voice.Speak MsgNumbTests 
      MsgBox MsgNumbTests,48,Title 
      Sleep(1) 
      Location.Reload(True) 
     end if 
     If PasswordArea.Value = MyGoodPassword Then 
      If objFSO.FileExists(Tests) Then objFSO.DeleteFile Tests,True 
      Controle = False 
      Voice.Speak WelcomeMsg 
      ws.Popup WelcomeMsg,"1",Title,0+64 
      Call Launch("Explorer.exe") 
      Call EnableTaskMgr() 
      Self.Close 
      Exit Sub 
     End If 
     If Count = NB_Tests_MAX Then 
      If objFSO.FileExists(Tests) Then objFSO.DeleteFile Tests,True 
      Voice.Speak "The computer will reboot in 30 seconds !" 
      MsgReboot = "The Limit number of tests is reached ! "&vbcr& "The computer will Reboot in 30 seconds !" 
         MsgBox MsgReboot,48,"The Limit number of tests is reached ! " 
         Command="cmd /c Shutdown.exe -r -t 30 -c " & chr(34) & "The computer will reboot in 30 seconds !" & chr(34) 
         Executer = WS.Run(Command,0,False) 
         window.close 
     End If 
      Exit Sub 
     wend 
    End Sub 
'---------------------------------------------------------------------------------- 
    Sub TextFocus 
     PasswordArea.Focus 
    End Sub 
'---------------------------------------------------------------------------------- 
    Sub Kill(Process) 
     Dim Ws,Command,Execution 
     Set Ws = CreateObject("Wscript.Shell") 
     Command = "cmd /c Taskkill /F /IM "&Process&"" 
     Execution = Ws.Run(Command,0,False) 
    End Sub 
'---------------------------------------------------------------------------------- 
    Sub Launch(Process) 
     Dim Ws,Command,Execution 
     Set Ws = CreateObject("Wscript.Shell") 
     Command = "cmd /c Start "&Process&"" 
     Execution = Ws.Run(Command,0,False) 
    End Sub 
'----------------------------------------------------------------------------------- 
'------------------------------EnableTaskMgr---------------------------------------- 
    Sub EnableTaskMgr() 
     Dim WshShell,System 
     System="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\" 
     Set WshShell=CreateObject("WScript.Shell") 
     Wshshell.RegWrite System, "REG_SZ" 
     WshShell.RegWrite System &"\DisableTaskMgr", 0, "REG_DWORD" 
    End sub 
'------------------------------------------------------------------------------------ 
'-----------------------------DisableTaskMgr----------------------------------------- 
    Sub DisableTaskMgr() 
     Dim WshShell,System 
     System="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\" 
     Set WshShell=CreateObject("WScript.Shell") 
     Wshshell.RegWrite System, "REG_SZ" 
     WshShell.RegWrite System &"\DisableTaskMgr", 1, "REG_DWORD" 
    End sub 
'-------------------------------------------------------------------------------------- 
    Sub Sleep(intNumSecs) 
' Because WScript.Sleep() is not available in HTA 
' scripts, invoke a VBScript file to do the waiting. 
     Dim strScriptFile, strCommand, intRetcode, objWS 
     If intNumSecs <= 0 Then Exit Sub 
     Set objWS = CreateObject ("WScript.Shell") 
     strScriptFile = "%temp%\wait" & intNumSecs & "seconds.vbs" 
     strCommand = "cmd /c ""echo WScript.Sleep " & intNumSecs * 1000 & " >" & strScriptFile & _ 
     "&start /wait """" wscript.exe " & strScriptFile & """" 
     intRetCode = objWS.Run (strCommand, 0, True) 
     If intRetCode = 0 Then Exit Sub 
    End Sub 
'--------------------------------------------------------------------------------------- 
    Function DblQuote(Str) 
      DblQuote = Chr(34) & Str & Chr(34) 
    End Function 
'--------------------------------------------------------------------------------------- 
</SCRIPT> 
+0

在每個方法調用之前不需要'調用',並且不需要遍佈所有冗餘的'()'。 – Bob77

+1

這裏有很多代碼,Hackoo。也許一個簡化的例子會更好。 – Bond

0

在談到由@MCND評論,以重啓腳本,只需執行

location.reload True 

After你想使用的任何事件