gpt4 book ai didi

C# - 将键盘事件发送到(最后)选定窗口

转载 作者:行者123 更新时间:2023-11-30 15:11:04 27 4
gpt4 key购买 nike

我想使用在这里找到的虚拟键盘组件 http://www.codeproject.com/KB/miscctrl/touchscreenkeyboard.aspx就像 Windows 中的屏幕键盘 (OSK.exe)。有人可以告诉我如何使用它,以便它始终保持在顶部,但用户可以选择桌面上的其他窗口进行键盘输入,就像 Windows 中的“屏幕键盘”一样,具体我不知道如何选择最后选择的窗口(不能仅使用 GetForegroundWindow 或 GetFocus,因为当用户单击虚拟键盘时它会获得焦点并且我得到键盘窗口本身的句柄)?这对我来说非常紧急,因此非常感谢任何建议。

提前致谢。

最佳答案

您需要做的是使您的窗口无法激活。这很容易通过覆盖 CreataParams 来完成。然后您可以使用 SendKey.Send 将按键发送到当前事件窗口,您的窗口永远不会变为事件状态。

这是一个简单的例子

  public partial class Form1 : Form
{
const int WS_EX_NOACTIVATE = 0x08000000;

public Form1()
{
InitializeComponent();
}

protected override CreateParams CreateParams
{
get
{
CreateParams param = base.CreateParams;
param.ExStyle |= WS_EX_NOACTIVATE;
return param;
}
}

private void button1_Click(object sender, EventArgs e)
{
SendKeys.Send("A");
}
}

您会注意到的一件奇怪的事情是,由于您的窗口永远不会变为事件状态,因此当您拖动窗口时它确实会做出相当奇怪的 react 。基本上拖动有效,只是在拖动过程中不提供视觉反馈。您可以通过覆盖 WndProc 并处理 WM_NCLBUTTONDOWN 和 WM_MOUSEMOVE 消息来解决此问题。

关于C# - 将键盘事件发送到(最后)选定窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com