某些程序中无法识别WinAPI keybd_事件()

某些程序中无法识别WinAPI keybd_事件(),winapi,Winapi,我用atxmega与一个NES控制器建立了一个接口,该接口通过串口发送密钥。问题在于读取输入并相应地发送keybd_事件的程序 if(szBuff[0] & BTN_LEFT) { keybd_event(VkKeyScan('j'), 0, 0, 0); keybd_event(VkKeyScan('j'), 0, KEYEVENTF_KEYUP, 0); } 问题是,它在NES仿真器中无法被识别为“j”,而在浏览器中则是如此。如果不解释任天堂仿真器的工作原理,很难回

我用atxmega与一个NES控制器建立了一个接口,该接口通过串口发送密钥。问题在于读取输入并相应地发送keybd_事件的程序

if(szBuff[0] & BTN_LEFT) {
    keybd_event(VkKeyScan('j'), 0, 0, 0);
    keybd_event(VkKeyScan('j'), 0, KEYEVENTF_KEYUP, 0);
}

问题是,它在NES仿真器中无法被识别为“j”,而在浏览器中则是如此。

如果不解释任天堂仿真器的工作原理,很难回答这个问题。但您必须向VkKeyScan()提供虚拟密钥代码。哪个是“J”,不是“J”。只要没有按下Shift键,Windows就会将其转换为生成“j”的WM_CHAR消息

请注意,keybd_event()接受一个虚拟密钥和一个扫描代码。您正在将扫描代码作为虚拟密钥传递。修正:

 keybd_event('J', VkKeyScan('J'), 0, 0);

很抱歉,仿真器是FCEUX,但我无法确定它是如何读取键盘状态的。我注意到的一件事是,在按钮配置中,它会注意到事件何时被发送(按钮被按下),但它假定发送的keycode是0x00。切换到“J”不起作用。keybd_事件是否发送的不仅仅是按键?我对WINAPI不太熟悉。