【问题标题】:Problem with sendkeys in .NET.NET 中的 sendkeys 问题
【发布时间】:2010-05-21 15:49:04
【问题描述】:

我有一个 Windows 应用程序,我使用发送键从一个窗口导航到另一个窗口。我的发送键序列就像在我的应用程序中激活另一个窗口,并将击键发送到该窗口。但是我发送的击键在我激活另一个窗口的同一个窗口中得到更新。

但在几次击键后,它会转到另一个窗口。似乎发送密钥的同步问题。有没有办法指定当前send key的操作完成后,再发送下一个sendkey。

【问题讨论】:

    标签: c# .net sendkeys


    【解决方案1】:

    我发现 sendkeys 是不可靠的。请改用input simulator

    【讨论】:

    • 我使用 sendkeys 添加了一个应用程序,当我为 .net 2 框架构建它时,它没有按预期工作(即使它没有抛出任何错误消息),但是当我刚刚更改时.net 4 的目标框架完美运行!是不是很神奇?
    【解决方案2】:

    您是否尝试过使用SendKeys.SendWait。这将等到发送密钥并处理完操作后再继续。

    既然窗口在您自己的应用程序中,为什么不提供一组函数来执行这些操作,而不是使用 SendKeys。函数可以在创建并激活窗口后创建窗口,您可以通过处理 Activated 事件检测到,然后您可以使用 SendKeys 将击键发送到新窗口,如果您真的需要,否则再次在窗口类,您可以调用它来执行击键将引发的操作。您可能可以定义一个常见的interface,您的窗口实现该interface 以促进这种交互。

    【讨论】:

    • 是的,我只使用 SendKeys.SendWait 方法。有没有办法指定它必须等待的持续时间
    • @zapping,这正是 SendWait 所做的,它发布密钥然后调用 Flush。根据时间的不同,第二次调用flush可能会也可能不会起作用,依赖它总是有风险的。 @AvidProgrammer,我想问题是发送密钥时所采取的操作可能是通过使用 PostMessages internall 完成的,它基本上发布一条消息并立即返回,因此使 SendWait 无用。恕我直言,在通话之间人为地睡觉会很糟糕。
    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多