【问题标题】:How do I emulate a keystroke in DOS programatically (in C/C++)? [closed]如何以编程方式(在 C/C++ 中)在 DOS 中模拟击键? [关闭]
【发布时间】:2011-05-07 00:07:15
【问题描述】:

首先,我说的是 DOS,而不是 Windows 的命令行应用程序。

我希望编写一个向当前正在运行的进程发送击键的程序。 我的目标是在 ISR(中断处理程序)中使用此过程。

换句话说,这就是我想要发生的事情:

  • DOS 启动。
  • 我运行一个 TSR,它将我的过程注册为某个中断的 ISR(不是键盘中断,但现在让我们假设它是)。
  • 我运行另一个程序,它成为当前正在运行的进程。
  • 发生上述中断。
  • 我的程序跳入并模拟击键,事实上,这从未真正发生过。
  • 当前正在运行的进程收到此击键,就好像实际按下了模拟键一样。

我找到了几个来源不同的例子,但我真的找不到任何适合我的东西。

我不知道它是否有任何相关性,但我目前用来测试所有这些的包括在 VirtualBox 机器上运行的 FreeDOS,以及用于编译和运行代码的 DJGPP(它使用 GNU 编译器,我相信)。

我们将不胜感激。

【问题讨论】:

  • 我很长时间没有使用 DOS,但您可能会在 Ralf Browns 中断列表 (ctyme.com/rbrown.htm) 中找到答案的核心。 Ray Duncans “高级 MS-DOS 编程”也是一个显而易见的建议,但如果你有一份副本,你可能已经检查过了。
  • 寻找密切的原因“问得太晚了二十年”...
  • 仔细想想,任何方法都不可靠可能是有原因的。某些 DOS 软件可能会绕过 O/S 调用,并以顽皮的方式访问键盘接口,因此通过 DOS 和/或 BIOS 中断发送假键可能不起作用。
  • 确实,这个问题没有答案,除非你愿意虚拟化整台机器(考虑到 DOS 的任何东西都只期望 ~33 MHz,无论如何,这可能是可行的......)跨度>
  • 这个问题的解决方案到底有什么应用?

标签: c++ c dos keystroke emulation


【解决方案1】:

IIRC 你必须使用 BIOS 调用 INT 16h, FUNC 05H ...?或直接写信给 0040:001E(或者是 001C)... 谷歌搜索出现了几个关于该主题的线程...

http://www.rhinocerus.net/forum/lang-asm-x86/254441-re-how-write-char-keyboard-buffer.html

【讨论】:

  • 好的,我试试看。不过可能需要一段时间。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2023-04-01
  • 2015-02-25
  • 1970-01-01
  • 2010-10-08
  • 2012-06-04
相关资源
最近更新 更多