c++ - 如何从 C++ 程序修改键盘中断(在 Windows XP 下)?

标签 c++ keyboard systems-programming interrupt

  • 我们得到了一个小项目(作为我的操作系统类(class)的一部分)来制作一个修改键盘输入的 Windows 程序,以便它将输入的任何小写字符转换为大写字符(不使用大写锁定) !因此,当您在键盘上键入时,您会看到您正在键入的内容已转换为大写字母!

    • 我通过调用 geninterrupt() 并使用变量 _AH、_AL 使用 Turbo C 很容易地完成了这项工作,我必须使用以下方法读取一个字符:

      _AH = 0x07;//读取一个没有回显的字符 中断(0x21);//Dos 中断

    • 然后要将其转换为大写字母,我必须使用以下方法屏蔽第 5 位:

      _AL = _AL & 0xDF;//用 11011111 屏蔽输入的字符

    • 然后我将使用任何输出例程显示字符。

现在,这个解决方案只能在旧的 C DOS 编译器下工作。但我们打算做的是通过在 Windows XP 下使用任何现代 C/C++ 编译器来对此做出接近或类似的解决方案!我首先想到的是修改键盘 ISR,使其屏蔽任何输入字符的第五位以将其变为大写!但我不知道该怎么做。其次,我想创建一个 Win32 控制台程序来执行相同的解决方案(但到 no avail)或制作一个与 Windows 兼容的解决方案,但我仍然不知道要使用哪些功能! 第三,我想制作一个直接修改 ISR 以满足我需要的 Windows 程序!我还在寻找如何做到这一点!

所以,如果你能帮我解决这个问题,我将不胜感激!

提前致谢!

(我在带有 mingw-GCC 编译器的 intel X86 上使用 Windows XP。)

最佳答案

除非您编写 Ring 0 设备驱动程序,否则您无法访问键盘 ISR。您最好调查一下 Windows Hook API。它们完成同样的事情。

从这里开始:http://msdn.microsoft.com/en-us/library/ms644990%28v=VS.85%29.aspx

关于c++ - 如何从 C++ 程序修改键盘中断(在 Windows XP 下)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813970/

相关文章:

c++ - C++ 中 placement new 执行的完整操作列表是什么?

c++ - 在 OpenGL 上延迟渲染 Qt

Flutter - 如何在横向模式下打开全屏键盘

java - 按下按键时我的 JFrame 没有改变

C++:获取 native dll依赖项而无需在进程中加载​​它

rust - 如何确保在每次迭代后释放每个 `Child` 进程的文件句柄?

c++ - 了解 CUDA 中的矩阵乘法

c++ - 有没有办法压缩 vector (C++)?

python - 在 Linux 中使用 Python 访问键盘 LED 的替代方法

c - C 库的实现是否依赖于操作系统?