以下链接解释了 SendKeys 等待参数 false 或 true 之间的区别。
等待可选。指定等待模式的布尔值。如果为 False(默认值),则在发送密钥后立即将控制权返回到过程。如果为 True,则必须在控制权返回到过程之前处理击键。
但我不明白这意味着什么。
这是第一个代码:
Sub Macro1_ForFalseExample()
'If False (default), control is returned to the procedure immediately after the keys are sent
Range("A1").Select
SendKeys "Fruit Name", False
Range("A2").Value = "Apple"
End Sub
这是第二个代码:
Sub Macro2_ForTrueExample()
'If True, it sends the keys, and then waits for the user to press another key
Range("B1").Select
SendKeys "Car Name", True
Range("B2").Value = "Toyota"
End Sub
当我运行上面的代码时,我看不出有什么区别。
使用
SendKeys
,考虑 wait
参数会很有帮助,它为您提供了 SendKeys
同步操作 (wait=true
) 或异步操作 (wait=false
) 的选项。当然不是那么简单,但它可以帮助理解其含义。
使用
不会等待用户按下任何键,它只是等待程序完成处理按键后再返回代码。
wait=true
取决于您实际发送的内容以及您的自动化期望是什么,但默认使用
true
通常会很有帮助,因为它使界面有时间对您的输入做出反应。如果您发送了一个命令,例如 copy 或 paste,那么您会希望该操作在执行下一行代码之前完成。
wait=true
,否则后续的 ctrl+v(粘贴)可能会粘贴之前捕获的内容,或者如果您的代码执行速度比您正在自动化的界面可以跟上的速度快,则什么也没有。如果
SendKeys
之后没有后续代码,那么等待与否都无关紧要,在这种情况下wait=false
会给人一种性能更好的印象,因为你的代码将立即继续执行。
等待与否的一般含义是应用程序可能具有需要时间执行的关键事件处理程序逻辑,在某些情况下应用程序甚至可能阻止处理。如果您的逻辑在
SendKeys
之后检查 UI,那么您将始终想要使用 wait=true
。
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' Run Calculator.
AppActivate ReturnValue ' Activate the Calculator.
For I = 1 To 100 ' Set up counting loop.
SendKeys I & "{+}", True ' Send keystrokes to Calculator
Next I ' to add each value of I.
SendKeys "=", True ' Get grand total.
SendKeys "%{F4}", True ' Send ALT+F4 to close Calculator.
如果您没有等待应用程序完成按键处理,您的代码可能会比 UI 运行得更快,并可能导致 UI 丢失一些按键消息。
SendKeys
不是通用队列,如果应用程序未准备好接收输入,则消息将被忽略。