gpt4 book ai didi

c# - 虚拟键盘失去焦点

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:49 24 4
gpt4 key购买 nike

我已经为实现以下代码的数字键盘创建了一个自定义表单:

private void btn1_Click(object sender, EventArgs e)
{
PressKey(Keys.D1);
}

[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

public static void PressKey(Keys key)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;

keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
}

我还使用了以下 block

protected override bool ShowWithoutActivation
{
get { return true; }
}

它作为记事本、word 或其他编辑器的魅力(也使用基本的 SendKeys 方法),但在我的应用程序中,在我打算使用它的网格单元格(或其他可编辑控件)中,它无法插入值.我意外地发现,当单元格未处于编辑模式但它具有焦点时,它只能插入一次值。

任何从一种形式到另一种形式的虚拟键盘实现示例都将受到高度赞赏

最佳答案

(评论太长,但可能还不够回答)

我们曾经开发过这样的键盘,我们使用了 SendKeys class from the .Net Framework (这只是 SendInput Win32 API call 的包装器)。

键盘形式覆盖了 Property CreateParams所以我们可以明确地告诉它不要获得焦点(或者键被发送到键盘表单......)

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

注意:我们注意到某些程序,如 Ultra VNC(用于远程控制)会阻止键盘的正确使用。我猜 UltraVNC 正在通过其驱动程序重新路由输入键,并且在此过程中丢失了一些东西,但从未发现是什么。

关于c# - 虚拟键盘失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43636631/

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