我正在尝试在 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_event或SendInput 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/