gpt4 book ai didi

VB.NET:在 ProcessCmdKey 中确定键是否打印的最简单方法?

转载 作者:行者123 更新时间:2023-12-02 05:06:31 25 4
gpt4 key购买 nike

识别击键是否为可打印字符(应出现在文本框中的字符)的最简单方法是什么?我想将 F1、Home 等键与实际出现在文本框中的键分开。我试图通过自己识别所有不可打印的字符来避免大量的 IF 语句。

由于控件的设计原因,不能使用 KeyUp、KeyPress 等事件。

最佳答案

没有简单的方法。而且你不应该永远让自己陷入这种境地。从 ProcessCmdKey 或 KeyDown 中观察到的虚拟键到 KeyPress 事件中观察到的键入键的转换非常复杂。这取决于用户选择的键盘布局。键盘布局因世界各地的机器而异。中文键盘看起来不太像英文键盘,您肯定可以想象得到。此外,具有大量字符的语言,如中文和日文,使用专用程序允许用户从数万个字形中选择一个。 IME(输入法编辑器)。

“死键”也是一个明显的问题,一些键盘上的特殊键用于输入带变音符号的字母。在英语中不常见,在世界其他地方很常见。就像德语键盘上的 AltGr 键。这样的布局非常有状态,一个键会根据该状态产生不同的键入字符。也就是说,之前按下了什么死键。此状态也是特定于进程的,不能被另一个进程检索。

我可能没有吓到你,很难对付说英语的程序员。注意风,听起来您只想为自己的进程执行此操作,您可以调用 ToUnicodeEx() winapi 函数。它需要键盘状态,您可以通过调用 GetKeyboardState() 获得它。它需要事件的键盘布局,您可以从 GetKeyboardLayout() 获得它。哪个需要线程 ID,您可以从 GetCurrentThreadId() 获得它。返回值 1 或更大表示可能触发 KeyPress 事件。访问 pinvoke.net 尝试正确获取 pinvoke 声明。

关于VB.NET:在 ProcessCmdKey 中确定键是否打印的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218249/

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