2010-05-11 134 views
1
  • 我们已经给了一个小项目(作为我的操作系统课程的一部分)来制作修改键盘输入的Windows程序,以便将任何小写字母转换成大写字母(不使用大写锁定)!所以当你在键盘上输入时,你会看到你正在输入的内容被转换成大写字母!如何从C++程序修改键盘中断(在Windows XP下)?

    • 我已经通过调用geninterrupt()和使用变量_ah,_AL这样做很容易使用的Turbo C,我不得不使用读取一个字符:

      _ah = 0×07; //读一个没有回声的字符 geninterrupt(0x21); // DOS中断

    • 然后将它转变成一个大写在前字母i必须通过使用以掩盖第五位:

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

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

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

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

预先感谢您!

(我使用Windows XP的英特尔X86使用MinGW-GCC编译器。)

+0

为什么人们仍然在使用Turbo C?它比Borland C++早,而且是一个旧的编译器! – 2010-05-11 20:15:30

+0

仅限于教育原因,先生:) – Rockr90 2010-05-11 20:22:33

+0

哎呀,我还是很惊讶,你知道任何有关DOS编程。 – jmucchiello 2010-05-12 17:59:04

回答

1

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

+0

您是否向一个甚至没有看到win32 API的初学者建议使用内核编程?这不是斯巴达,这只是疯狂! 在我看来,他应该从SDK开始,用钩子来实现整个事情;至少,他不会尝试太多的伤害。 @ rockr90:我并不是绝对的说你不是一个好的编码人员,而只是说内核开发是为有经验的Windows开发人员开发的。从KD开始只是对自己造成伤害(也可能对个人电脑:))。 – 2010-05-11 21:48:26

+0

我*非常*深刻地记得是OP的年龄,不知道什么是不可能的。这个标签里太多老人了。增长下来。 – 2010-05-11 22:02:19

+0

@Matteo:我明白了你的想法,并且我完全理解你的意思,我希望逐渐向没有必要知识的事物发展。 @Hans:我仍然在第二年,所以我认为我有时间;) 如果有人能够给我提供一些关于Windows Hook Api或者任何可用书籍的很好的教程,那就太棒了。 谢谢。 – Rockr90 2010-05-11 23:19:09