需要感知VBscript中的键击以结束循环

时间:2014-05-18 22:14:03

标签: vbscript

我是VBscript的新手;就像我在大约一个半小时前刚开始一样,但我只需要一个超级简单的程序。它运行Do Until循环,我希望它在按空格键时停止。我做了其他一切,我只需要知道是否/如何检测击键。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您需要将脚本放入hta文件(基本上是具有程序权限的网页),请参阅http://msdn.microsoft.com/en-us/library/ms536473(VS.85).aspx。然后为空格键设置一个事件处理程序。而不是do循环做一个计时器,并做一个计时器滴答。您的空格键事件处理程序取消了计时器。

onkeydown活动


用户按键时触发。

语法

内联HTML <ELEMENT onkeydown = "handler" ... >所有平台 事件属性object.onkeydown = handler仅限JScript object.onkeydown = GetRef("handler")仅限Visual Basic Sc​​ripting Edition(VBScript)5.0或更高版本 Named script <SCRIPT FOR = object EVENT = onkeydown>仅限Internet Explorer

活动信息

气泡是的 取消是 调用按任意键盘键。
默认操作返回一个数字,指定按下的键的keyCode。

setInterval方法


每次经过指定的毫秒数时计算表达式。

语法

iTimerID = window.setInterval(vCode, iMilliSeconds [, sLanguage])

参数

vCode必需。 Variant,指定函数指针或字符串,指示在指定的时间间隔过去后要执行的代码。 iMilliSeconds必需。整数,指定毫秒数。 sLanguage可选。用于指定LANGUAGE属性的任何一个可能值的字符串。

返回值

整数。返回使用clearInterval方法取消计时器的标识符。

说明

setInterval方法连续计算指定的表达式,直到使用clearInterval方法删除计时器。

答案 1 :(得分:0)

这是一个有效的,不可取的(建议你),选项。但每次检查按键时,它都会生成一行写入控制台(跳转到下一行)。

Function GetParentProcessId()
    Dim processesList, process
    Set processesList = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set processesList = processesList.ExecQuery("SELECT * FROM Win32_Process WHERE (Name = 'cscript.exe') AND Commandline LIKE '%"+WScript.ScriptName+"%'" )
    For Each process in processesList
        GetParentProcessId = process.ParentProcessId
    Next 
End Function 

Dim parentProcessId
    parentProcessId = GetParentProcessId()

Dim shell
    Set shell = WScript.CreateObject("WScript.Shell")

Dim input, i

    i=0
    Do While True
        WScript.StdOut.Write "Press space to stop process. Step [" & i & "]" & vbCR
        i = i + 1
        If (i Mod 10) = 0 Then 
            shell.AppActivate parentProcessId
            shell.SendKeys "~"
            input = WScript.StdIn.ReadLine()
            If input = " " Then
                Exit Do
            End If
        End If
        WScript.Sleep 50
    Loop

    WScript.StdOut.WriteLine vbCFLF & "Process ended"
    WScript.Quit