使用WM_CHAR消息发出键盘输入

Emitting keyboard input using WM_CHAR message?

本文关键字:键盘 输入 消息 WM CHAR 使用      更新时间:2023-10-16

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

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

如果可能,我如何在Windows CE和Windows Mobile上做到这一点?我需要同时支持桌面和移动设备。

感谢您的帮助! :)

代码演示如何模拟 unicode 的键盘。小心:

  1. 您必须激活目标应用程序,因为键盘事件排队到活动应用程序...
  2. 目标应用程序必须可识别 Unicode
#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;
}