使用WM_CHAR消息发出键盘输入?

时间:2013-09-14 10:52:38

标签: c++ c windows events unicode

我正在为Windows操作虚拟键盘。我知道我可以使用(例如)keybd_event()使用正确的虚拟键代码发出键盘事件,但这种方法完全不实用,并且不允许我输出(例如)中文或俄文字符,或者至少不容易。

在Windows上,是否可以通过发布WM_CHAR消息来模拟键盘事件?如果我可以这样做,那将是完美的,因为我只需要从UTF-8或UTF-16编码的配置文件中检索字符代码,并发布消息。

如果可能,我该如何在Windows CE和Windows Mobile上执行此操作?我需要支持桌面设备和移动设备。

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

代码简化如何为unicode模拟键盘。 请注意:

  1. 您必须激活目标应用程序,因为键盘事件排队到活动应用程序...
  2. 目标应用程序必须具有unicode感知功能
  3. #include <Windows.h>
    #include <tchar.h>
    
    static void send_unicode( wchar_t ch ) {
        INPUT input;
    
        // init
        input.type = INPUT_KEYBOARD;
        input.ki.time = 0;
        input.ki.dwExtraInfo = 0;
        input.ki.wVk = 0;
        input.ki.dwFlags = KEYEVENTF_UNICODE;
        input.ki.wScan = ch;
    
        // down
        SendInput( 1, &input, sizeof( INPUT ) );
    
        // up
        input.ki.dwFlags |= KEYEVENTF_KEYUP;
        SendInput( 1, &input, sizeof( INPUT ) );
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        _tprintf( TEXT( "you have 5 seconds to switch to an application which accepts unicode input (as Word)...\n" ) );
        Sleep( 5000);
        _tprintf( TEXT( "Sending...\n" ) );
        send_unicode( 946 );   // lowercase greek beta
        send_unicode( 269 );   // lowercase c-hachek
        send_unicode( 12449 ); // japanese katakana small a
        send_unicode( 4595 );  // korean hangul jongseong phieuph-pieup
    
        return 0;
    
    }