kinect を使用してジェスチャを分類するソフトウェアをいくつか作成し、それらのジェスチャを使用して、PC で実行されているエミュレーターでマリオ ゲームをプレイしたいと考えています。
それを再生するために、キーストロークをエミュレーターに送信しようとします。私のコードでは、最初にウィンドウを表示します (これは機能します)。
Process process = Process.GetProcessesByName("nnnesterJ")[0];
SetForegroundWindow(process.MainWindowHandle);
そして、キーストロークを送信しようとします:
case Movement.left: SendKeys.SendWait("{LEFT}"); break;
case Movement.right: SendKeys.SendWait("{RIGHT}"); break;
case Movement.upperleft: SendKeys.SendWait("{LEFT}{UP}"); current_move = Movement.stop; break;
case Movement.upperright: SendKeys.SendWait("{RIGHT}{UP}"); current_move = Movement.stop; break;
case Movement.jump: SendKeys.SendWait("{UP}"); current_move = Movement.stop; break;
case Movement.crouch: SendKeys.SendWait("{DOWN}"); break;
ただし、これは機能しません:(私はこれをExcelで試してみましたが、機能します(そして、キーが実際に正しいと確信しています)。
私もこれをやってみました:
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public static void PressKey(Keys key, bool up)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
if (up)
{
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
}
else
{
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
}
}
残念ながら、これも機能しません。誰かいくつかのオプションがありますか?
敬具、ヘクター