SendKeys不使用句点字符

时间:2016-03-16 14:59:02

标签: .net vb.net sendkeys

我试图发送期间"。"使用SendKeys.Send和SendKeys.SendWait方法的字符(以及"。"和" {。}"表单),它似乎不起作用(即应用程序挂起)

我在使用" dot"时遇到了麻烦。字符,因为其他符号没有问题发送。

我也尝试传递Keys.OemPeriod枚举值,但我得到的是发送其字符串表示" OemPeriod"或者数值188,取决于我使用的方法(强制转换或ToString),因为Send / SendWait只接受一个字符串值。

PS如果您想知道,我正在实现类似Excel的行为,即使用IMessageFilter对象将Keys.Decimal(小键盘句点)值转换为当前小数点分隔符。

修改 经过一些测试后,我发现如果在" Del"上使用逗号的键盘布局,它会起作用。小键盘的按钮设置。 发送"。"时似乎发生了冲突。它既是Keys.OemPeriod又是Keys.Decimal,但我需要区分它们以实现一致的行为。

EDIT2

以下是我的过滤器原型的一些示例代码

Public Class DecimalKeyFilter
   Implements IMessageFilter

   Private Const WM_KEYDOWN As Integer = &H100

   Public Function PreFilterMessage(ByRef m As Message) As Boolean _
      Implements IMessageFilter.PreFilterMessage

      If (m.Msg <> WM_KEYDOWN) Then Return False

      Dim key As Keys = DirectCast(m.WParam.ToInt32() And Keys.KeyCode, Keys)
      If (key <> Keys.Decimal) Then Return False

      Dim separator As String = CurrentCulture.NumberFormat.NumberDecimalSeparator
      SendKeys.Send(separator)
      Return True
   End Function
End Class

EDIT3

为了完整起见,我通过调用本地SendInput函数解决了这个问题,该函数似乎是SendKeys底层Win32 API,并且直接在{{1}接受虚拟密钥代码格式。 当我发送映射到多个虚拟密钥的字符串表示时,我发现冲突正在发生,这会使SendKeys成为一个非常糟糕的API。 无论如何,这只是我的假设,所以对此行为的任何进一步解释都是受欢迎的

0 个答案:

没有答案