【问题标题】:SendKeys.send is sending a key, but the application is not interpreting this key as a commandSendKeys.send 正在发送密钥,但应用程序并未将此密钥解释为命令
【发布时间】:2021-07-30 13:53:21
【问题描述】:

我正在使用SendKeys 将击键发送到程序。

这是我的代码:

   If whandle <> 0 Then
        User32.SetForegroundWindow(whandle)
        System.Windows.Forms.SendKeys.Send("+")
    End If

(我也试过 SendWait() 而不是 Send()

这是 Spy++ 显示的我的窗口层次结构:

尽管我可以按标题找到窗口句柄并使用User32.FindWindowEx 循环遍历子项,但在调试时我只需输入 spy++ 所示的窗口句柄(从十六进制转换为十进制),我发现:

  • 找到正确的窗口并将其置于前面。
  • 但是这个名为 MetaTrader 的特殊程序没有任何反应(如果我使用记事本,窗口键是用记事本写的)。

所以我想我有以下问题之一:

  1. 我在窗口和子窗口上做错了(我真的不认为这会发生,因为我尝试了 Spy++ 显示的所有句柄)。
  2. SendKey("+") 与窗口处于活动状态时按“+”键不完全一样,存在一些差异。

在调用User32.SetForegroundWindow(whandle) 之后,如果我真的按下“+”键,就会发生所需的效果,即放大,但不是当我的程序在执行SendKeys 时。我还尝试使用其他产生命令的键,例如 Q 或 A(它们都是简单的键和字母)。

【问题讨论】:

    标签: vb.net sendkeys


    【解决方案1】:

    来自MS Docs

    加号 (+)、插入符号 (^)、百分号 (%)、波浪号 (~) 和 括号 () 对 SendKeys 有特殊含义。指定其中之一 将这些字符括在大括号 ({}) 中。例如,要 指定加号,使用“{+}”

    System.Windows.Forms.SendKeys.Send("{+}")
    

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 2018-11-12
      • 1970-01-01
      • 2017-09-20
      • 2020-11-24
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多