我想编写一个虚拟键盘,就像 Windows 屏幕键盘一样适用于触摸屏电脑。但是我遇到了一个问题:我的虚拟键盘会从正在使用的应用程序中夺取焦点。Windows 屏幕键盘即使用户单击它也会保持当前应用程序的焦点。在 C# 中的 Windows 窗体中是否有方法可以实现同样的功能?
目前我唯一能做的事情就是向特定的应用程序发送键盘事件,例如在下面的代码中的记事本。如果我可以让表单不可聚焦,我就可以使用 GetForegroundWindow 获取当前具有焦点的窗口。
目前我唯一能做的事情就是向特定的应用程序发送键盘事件,例如在下面的代码中的记事本。如果我可以让表单不可聚焦,我就可以使用 GetForegroundWindow 获取当前具有焦点的窗口。
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr calculatorHandle = FindWindow("notepad", null);
SetForegroundWindow(calculatorHandle);
SendKeys.SendWait("111");
}
有没有一种方法可以做到这一点?是否有更好的建议,以便表单可以将键盘事件发送到正在使用的应用程序?
谢谢!
createParams.ExStyle
进行添加而不是完全替换它吧?比如说,使用createParams.ExStyle |= WS_EX_NOA[...]
。 - Jesse