3

我有美国标准键盘,但我想通过使用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 ) ) ;

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

4

1 回答 1

2

使用KEYEVENTF_UNICODE时, kb.wScan 只需为wchar_tunicode 字符。不要使用MapVirtualKey.

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

UINT res = SendInput ( 1 , & kInput , sizeof ( INPUT ) ) ;
kb.dwFlags |= KEYEVENTF_KEYUP;
res = SendInput ( 1 , & kInput , sizeof ( INPUT ) ) ;
于 2013-12-19T10:15:56.020 回答