gpt4 book ai didi

vbscript - 如何确保我的应用程序在调用 SendKeys 时保持焦点? (还有比使用 sleep 更好的方法吗?)

转载 作者:行者123 更新时间:2023-12-02 21:53:56 25 4
gpt4 key购买 nike

我正在更新一些脚本,这些脚本需要将焦点切换到应用程序,发送一些击键,然后再将焦点返回到另一个应用程序。

Option Explicit

dim objShell
set objShell = WScript.CreateObject("WScript.Shell")

objShell.AppActivate "AnApplication"
WScript.Sleep 1000

objShell.SendKeys("%{I}")
...
objShell.SendKeys("{END}")

WScript.Sleep 1000
objShell.AppActivate "AnotherApplication"

Set objShell = Nothing

我研究了对这些脚本进行的一些改进,我想做的一件事是删除 Sleep 语句以加快脚本的执行速度。在研究过程中,我发现建议您在继续之前检查 AppActivate 的返回值,以有效地使脚本等待,直到应用程序获得焦点并可以发送击键。

我尝试更新我的脚本来执行此操作 -

Option Explicit

dim objShell
set objShell = WScript.CreateObject("WScript.Shell")

While Not objShell.AppActivate "AnApplication"
Sleep 300
Wend

objShell.SendKeys("%{I}")
...
objShell.SendKeys("{END}")

While Not objShell.AppActivate "AnotherApplication"
Sleep 300
Wend

但是,击键似乎仅在焦点返回到 AnotherApplication 后才会发送。

有没有办法做到这一点,以确保 AnApplication 在发送击键时获得焦点,而不使用 sleep ?

最佳答案

正如我在评论中提到的,无需将 AppActivate() 放入循环中。这是一个同步调用,该函数在激活窗口(或尝试失败)之前不应返回。

如果您担心窗口失去焦点,可以在发送几次击键后再次调用 AppActivate(),也可以在组击键之前调用它.

例如:

If Not MySendKeys("AnApplication", "%{I}") Then MsgBox "Could not send %{I}"
If Not MySendKeys("AnApplication", "{End}") Then MsgBox "Could not send {End}"

Function MySendKeys(strApp, strKeys)
If objShell.AppActivate(strApp) Then
objShell.SendKeys strKeys
MySendKeys = True
End If
End Function

关于vbscript - 如何确保我的应用程序在调用 SendKeys 时保持焦点? (还有比使用 sleep 更好的方法吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23387987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com