keybd_event,特殊字符和键盘布局?

发布于 2024-11-05 12:18:08 字数 493 浏览 1 评论 0原文

我正在开发一个 C# .net 应用程序,允许用户插入文本并让应用程序自动键入文本。它的作用是解析该文本的每个字符并单独发送每个击键。

但是,我想知道是否有办法真正知道输出是什么。例如,

但是,我有点担心特殊字符和键盘布局。

作为参考,我发现此页面包含关键代码: http://msdn.microsoft .com/en-us/library/ms927178.aspx

此页面包含以下几行:

VK_OEM_5 = "\|" for US
VK_OEM_102 = "<>" or "\|" on RT 102-key keyboard

现在,如果我的文本包含“\”,我如何知道是否必须发送 VK_OEM_5 或 VK_OEM_102?

谢谢!

I'm developing a C# .net application that allows users to insert text and have the appliaction automatically type it. What it does is parse every character of this text and send every keystroke seperatly.

However, I am wondering if there's a way to actually know what the output will be. For example,

However, I am a little worried about special characters and keyboard layouts.

For reference, I found this page with the key codes: http://msdn.microsoft.com/en-us/library/ms927178.aspx

This page has the folloing lines:

VK_OEM_5 = "\|" for US
VK_OEM_102 = "<>" or "\|" on RT 102-key keyboard

Now, if my text conains a '\', how do I know if I have to send VK_OEM_5 or VK_OEM_102?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独行侠 2024-11-12 12:18:08

为什么不直接将 WM_CHAR 发送到目标窗口?这适用于大多数程序(通常只有游戏有问题)。这样就可以完全避免键盘布局问题。

Why don't you just send WM_CHARs to the target window? This works with most programs(usually only games have problems with it). That way you circumvent the keyboard layout problem completely.

薄荷→糖丶微凉 2024-11-12 12:18:08

考虑到键盘布局,我已经成功使用此代码发送您想要的每个字符(在我的示例中是“%”)。

short nCode = VkKeyScan('%');
if ((nCode & 0x0100) == 0x0100)
    keybd_event(VK_LSHIFT, 0, 0, 0);
if ((nCode & 0x0200) == 0x0200)
    keybd_event(VK_LCONTROL, 0, 0, 0);
if ((nCode & 0x0400) == 0x0400)
    keybd_event(VK_RMENU, 0, 0, 0);
keybd_event((byte)(nCode & 0x00FF), 0, 0, 0);
keybd_event((byte)(nCode & 0x00FF), 0, KEYEVENTF_KEYUP, 0);
if ((nCode & 0x0100) == 0x0100)
    keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
if ((nCode & 0x0200) == 0x0200)
    keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
if ((nCode & 0x0400) == 0x0400)
    keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0);

I've succeeded using this code that sends every char you want (in my sample is '%'), considering the keyboard layout.

short nCode = VkKeyScan('%');
if ((nCode & 0x0100) == 0x0100)
    keybd_event(VK_LSHIFT, 0, 0, 0);
if ((nCode & 0x0200) == 0x0200)
    keybd_event(VK_LCONTROL, 0, 0, 0);
if ((nCode & 0x0400) == 0x0400)
    keybd_event(VK_RMENU, 0, 0, 0);
keybd_event((byte)(nCode & 0x00FF), 0, 0, 0);
keybd_event((byte)(nCode & 0x00FF), 0, KEYEVENTF_KEYUP, 0);
if ((nCode & 0x0100) == 0x0100)
    keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
if ((nCode & 0x0200) == 0x0200)
    keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
if ((nCode & 0x0400) == 0x0400)
    keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文