一旦按下 F1 键,我想终止程序。不确定如何编写 do while 循环。有任何想法吗?
Set WshShell = WScript.CreateObject("WScript.Shell")
Do While {F1} is not pressed
'...
Loop
这在普通的 VBScript 中是不可能的,但你可以让它与HTA一起工作:
<head>
<title>Test</title>
<HTA:APPLICATION ID="oHTA"
APPLICATIONNAME="Test"
>
</head>
<script language="VBScript">
Sub CheckKey
If window.event.keyCode = 112 Then self.close()
End Sub
</script>
<body onKeyUp="CheckKey">
...
</body>
我使用混合 VBS 脚本,其中嵌入了一个使用 adodb.stream 的小型 C# 程序。
这个例子每一步都会更新剪贴板(例如登录),但可以很容易地修改它以触发其他事件。
可以去掉清理行,.exe可以放在temp目录下。
为简洁起见,hex_ 部分已被截断,但整个文件可在http://excelxll.com/VBS/keypress.txt获得
Dim wsh, exe, HexKeyCode
Set wsh = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
HexKeyCode = "70" 'F1=70 F12=7B ALT-GR=A5 ESC=1B
exe = "Press F1 to step script until I disappear.exe"
if not fso.FileExists(exe) then call create_binary_file_
'EACH TIME F1 IS PRESSED UPDATE THE CLIPBOARD
'############################################
wsh.Run "cmd.exe /c """ & exe & """ " & HexKeyCode, 0, TRUE
wsh.Run "cmd.exe /c echo 1| clip", 0, TRUE
wsh.Run "cmd.exe /c """ & exe & """ " & HexKeyCode, 0, TRUE
wsh.Run "cmd.exe /c echo 2| clip", 0, TRUE
'OPTIONAL TIDY-UP
'################
fso.DeleteFile exe
sub create_binary_file_()
'########################
hex_="4D5A90...0000"
'FOR THE BINARY FILE WRITE
'#########################
dim str
set str = WScript.CreateObject("adodb.stream")
str.type = 2
str.charset = "iso-8859-1"
str.open
for x = 1 to len(hex_) step 2
high_ = asc(mid(hex_,x,1))
if high_ < 58 then
high_ = (high_-48)*16
else
high_ = (high_-55)*16
end if
low_ = asc(mid(hex_,x+1,1))
if low_ < 58 then
low_ = (low_-48)
else
low_ = (low_-55)
end if
str.writeText(chrW(high_ + low_))
next
str.saveToFile exe, 2
str.close
end sub