gpt4 book ai didi

c# - 使用 C#/Windows API 的虚拟键盘 - 发送键输入,但不获取焦点

转载 作者:太空宇宙 更新时间:2023-11-03 21:51:50 25 4
gpt4 key购买 nike

我正在用 C# 构建自定义虚拟键盘​​。

要点是将特定按键发送到当前具有焦点的窗口。但是,通常情况下,虚拟键盘上的键会在按下后获得焦点。

我假设某种 Windows API 应该用于此目的。如果是,哪一个,如果不是,正确的做法是什么?

最佳答案

这里有一个关于这个主题的好资源:http://www.yortondotnet.com/2006/11/on-screen-keyboards.html

基本上,创建一个表单并为键而不是按钮使用标签。您将需要覆盖 CreateParams 以设置正确的样式。您还必须覆盖 WndProc 并过滤掉通常将焦点发送到您的窗体的消息。然后将点击事件添加到您的标签并使用 SendKeys.Send(keyPressed); 将实际击键发送到具有焦点的窗口。

这是链接中的相关代码:

    private const int WS_EX_NOACTIVATE = 0x08000000;

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

private const int WM_MOUSEACTIVATE = 0x0021;
private const int MA_NOACTIVATE = 0x0003;
protected override void WndProc(ref Message m)
{
//If we're being activated because the mouse clicked on us...
if (m.Msg == WM_MOUSEACTIVATE)
{
//Then refuse to be activated, but allow the click event to pass through (don't use MA_NOACTIVATEEAT)
m.Result = (IntPtr)MA_NOACTIVATE;
}
else
base.WndProc(ref m);
}

关于c# - 使用 C#/Windows API 的虚拟键盘 - 发送键输入,但不获取焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14141274/

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