出于某种奇怪的原因,视觉男孩进展似乎既不SendMessage函数也不keybd_event回应当用于自己的时候。但是如果你一起使用它,它就开始工作。因此,使用C中的WinAPI的++(您可以根据需要翻译成Python,我不熟悉Python就够了),这的SendKeys(窗口键)方法的工作与Visual Boy Advance的:
/* Just a struct to make keypress messages more organized and easier to set up */
struct extraKeyInfo {
unsigned short repeatCount;
unsigned char scanCode;
bool extendedKey, prevKeyState, transitionState;
/* Convert this struct's data into the properly-encoded unsigned int on casting */
operator unsigned int()
{
return repeatCount | (scanCode << 16) | (extendedKey << 24) |
(prevKeyState << 30) | (transitionState << 31);
}
};
/* The main method */
void sendKey(HWND hCurrentWindow, BYTE keyval) {
extraKeyInfo lParam = {};
BYTE vkCode=keyval;
lParam.scanCode = MapVirtualKey(vkCode, 0);
keybd_event(vkCode, lParam.scanCode, 0x0, 0x0);
SendMessage(hCurrentWindow, WM_KEYDOWN, vkCode, lParam);
lParam.repeatCount = 1;
lParam.prevKeyState = true;
lParam.transitionState = true;
keybd_event(vkCode, lParam.scanCode, 0x2, 0x0);
SendMessage(hCurrentWindow, WM_KEYUP, vkCode, lParam);
}
请注意,我仅在前台使用VBA进行测试,所以如果它在后台可能无法正常工作,但它在我的前台测试中100%可以正常工作。
我遇到过同样的问题,并尝试了您的解决方法,但症状仍然存在。我最终按下了正确的按钮,但仿真器没有收到它们。如果你不介意问我,你还雇用了什么其他组件?另外,您是使用旧的VisualBoyAdvance还是较新的VisualBoyAdvance M?如果后者是32位或64位? – PikalaxALT
这只是VBA,64位。它可能会帮助你知道VK_CODE的不包括箭头,而是数字锁箭头,所以它应该在数字键上按8/4/6/2 – sunshinekitty
其实,我遇到了这个问题,按'A'或'返回“。什么键/值对为你工作? 在笔记上,我的电脑没有数字键盘(15“笔记本),另外我使用的是64位VBA-M,它是建立在VBA源代码上的。 – PikalaxALT