此脚本为我提供1到3之间的数字并输入相应的字母(1 = a,2 = b,3 = c)。我以前做过这个,它在字母意义上正常工作。 InputBox得到一个高于0的数字,并且它应该允许脚本输入多少个字母,但是我的do while max > count
不能以最大值停止它。只是继续,直到我通过任务管理器手动禁用它。有没有人看到这个有什么问题?
Set ws = CreateObject("Wscript.Shell")
max = InputBox("Max number of characters (Numbers Only!)", "Enter Integer")
If max = "" Then
Wscript.Quit
ElseIf max < 0 Then
Wscript.Quit
End If
count = 0
ws.Run "notepad.exe"
Wscript.sleep 1000
Do While max > count
count = count + 1
Randomize
rand = Int((3 - 1 + 1) * rnd + 1)
If rand = 1 Then
char = "a"
ElseIf rand = 2 Then
char = "b"
ElseIf rand = 3 Then
char = "c"
End If
Wscript.sleep 50
ws.Sendkeys char
Loop
Wscript.Quit
答案 0 :(得分:2)
问题是您的max
变量包含字符串"3"
而不是原始数值3
。对于字符串值与数字相比,VBScript的相对比较运算符(>
,>
,>=
,<=
)不会像在其他情况下那样工作语言(并且它们不是基于字符串第一个字符的ASCII值)。
修复方法是使用CInt
确保max
为数字:
Dim max
max = InputBox( ... )
If max = "" Then ... End If
max = CInt( max )
Do While max > count
...
Loop
顺便说一句,我会将count
重命名为i
,以更好地传达其语义含义。
答案 1 :(得分:1)
Comparison Operators (VBScript) reference:读取表达式的比较方式或比较结果,具体取决于基础子类型:
如果一个表达式是数字而另一个是字符串,那么 数值表达式小于字符串表达式。
我使用下一个代码段:
max = InputBox("Max number of characters (Numbers Only!)", "Enter Integer")
If Not Isnumeric( max) Then Wscript.Quit ''' affects `max = ""` as well
max = CInt( max) ''' convert `max` to a Variant of subtype Integer
If max < 0 Then Wscript.Quit
同时阅读Randomize Statement,Rnd Function和Looping Through Code。也许
Randomize
For count = 1 to max
''' more code here based on `count` value and `rnd()` function
Next
可能比
更好(随机种子)和更简单(循环)count=0
Do While max > count
count = count + 1
Randomize
''' more code here based on `count` value and `rnd()` function
Loop
最后,请阅读bypassing the errant keystrokes complaint:
我听说过有关使用
SendKeys
的最大抱怨之一 宏的方法是,如果窗口焦点以某种方式改变了 在脚本执行的中间,键盘将被发送到 任何窗口都能获得焦点。现在这种危险就是这个 用于一个窗口的击键可能会产生灾难性的影响(比如 应用于另一个窗口时导致数据丢失。