Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 组件8086同时按下两个扫描代码_Assembly_Keyboard_X86_X86 16_Dosbox - Fatal编程技术网

Assembly 组件8086同时按下两个扫描代码

Assembly 组件8086同时按下两个扫描代码,assembly,keyboard,x86,x86-16,dosbox,Assembly,Keyboard,X86,X86 16,Dosbox,我正在尝试编写一个代码,将屏幕更改为全屏模式。问题是我在dosbox(windows)中运行编程,所以我必须使dosbox成为全屏幕。我做了一项研究,发现按下ALT+ENTERdosbox可以全屏显示。问题是,我不希望用户切换到全屏,我希望程序本身能够做到这一点 经过另一次研究,我发现int16h,05h。我已将Cl设置为ENTER按钮(0Dh)的ASCII值。然后我在CH中设置ALT(38h)的扫描代码。然后我测试了它,但它并没有变成全屏。我做了一项检查,通过将CL更改为另一个字符,确保ALT

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

经过另一次研究,我发现
int16h,05h
。我已将
Cl
设置为
ENTER
按钮(
0Dh
)的ASCII值。然后我在
CH
中设置
ALT
38h
)的扫描代码。然后我测试了它,但它并没有变成全屏。我做了一项检查,通过将
CL
更改为另一个字符,确保
ALT
的扫描代码工作正常,因此这不是问题所在。然后我尝试将
CH
更改为
ALT+ENTER
0Ah
),但仍然无法工作

我认为问题在于,
int16h,05
发送一个扫描码和一个ASCII字符,我尝试将ASCII字符作为其按钮

是否有办法同时按下2个扫描代码?(或按住
ALT
键,然后使用
int16h、05h
ENTER
键?)

谢谢大家!

然后我在CH中设置ALT(38h)的扫描代码。。。我做了一个检查,通过将CL更改为另一个字符来确保ALT的扫描代码正常工作,它正常工作,所以这不是问题所在

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


获取DOSBOX窗口全屏是一项Windows操作。只能通过Windows编程代码执行此操作。您不能在DOSBOX仿真器中运行的DOS程序中执行此操作


关于模拟ALT-ENTER的想法。
在Windows3.1的好日子里,您有一个PIF配置文件,允许您指定某些组合键是由Windows处理还是由Windows中运行的DOS程序处理。选择正确后,DOS程序可以接收ALT-ENTER键


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

我怀疑GUI仅在从主机操作系统发送时捕获
ALT+ENTER
,而不是模拟操作系统。@JoachimIsaksson所以我想也许可以使用int 9h来欺骗它,但我不知道怎么做,或者,如果可能的话,我不认为在DOSBox中运行的程序会告诉它切换到全屏。在DOSBox中模拟击键是行不通的。正如Joachim所说,ALT-ENTER键必须来自DOSBox运行的操作系统。