如何使用 c# 发送(keybd_event)Unicode 键
Posted
技术标签:
【中文标题】如何使用 c# 发送(keybd_event)Unicode 键【英文标题】:How to send(keybd_event) Unicode Keys with c# 【发布时间】: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);
【问题讨论】:
【参考方案1】:不要使用keybd_event()
。请改用SendInput()
。为此目的,它有一个KEYEVENTF_UNICODE
标志。您可以使用它发送实际的 UTF-16 代码单元(.NET String
中的每个 char
都被编码为 UTF-16 代码单元)。完全不需要模拟 Alt+xxxx 代码。例如:
https://***.com/a/30630477/65863
https://***.com/a/15442914/65863
https://***.com/a/8885228/65863
【讨论】:
寻找解决方案。 SendInput() 对我不起作用。 那你可能没有正确使用它。它确实有效。 非常感谢雷米。我不能轻易做到。几次阅读您的答案后,我清楚了我必须做什么。非常感谢。 这绝对有效。感谢@RemyLebeau 的链接。这应该被标记为正确答案。以上是关于如何使用 c# 发送(keybd_event)Unicode 键的主要内容,如果未能解决你的问题,请参考以下文章