首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SendKeys并不总是有效的

SendKeys并不总是有效的
EN

Stack Overflow用户
提问于 2014-01-10 16:37:50
回答 2查看 11K关注 0票数 7

我正在使用Excel VBA中的.SendKeys()向外部窗口发送击键,我正在使用外壳.AppActive方法激活该窗口。问题是SendKeys的行为不一致,有时发送密钥,有时不发送。我认为这与根据MSDN文档将键存储在缓冲区中有关。

如何解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 16:37:50

我发现这个问题的解决方案是让应用程序暂停一小段时间。这似乎允许缓冲区被清除(如果我错了,请纠正我)。

为了让Excel VBA进入休眠状态,我在一个模块的顶部写道,暴露了windows API函数Sleep

代码语言:javascript
运行
复制
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

然后在每个SendKeys命令之后,我只需使用:

代码语言:javascript
运行
复制
Sleep 1

从字面上看,1毫秒就能造成所有的差异,而且密钥总是被正确发送。

票数 3
EN

Stack Overflow用户

发布于 2014-01-10 22:43:48

你可以考虑使用Autoit,它比SendKeys更可靠。

从下面的链接http://www.autoitscript.com/site/autoit/downloads/下载Autoit

Add in reference autoit Add in AutoItX3 1.0类型库

下面是打开计算器并输入123456789的示例代码

代码语言:javascript
运行
复制
Sub sendkeys()

'Open a calc
    StartCalculator

    Dim au As New AutoItX3Lib.AutoItX3
    au.AutoItSetOption "WinTitleMatchMode", 2

    au.WinActivate "Calculator"

    'send key strokes
    au.ControlClick "Calculator", "", "Button5"
    au.ControlClick "Calculator", "", "Button11"
    au.ControlClick "Calculator", "", "Button16"
    au.ControlClick "Calculator", "", "Button4"
    au.ControlClick "Calculator", "", "Button10"
    au.ControlClick "Calculator", "", "Button15"
    au.ControlClick "Calculator", "", "Button3"
    au.ControlClick "Calculator", "", "Button9"
    au.ControlClick "Calculator", "", "Button14"

End Sub

Sub StartCalculator()
    Dim Program As String
    Dim TaskID As Double
    On Error Resume Next
    Program = "calc.exe"
    TaskID = Shell(Program, 1)
    If Err <> 0 Then
        MsgBox "Can't start " & Program
    End If
End Sub

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21039489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档