【问题标题】:How to send(keybd_event) Unicode Keys with c#如何使用 c# 发送(keybd_event)Unicode 键
【发布时间】:2015-09-30 23:10:41
【问题描述】:

如何将所有 Unicode 密钥发送到 'keybd_event' 。 . ?

我在下面找到了“Alt + Unicode(十进制代码)”方法和 C++ 代码

但是,我在 c# 中尝试失败。 .

void TypingMessageFromCodePage(TCHAR* Message, UINT CodePage=0)
{
    TCHAR Word[2];
    TCHAR WordCode[64];
    char MultiByte[64];

    static const BYTE NumCode[10]={0x2D, 0x23, 0x28, 0x22, 0x25, 0x0C, 0x27, 0x24, 0x26, 0x21};
    int Length = wcslen(Message);

    for(int i=0; i<Length; i++)
    {
        Word[0] = Message[i];
        Word[1] = L'\0';

        WideCharToMultiByte(CodePage, 0, Word, -1, MultiByte, 64, NULL, NULL);
        _itow((int)(((~MultiByte[0])^0xff)<<8)+((~MultiByte[1])^0xff), WordCode, 10);

        keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);

        for(int j=0; j<wcslen(WordCode); j++)
        {
            keybd_event(NumCode[(int)WordCode[j]-48], MapVirtualKey(NumCode[(int)WordCode[j]-48], 0), 0, 0);
            keybd_event(NumCode[(int)WordCode[j]-48], MapVirtualKey(NumCode[(int)WordCode[j]-48], 0), KEYEVENTF_KEYUP, 0);
        }
        keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
    }
}

【问题讨论】:

    标签: c# unicode keyboard


    【解决方案1】:

    不要使用keybd_event()。请改用SendInput()。为此目的,它有一个KEYEVENTF_UNICODE 标志。您可以使用它发送实际的 UTF-16 代码单元(.NET String 中的每个 char 都被编码为 UTF-16 代码单元)。完全不需要模拟 Alt+xxxx 代码。例如:

    https://stackoverflow.com/a/30630477/65863

    https://stackoverflow.com/a/15442914/65863

    https://stackoverflow.com/a/8885228/65863

    【讨论】:

    • 寻找解决方案。 SendInput() 对我不起作用。
    • 那你可能没有正确使用它。它确实有效。
    • 非常感谢雷米。我不能轻易做到。几次阅读您的答案后,我清楚了我必须做什么。非常感谢。
    • 这绝对有效。感谢@RemyLebeau 的链接。这应该被标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多