Come impostare il ritardo in vbscript?Come impostare il ritardo in vbscript
WScript.Sleep(100)
non funziona su Windows XP, Vista.
Come impostare il ritardo in vbscript?Come impostare il ritardo in vbscript
WScript.Sleep(100)
non funziona su Windows XP, Vista.
se è VBScript, dovrebbe essere
WScript.Sleep 100
Se è javascript
WScript.Sleep(100);
Tempo in millisecondi. Wscript.Sleep 1000 risulta in un sonno di 1 secondo.
@ badbod99 è come dire: finché non sei catturato, rubando funziona così come l'acquisto - "someSub (param)" passerà una * copia * di param a someSub. –
Lavora a questa estremità (XP).
Creare un nuovo file, chiamarlo test.vbs. Mettilo dentro.
WScript.Sleep 1000
MsgBox "TEST"
Eseguirlo, notare il ritardo prima che venga visualizzata la finestra di messaggio.
Nota: il numero è in millisecondi, quindi 1000 è 1 secondo.
Rimuovere il) e sostituire (con spazio per rendere il codice VBScript valido –
Come un incantesimo in VistaSP2 –
tempo della funzione di sleep è espresso in millisecondi (ms)
se si vuole 3 minuti, questo è il modo per farlo:
WScript.Sleep(1000 * 60 * 3)
Un'altra violazione della regola: No() quando si chiama un Sub. –
@ Ekkehard.Horner Tuttavia, è _is_ VBScript valido. Passa esplicitamente il valore 'ByVal'. Non userei mai parentesi del genere, scriverei' Call WScript.Sleep (...) '. – Toothbrush
Ecco un'altra alternativa:
Sub subSleep(strSeconds) ' subSleep(2)
Dim objShell
Dim strCmd
set objShell = CreateObject("wscript.Shell")
'objShell.Run cmdline,1,False
strCmd = "%COMSPEC% /c ping -n " & strSeconds & " 127.0.0.1>nul"
objShell.Run strCmd,0,1
End Sub
Se stai cercando di simulare un ritardo del sonno in VBScript, ma WScript non è disponibile (ad esempio: lo script è chiamato dallo strumento BGInfo di Microsoft), quindi prova il seguente approccio.
L'esempio qui di seguito vi ritardare fino a 10 secondi dal momento in cui l'istruzione viene elaborata:
Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
nb anche questo funziona bene per vbscript nel classico –
può funzionare .. ma sono preoccupato per l'utilizzo della CPU di tale soluzione (è un ciclo lungo). Forse nello script senza WScript disponibile, è possibile chiamarlo con CreateObject, come indicato in questa risposta: http://stackoverflow.com/a/4037208/460362 – Pisu
Non va bene nemmeno per IE8. Non lo consiglio –
Ecco la mia soluzione. Ha funzionato con script, che è stato eseguito da un programma di terze parti senza WScript dichiarato e nessuna importazione consentita.
Function MySleep(milliseconds)
set WScriptShell = CreateObject("WScript.Shell")
WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function
Aggiornamento
Sembra che Microsoft ha rimosso Sleep.exe da Win 8, quindi questo non funziona nella vittoria 8 a meno che non si mette Sleep.exe nella cartella definita nel percorso%%.
Questo è un aggiornamento della soluzione fornita da @ user235218 che consente di specificare il numero di millisecondi richiesto.
Nota: l'opzione -n è il numero di tentativi e -w è il timeout in millisecondi per il ping. Ho scelto l'indirizzo 127.255.255.254 perché è nel range di loopback e ms windows non risponde ad esso.
Inoltre, dubito che questo fornirà una precisione millisecondo, ma su un'altra nota l'ho provato in un'applicazione utilizzando il controllo di script ms e mentre la funzione integrata di sleep ha bloccato l'interfaccia, questo metodo no.
Se qualcuno può fornire una spiegazione del motivo per cui questo metodo non ha bloccato l'interfaccia, è possibile rendere questa risposta più completa. Entrambe funzionano come funzioni nel thread utente.
Const WshHide = 0
Const WAIT_ON_RETURN = True
Sub Sleep(ByVal ms)
Dim shell 'As WScript.Shell
If Not IsNumeric(ms) Then _
Exit Sub
Set shell = CreateObject("WScript.Shell")
Call shell.Run("%COMSPEC% /c ping -n 1 -w " & ms & " 127.255.255.254 > nul", WshHide, WAIT_ON_RETURN)
End Sub
un uso migliore del timer:
Sub wait (sec)
dim temp
temp=timer
do while timer-temp<sec
loop
end Sub
questa è una buona soluzione, molto semplice, ma quando viene eseguita all'interno di un HTA genera un avviso di script non responsivo, chiedendo se si desidera interrompere l'esecuzione dello script perché potrebbe bloccare il computer. Puoi dire di no, ma interrompe comunque il normale flusso del programma. – freginold
Un sacco di risposte qui per scontato che si sta eseguendo il tuo VBScript in Windows Scripting Host (in genere wscript.exe
o cscript.exe
). Se ricevi errori come 'La variabile non è definita: "WScript"' quindi probabilmente no.
L'oggetto WScript è disponibile solo se si utilizza l'host di script di Windows, se si esegue in un altro host di script, ad esempio Internet Explorer (e si potrebbe essere senza rendersene conto se si è in qualcosa come un HTA) non è automaticamente disponibile.
Microsoft, Hey, Scripting Guy! Blog ha un articolo che va in proprio questo argomento How Can I Temporarily Pause a Script in an HTA? in cui utilizzare un VBScript setTimeout
per creare un timer per simulare un sonno senza bisogno di usare CPU loop hogging, ecc
Il codice utilizzato è questo:
<script language = "VBScript">
Dim dtmStartTime
Sub Test
dtmStartTime = Now
idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
End Sub
Sub PausedSection
Msgbox dtmStartTime & vbCrLf & Now
window.clearTimeout(idTimer)
End Sub
</script>
<body>
<input id=runbutton type="button" value="Run Button" onClick="Test">
</body>
Vedere lo linked blog post per la spiegazione completa, ma in sostanza quando si fa clic sul pulsante si crea un timer che emette 5000 millisecondi da ora e quando viene eseguito viene eseguita la sottorete VBScript denominata "PausedSection" che azzera il timer ed esegue qualunque sia il codice che desideri.
La seguente riga farà dormire lo script per 5 minuti.
WScript.Sleep 5*60*1000
Si noti che il valore passato alla chiamata a riposo è espresso in milli secondi.
* "' 'WScript.Sleep (100)' non funziona su Windows XP, Vista "* Sì, lo fa (appena testato in XP). Aspetta 100ms (un decimo di secondo). Se si desidera 100 * secondi *, utilizzare 100 * 1000, poiché il valore è in millisecondi. (E siccome questo è VBScript, non hai bisogno dei paren.) In realtà non lo infrangono, ma non è * giusto * ...) –