在其他程序中人为生成关键事件

时间:2011-05-28 21:31:42

标签: c# media-player keyevent kinect

具有焦点的C#程序是否可以人为地生成将由另一个打开的应用程序处理的键事件?

对于那些好奇的人,这就是我要问的原因:

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

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

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

1 个答案:

答案 0 :(得分:1)

它需要从C#做一点p / invoke工作,但它并不复杂。您将使用FindWindow API获取目标程序的hWnd,然后使用PostMessage 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);
}