出於某種奇怪的原因,視覺男孩進展似乎既不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