将密钥发送到非活动窗口?

时间:2012-02-09 06:49:31

标签: .net winforms winapi sendkeys

我想发送像“a”这样的键,而不是像我的应用程序中的Shift那样的按键,就像屏幕键盘一样。我使用了这段代码,但它不起作用:

IntPtr p = FindWindow(null, <myWindowTitle>);
ShowWindow(GetWindow(p, 3), 5);
SendKeys.SendWait("a");

但我仍然无法将密钥发送到上一个窗口!

1 个答案:

答案 0 :(得分:2)

您所描述的实际上与屏幕键盘完全不同。它将击键发送到活动窗口。请注意,OSK永远不会实际接收输入焦点,而这完全是设计上的。

SendKeys仅将输入发送到活动窗口。在Windows UI模型中,这是唯一可以接收键盘/鼠标输入的窗口。这就是首先将“主动”/“聚焦”窗口区分开来的重点。

如果不准确了解您要完成的任务,很难为您的问题提出替代解决方案。一些想法:

  • 没有理由重新实施OSK;它与所有版本的Windows捆绑在一起,因此您只需使用Process.Start启动它,并确保一切正常。

  • 如果 需要自己做这样的事情,请查看复制其设计并防止输入窗口获得焦点。这将强制接收键盘事件的窗口保持焦点并允许它接收该输入。

  • 或者,您可以调用SetForegroundWindow function来激活接收键盘输入的窗口,但我不建议这样做。

相关问题