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

时间:2010-05-11 19:50:47

标签: c++ keyboard systems-programming interrupt

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

    • 通过调用geninterrupt()并使用变量_AH,_AL,我很容易使用Turbo C完成此操作,我必须使用以下内容读取字符:

      _AH = 0x07; //没有回声地读一个角色 geninterrupt(0×21); // Dos中断

    • 然后将其转换为Upercase字母,我必须使用以下方法掩盖第5位:

      _AL = _AL& 0xDF; //使用11011111

    • 屏蔽输入的字符
    • 然后我将使用任何输出例程显示该字符。

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

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

提前谢谢!

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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