c - 如何在C程序中启用或禁用关键字字符

标签 c input keyword

我正在尝试在 C 程序中控制键盘。我使用 Windows 作为操作系统,程序将在控制台应用程序中编写。

我的问题是,是否有一种方法,例如仅当程序要求非数字值时才在 C 程序中启用数字锁定?

另一方面,如果程序仅要求数字值,则只需启用数字键盘即可。

我想知道这是否可行以及我应该遵循哪些步骤。

最佳答案

My question is, is there such thing like for example a way to enable the num lock in a c program only when the program ask for a non-numeric value?

是的,这可以通过 SetKeyboardState 实现。 , keybd_eventSendInput Windows 上的功能。后者优于 keybd_event。这是模拟键盘输入的简单方法。

On the other hand, if the program ask for only numeric-value, then just enable only the num-pad.

这变得更加复杂。在用户模式下这是可能的,但它很hacky。正确的方法是使用WDK创建键盘过滤器驱动程序。 。但除非您对驱动程序 API 和内核模型有深入的了解,否则我也不会推荐该路线。在用户模式下执行此操作的方法是使用 SetWindowsHookEx 创建本地键盘过滤器。以 WH_KEYBOARD 作为 id 的函数。在 LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) 回调中,您将检查按下的键的扫描码,如果它不是数字或您喜欢的任何条件,您将只返回 CallNextHook 跳转到钩子(Hook)链中的下一个过程,基本上忽略您提供的输入。

关于c - 如何在C程序中启用或禁用关键字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58747836/

相关文章:

C: printf ("%s\n", str) 产生乱码?

c - Openmp 基本并行化

html - 将空值插入文本输入

html - 是否可以为类分配和输入 ID?

html - 样式化文本输入插入符

c - 1-20范围内的最大随机数

C 计算输入字符串的行数

java - 如何聚类搜索引擎关键词?

java - 这是使用 java 关键字 "interface"的正确位置吗?

laravel - Laravel 5.4 上的搜索引擎优化