1
  • 我们有一个小项目(作为我的操作系统课程的一部分)来制作一个修改键盘输入的 Windows 程序,以便它将输入的任何小写字符转换为大写字符(不使用大写锁定)!所以当你在键盘上输入时,你会看到你输入的内容变成了大写!

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

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

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

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

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

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

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

先感谢您 !

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

4

2 回答 2

2

You can't get access to the Keyboard ISR unless you write a Ring 0 device driver. You are better off investigating the Windows Hook APIs. These accomplish the same thing.

Start here: http://msdn.microsoft.com/en-us/library/ms644990%28v=VS.85%29.aspx

于 2010-05-11T19:58:32.703 回答
1

你打算多久毕业?希望您有时间,Windows 不再以这种方式工作了。您需要使用 WDK 编写键盘过滤器驱动程序。它在 src\input\kbfiltr 目录中附带了一个示例实现。您不能使用您熟悉的工具,WDK 包含一个编译器和一个内核调试器。免费提供,从这里开始。

于 2010-05-11T20:06:20.240 回答