我想发送像“a”这样的键,而不是像我的应用程序中的Shift那样的按键,就像屏幕键盘一样。我使用了这段代码,但它不起作用:
IntPtr p = FindWindow(null, <myWindowTitle>);
ShowWindow(GetWindow(p, 3), 5);
SendKeys.SendWait("a");
但我仍然无法将密钥发送到上一个窗口!
答案 0 :(得分:2)
您所描述的实际上与屏幕键盘完全不同。它将击键发送到活动窗口。请注意,OSK永远不会实际接收输入焦点,而这完全是设计上的。
SendKeys
仅将输入发送到活动窗口。在Windows UI模型中,这是唯一可以接收键盘/鼠标输入的窗口。这就是首先将“主动”/“聚焦”窗口区分开来的重点。
如果不准确了解您要完成的任务,很难为您的问题提出替代解决方案。一些想法:
没有理由重新实施OSK;它与所有版本的Windows捆绑在一起,因此您只需使用Process.Start
启动它,并确保一切正常。
如果 需要自己做这样的事情,请查看复制其设计并防止输入窗口获得焦点。这将强制接收键盘事件的窗口保持焦点并允许它接收该输入。
或者,您可以调用SetForegroundWindow
function来激活接收键盘输入的窗口,但我不建议这样做。