Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向外部应用程序发送击键_C#_Simulation_Keystroke - Fatal编程技术网

C# 向外部应用程序发送击键

C# 向外部应用程序发送击键,c#,simulation,keystroke,C#,Simulation,Keystroke,我使用kinect制作了一些软件来对手势进行分类,并希望使用这些手势在pc上运行的模拟器上玩马里奥游戏 为了播放它,我尝试向模拟器发送击键。 在我的代码中,我首先打开窗口(这样做有效): 然后我尝试发送击键: case Movement.left: SendKeys.SendWait("{LEFT}"); break; case Movement.right: SendKeys.SendWait("{RIGHT}"); break; case M

我使用kinect制作了一些软件来对手势进行分类,并希望使用这些手势在pc上运行的模拟器上玩马里奥游戏

为了播放它,我尝试向模拟器发送击键。 在我的代码中,我首先打开窗口(这样做有效):

然后我尝试发送击键:

         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);
            }
        }
但不幸的是,这也不行。有人有选择吗

亲切问候,,
Héctor

你的模拟器似乎运行得很高,而你的应用程序却没有


尝试以管理员身份运行您的应用程序,这应该可以达到目的。

您的模拟器似乎在提升,而您的应用程序却没有


尝试以管理员身份运行您的应用程序,这应该可以做到。

为什么不在setForeGroundIndow(hwnd)之后从USER32尝试SetActiveWindow(hwnd)…我认为这将解决您的问题

为什么不在setForeGroundIndow(hwnd)之后从USER32尝试SetActiveWindow(hwnd)…我认为这将解决您的问题

您是否尝试过使用SendInput API

使用此类:

使用:

var keyboard = new SendInputAPI.Keyboard();

// ...

keyboard.sendKey(SendInputAPI.Keyboard.KeyCode.A);
或:

var keys=newlist{KeyCode.Ctrl,KeyCode.C};//顺序很重要。
键盘。sendKeysDown(按键);
键盘。释放LastKeys();

您是否尝试过使用SendInput API

使用此类:

使用:

var keyboard = new SendInputAPI.Keyboard();

// ...

keyboard.sendKey(SendInputAPI.Keyboard.KeyCode.A);
或:

var keys=newlist{KeyCode.Ctrl,KeyCode.C};//顺序很重要。
键盘。sendKeysDown(按键);
键盘。释放LastKeys();

您能检查屏幕键盘是否与emulator一起工作吗?它可能会给我们提供更多信息。屏幕键盘(如谷歌)正在工作,而在其他应用程序(如excel)中发送按键命令也在工作。您能检查屏幕键盘是否与emulator一起工作吗?它可能会给我们提供更多信息。屏幕键盘(例如,在google中)正在运行,在其他应用程序(如excel)中,发送关键命令也在运行
var keys = new List<KeyCode> { KeyCode.Ctrl, KeyCode.C }; // order does matter.

keyboard.sendKeysDown(keys);
keyboard.releaseLastKeys();