【问题标题】:How to simulate specified keyboard keystroke in c++?如何在 C++ 中模拟指定的键盘击键?
【发布时间】:2014-01-07 13:28:38
【问题描述】:

我有美国标准键盘,但我想使用SendInput 方法来模拟意大利语或中文类型的击键。

我是这样使用 SendInput 方法的,

KEYBDINPUT  kb = { 0 } ;

ZeroMemory ( & kb , sizeof ( KEYBDINPUT ) ) ;
ZeroMemory ( & kInput , sizeof ( INPUT ) ) ;

kb.wVk = 0 ; 
kb.dwFlags  =  KEYEVENTF_UNICODE ;
kb.wScan  = vk ; //vk is result of MapVirtualKey key API
kInput.type = INPUT_KEYBOARD ;
kInput.ki = kb ;

UINT res = SendInput ( 1 , & kInput , sizeof ( INPUT ) ) ;

注意:- 无需更改键盘设置。

【问题讨论】:

  • 我认为您在寻找错误的地方 - 原始键盘输入不是完成大部分语言特定内容的地方。也许您需要考虑模拟 IME 和/或一些辅助功能 API。
  • 我是中国人,应该说中文键盘布局和en-us是一样的。中文字形的输入是使用输入法进行的。
  • @jiandingzhe 能否详细解释一下,如何使用SendInput法输入汉字?
  • @user2778665 我对 Windows API 知之甚少,我不知道 SendInput 是否可以处理超过 8 位的字符。如果没有,你需要一个“输入法”,它是一个程序,它会截取你的击键,以特定的方式解析它们(最常见的是,作为声音标点符号),在一个窗口中列出几个候选字符,然后你选择想要的字符.

标签: c++ winapi keyboard sendinput


【解决方案1】:

使用KEYEVENTF_UNICODE 时,kb.wScan 必须是wchar_t unicode 字符。 不要使用MapVirtualKey

另外,不要忘记在 Key Down 之后发送“Key Up”转换。

UINT res = SendInput ( 1 , & kInput , sizeof ( INPUT ) ) ;
kb.dwFlags |= KEYEVENTF_KEYUP;
res = SendInput ( 1 , & kInput , sizeof ( INPUT ) ) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2021-11-30
    相关资源
    最近更新 更多