适用于传统16位应用程序的Kiosk模式

本文关键字:Kiosk 模式 应用程序 传统 16位 适用于 | 更新日期: 2023-09-27 17:57:27

我需要以编程方式最小化和最大化全屏16位应用程序。不幸的是,DosBox不是一个选项,因为该应用程序与DosBox不支持的一些外围设备进行通信。

我能够编写代码(大量使用Win32 API),可以设置焦点、发送alt+enter键和最小化/最大化。

一切都会奏效,然而,一些用户已经发现Alt+Enter可以退出全屏,并开始滥用这一点。

我可以使用PIF中的设置禁用Alt+Enter,但这打破了我以编程方式发送这些键的方法。

有没有比发送Alt+Enter更好的选择来让NTVDM以编程方式切换全屏?

我使用了Spy++,发现为了实现全屏,NTVDM将系统分辨率更改为640 x 480。

我试图调用ChangeDisplaySettings API来根据需要切换分辨率,但当我设置640 x 480时,NTVDM仍然作为窗口应用程序运行。

我正在考虑设置一个低级键盘挂钩(http://msdn.microsoft.com/en-us/library/ms644985(v=vs.85).aspx)进行筛选。我可以在我的应用程序发送它的短暂时间内禁用挂钩。这听起来像是一个危险的黑客攻击,可能会有很多副作用。我也不确定它是否能工作,因为NTVDM似乎没有使用消息循环来处理键盘输入。SendMessage API不产生结果,并且必须使用keybd_event API发送Alt+Enter。有什么想法吗?

适用于传统16位应用程序的Kiosk模式

换一种方法怎么样?不要试图阻止它。相反,要跟踪窗口(比如10倍秒),如果它不是全屏的,并且你在最后几秒没有发送Alt-Enter,请发送一个。

如果有人点击Alt-Enter,它会进入一个窗口并立即返回到全屏。