我们已经给了一个小项目(作为我的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编译器。)
答案 0 :(得分:2)
除非您编写Ring 0设备驱动程序,否则无法访问键盘ISR。您最好调查Windows Hook API。这些完成了同样的事情。
从这里开始:http://msdn.microsoft.com/en-us/library/ms644990%28v=VS.85%29.aspx
答案 1 :(得分:1)