2

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

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

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

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

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

4

1 回答 1

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);
}
于 2011-05-28T21:39:02.143 回答