Assembly 8086 同时按两个扫码

Assembly 8086 Pressing two scan codes at the same time

我正在尝试编写将屏幕更改为全屏模式的代码。问题是我运行在dosbox(windows)中编程所以我必须让dosbox变成全屏。我做了一项研究,发现按 ALT+ENTER dosbox 会变成全屏。这样做的问题是我不希望用户更改为全屏,我希望程序本身能够做到这一点。

经过另一次研究,我发现 int 16h, 05h。我已将 Cl 设置为 ENTER 按钮 (0Dh) 的 ASCII 值。然后我在CH中设置了ALT38h)的扫描码。然后我测试了它,但它没有变成全屏。我通过将 CL 更改为另一个字符进行了检查以确保 ALT 的扫描代码正常工作并且它有效,所以这不是问题。然后我尝试把CH改成ALT+ENTER0Ah)还是不行。

我认为问题是 int 16h, 05 发送了一个扫描码和一个 ASCII 字符,我尝试引用一个 ASCII 字符作为它的按钮。

有没有办法同时按2个扫码? (或者让 ALT 按住然后使用 int 16h,05h 按下 ENTER 键?)

谢谢!

Then I set in CH the scan code of ALT (38h). ... I did a check to make sure the scan code of ALT is working, by changing CL to another char and it worked, so that's not the problem.

模拟按键的BIOS功能永远不会像你想象的那样处理ALT。 ALT只是一个特殊的键,它修改了其他键的ASCII和SCAN码,它永远不会单独出现在编码的任何部分。将 CH 设置为 38h 将不起作用。


获得 DOSBOX window 全屏是一个 Windows 操作。您只能通过 Windows 编程代码执行此操作。您不能在 DOSBOX 模拟器中的 DOS 程序 运行 中执行此操作。


关于模拟 ALT-ENTER 的想法。
在 Windows 3.1 的美好时光里,你有一个 PIF 配置文件,它允许你指定某些组合键是由 Windows 还是由 [=25] 中的 DOS 程序 运行 处理的=].做出正确的选择后,您的 DOS 程序就可以收到 ALT-ENTER 键。

也许此时您可以尝试执行一个真正的 Windows 程序来最大化 DOS 程序的 window.