【问题标题】:VB.NET How to send key 46 (Chr(46)) with SendMessageVB.NET 如何使用 SendMessage 发送密钥 46 (Chr(46))
【发布时间】:2012-06-15 15:11:31
【问题描述】:

我正在使用 VB.net 自动化 IBM iSeries Emulators,创建的 GUI 使用“SetParent”API 将外部 iSeries Emulator 窗口嵌入到 WindowsForm 面板中。为了与 iSeries 窗口通信,我使用 SendMessage API 将密钥发送到屏幕。我知道 .net 中的 sendkeys.keys,但这样我就不必 SetForegroundWindow 并重新激活我的表单。

我的程序读取秤的输出并验证接收到的数据是否良好,如果是,它将使用此代码将输出发送到 iSeries 屏幕(UserApi 是我的 Lib):

For Each element As Char In CStr(txtto400.Text)
    UserApi.SendMessage(as400WindowHandle, 256, CType(Convert.ToInt32(element), IntPtr), CType(0, IntPtr))
Next

我在其他项目上做过几次,这种方法效果很好,但在我的 TextBox (txtto400.Text) 中,我的体重值类似于“000.88 KG”。 SendMessage 不会发送作为句点 (.) 的键“46”,而是“00088 KG”

有人知道为什么这不起作用吗?有什么建议吗?

编辑:

感谢 Paul B. 给了我提示。

这是我的解决方法。

我的 SendMessage 函数如下所示:

<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Shared Function SendMessage( _
   ByVal hwnd As IntPtr, _
   ByVal wMsg As UInt32, _
   ByVal wParam As IntPtr, _
   ByVal lParam As IntPtr) As IntPtr
End Function

我创建了一个包含 VK_OEM_PERIOD 的变量:

Public Const VK_OEM_PERIOD = &HBE

创建了一个检查 Chr 的函数:

Public Function vk_key(key As Char) As Integer
 Select Case key
     Case Is = Chr(46)
         Return VK_OEM_PERIOD
     Case Else
        Return AscW(key)
 End Select
End Function

这是我将它传递给 iSeries 窗口的方式:

For Each element As Char In txtto400.Text
   UserApi.SendMessage(as400WindowHandle, 256, vk_key(element), 0)
Next

【问题讨论】:

  • 我们需要查看你的 SendMessage 函数的代码来帮助解决这个问题
  • WM_KEYDOWN 已发布,未发送。并使用虚拟键,而不是字符。考虑改为发送 WM_CHAR,消息 258。

标签: vb.net winapi


【解决方案1】:

WM_KEYDOWN 消息需要“非系统密钥的虚拟密钥代码”作为 wParam(请参阅 MSDN)。

这恰好对应于字母数字符号的键字符的 ASCII 值,但不适用于所有其他键。有一段时间我认为您需要发送VK_OEM_PERIOD

您可以在此处找到虚拟键代码表:http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx

【讨论】:

  • 成功了,谢谢!! :-) 现在一切都说得通了,它适用于所有字母和数字键,但不适用于其他键。如果我检查字符是否为“。”并在那时发送 VK_OEM_PERIOD 它可以工作。我将创建一个检查字符的函数,然后将值转换为虚拟键代码,我应该很高兴。再次感谢!
猜你喜欢
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 2021-10-25
  • 2011-07-02
相关资源
最近更新 更多