C# 在其他程序中人工生成关键事件

C# 在其他程序中人工生成关键事件,c#,media-player,keyevent,kinect,C#,Media Player,Keyevent,Kinect,具有焦点的C程序能否人工生成一个将由另一个打开的应用程序处理的关键事件 对于那些好奇的人,这就是为什么我要问: 我目前正在为基于手势的媒体播放器的设计构思制作一个演示/模型,使用Kinect作为主要输入设备。这是我决定做的一件好事,它既不需要也不值得我花大量时间来编程 为了加快进度,我使用FAAST工具,您可以使用它轻松地将关键事件绑定到特定手势。所以,你打开这个程序,告诉它什么键映射到什么手势,然后当你做手势时,这个键被当前应用程序注册为按下 我想创建的是一个中间人,它将显示一个简单的GUI,

具有焦点的C程序能否人工生成一个将由另一个打开的应用程序处理的关键事件

对于那些好奇的人,这就是为什么我要问:

我目前正在为基于手势的媒体播放器的设计构思制作一个演示/模型,使用Kinect作为主要输入设备。这是我决定做的一件好事,它既不需要也不值得我花大量时间来编程

为了加快进度,我使用FAAST工具,您可以使用它轻松地将关键事件绑定到特定手势。所以,你打开这个程序,告诉它什么键映射到什么手势,然后当你做手势时,这个键被当前应用程序注册为按下


我想创建的是一个中间人,它将显示一个简单的GUI,我将向观众显示。在某一时刻,用户将做出选择手势,我希望音乐开始在一个开放的媒体播放器中播放。因此,我会检查它们在菜单层次结构中的位置,查看它们是否根据我选择的某个键选择了音乐,以任意表示选择,然后使用MediaPlayPause键生成一个键事件。

这需要从C执行一些p/invoke工作,但并不复杂。您将使用API获取目标程序的hWnd,然后使用API发送关键事件:

[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
private static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

private const UInt32 WM_KEYDOWN = 0x0100;
private const UInt32 WM_KEYUP = 0x0101;

public static void SendSelect(IntPtr HWnd)
{
    PostMessage(HWnd, WM_KEYDOWN, KeyInterop.VirtualKeyFromKey(System.Windows.Input.Key.Enter), 0);
}

您想与其他应用程序中的菜单交互,还是该菜单将位于您的应用程序中?将事件发送到另一个窗口相当简单,但确定另一个应用程序的状态要困难得多。