发送密钥功能输入密钥问题

Sendkey Function Enter Key Issue

本文关键字:密钥 问题 输入 功能      更新时间:2023-10-16

这就是我的问题,我一直在尝试用sendinput()函数模拟各种关键事件,我什至编写了函数来模拟复杂的关键事件,如winkey+D,alt+f4等,无论如何一切正常,直到我决定尝试使用虚拟键代码返回 Enter键 又名返回 VK_RETURN 这个不错的 msdn VK 代码列表提供,问题是它不起作用

现在,我猜这个回车键可能有3个问题,

  1. 回车的虚拟键码和PC键盘实际使用的值不一样

  2. 代码错别字错误,错误电话等;我不太确定,因为发送输入适用于到目前为止测试的其余键

  3. 回车、回
  4. 车、回车或任何键盘键的超级明星都不像其他按钮那样工作,所以我的代码不适合它

注意:如果是 1 ,您能否启发一下如何以编程方式为给定按钮获取正确的键码值,而无需依赖 MSDN VK 列表等静态资源

无论如何,这是我的片段

我做了一个这样的输入结构,并将其分配为键盘输入

             INPUT Keybord;
         Keybord.type = INPUT_KEYBOARD;
         Keybord.ki.wScan = 0;
         Keybord.ki.time = 0;
         Keybord.ki.dwExtraInfo = 0;

在这里我分配一个按钮VK,我使用一个结构,因为我也
模拟了复杂的事件在这种情况下,下面的按键模拟功能工作正常,按下一个选项卡

 cndex[38].primary = VK_TAB;

现在这里是麻烦制造者,我这样分配

 cndex[39].primary =  VK_RETURN;

这是我的按键功能,第一次调用按下,第二次释放

        void Simple_press(int i){
     Keybord.ki.wVk = cndex[i].primary;
     Keybord.ki.dwFlags = 0;
     SendInput(1, &Keybord, sizeof(INPUT));
     Keybord.ki.dwFlags = KEYEVENTF_KEYUP;
     SendInput(1, &Keybord, sizeof(INPUT));
 };

另一个注意事项是我不想使用 sendKeys 函数 ,它的缓慢和 它也不适用于"{ENTER}"参数

如果您的应用程序有一个窗口,则可以使用 spy++ 工具来查看 SendInput 命令正在发送的数据,如果目标也有窗口,则可以使用相同的工具来查看是否以及正在向其发送哪些消息。这是一个方便的工具 - 它可能有助于或至少引导您朝着正确的方向前进。

http://msdn.microsoft.com/en-us/library/aa264396%28v=vs.60%29.aspx

好吧,

在使用 spy++ 进行一些简短调查后,似乎 Enter 的虚拟代码在我的键盘中是不同的,实际上它列出了一些虚幻的 PA1 是 IBM 大型机使用的占位键,我在这样的大型机中调试了我的,无论如何,我搜索了一下,我了解到您可以使用 mapvirtualkey() 将扫描代码转换为更可靠的 vk和 GetKeyboardLayout()(同一部分),它有助于获取我的键盘类型并在不依赖静态资源的情况下使用它。

这是我的spy++日志先去假的,然后是真回车键,再说一下,真进事件也发送字符消息,众所周知的"",似乎 char 消息不是由接收它的进程提取的,如 MSDN 在 Enter 键大小写中建议的那样,使用原始键事件消息

<000006> 000804EA P WM_KEYDOWN nVirtKey:VK_PA1 c重复:1 扫描码:00 f扩展:0fAltDown:0<000008> 000804EA P WM_KEYUP nVirtKey:VK_PA1 c重复:1 扫描码:00 f扩展:0fAltDown:0

<000014> 000804EA P WM_KEYDOWN nVirtKey:VK_RETURN c重复:1 扫描码:1C f扩展:0fAltDown:0<000015> 000804EA P WM_CHAR 查尔代码:"13" (13) c重复:1 扫描代码:1C 扩展:0fAltDown:0