代码之家  ›  专栏  ›  技术社区  ›  Jeremy

将字符转换为虚拟密钥代码

  •  3
  • Jeremy  · 技术社区  · 14 年前

    我有一个值字符串,我想在窗口中为每个字符模拟按键事件。

    我计划派 WM_KEYDOWN , WM_CHAR ,和 WM_KEYUP 事件(当手动按下某个键时似乎会发生这种情况)。

    这些消息需要在wParam中基于 virtual key codes . 我可以循环遍历字符串并获取每个字符,但是如何获取该字符并将其转换为与虚拟键代码相对应的值呢?Convert.ToInt32()不起作用。

    7 回复  |  直到 14 年前
        1
  •  4
  •   Hans Passant    14 年前

    发送WM\u KEYDOWN/UP很麻烦。应用程序本身已经使用修改键(Shift、Alt、Ctrl)的状态和键盘布局将WM\u KEYDOWN消息转换为WM\u CHAR。这两个你都不能控制,你会得到错误的字符,随机。

    只需发送WM\u CHAR消息,将wparam设置为字符代码。不用担心lparam,很少有应用程序使用它。

        2
  •  10
  •   Andreas Magnusson    14 年前

    VkKeyScanEx

    “将字符转换为相应的虚拟键代码和移位状态。”

    (您也可以使用 VkKeyScan 但请注意,它已被VkKeyScanEx取代。)

        3
  •  0
  •   Dominic K    14 年前

    它看起来像是接受ASCII字符并将其转换为十六进制。例如,十六进制中的“A”是41。根据图表,A是0x41,这是正确的(0x引爆十六进制)。

        4
  •  0
  •   Jerry Coffin    14 年前

    WM_KEYDOWN , WM_CHAR WM_KEYUP SendInput (首选)或可能 keybd_event (已弃用)。

        5
  •  0
  •   Giorgi    14 年前

    Input Simulator 库,它提供了一个模拟按键的高级api,并处理所有的低级内容。

        6
  •  0
  •   Powerlord    14 年前

    System.Windows.Forms.SendKeys

    问题是.NET无法在另一个应用程序(即 SendKeys docs

        7
  •  0
  •   bobobobo    14 年前

    一般的解决方案是使用 SendMessage This link 描写 SendMessage 的签名,并提供了一个导入示例。

    哦,为了映射VK代码,你应该使用 MapVirtualKey -最好假设映射是任意的,而不是逻辑的。