【发布时间】:2019-11-07 11:29:31
【问题描述】:
我正在尝试在 c 程序中控制键盘。我使用Windows作为操作系统,程序将在控制台应用程序中制作。
我的问题是,有没有一种方法可以在 c 程序中仅在程序请求非数字值时启用数字锁定?
另一方面,如果程序只要求输入数字值,那么只需启用数字键盘。
我想知道这是否可行以及我应该遵循哪些步骤。
【问题讨论】:
-
当你在上面说keyword时,你真的是指keyboard吗?
我正在尝试在 c 程序中控制键盘。我使用Windows作为操作系统,程序将在控制台应用程序中制作。
我的问题是,有没有一种方法可以在 c 程序中仅在程序请求非数字值时启用数字锁定?
另一方面,如果程序只要求输入数字值,那么只需启用数字键盘。
我想知道这是否可行以及我应该遵循哪些步骤。
【问题讨论】:
我的问题是,有没有一种方法可以在 c 程序中仅在程序请求非数字值时启用数字锁定?
是的,这可以通过 Windows 上的 SetKeyboardState、keybd_event 或 SendInput 函数实现。后者优于 keybd_event。这是一种模拟键盘输入的简单方法。
另一方面,如果程序只要求输入数字值,那么只需启用数字键盘。
这变得更加复杂。在用户模式下是可能的,但它很hacky。正确的方法是使用WDK 创建一个键盘过滤器驱动程序。但除非您对驱动程序 API 和内核模型有深入的了解,否则我也不推荐该路线。在用户模式下执行此操作的方法是使用SetWindowsHookEx 函数以WH_KEYBOARD 作为id 创建一个本地键盘过滤器。在LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) 回调中,您将检查所按下键的扫描码,如果它不是数字或您喜欢的任何条件,您只需返回CallNextHook,它会跳转到钩子链中的下一个过程,基本上忽略您的输入提供。
【讨论】: