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

时间:2011-05-23 04:20:15

标签: c# winapi keyboard hook dos

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

我能够编写可以设置焦点的代码(在Win32 API上很重),发送alt + enter键并最小化/最大化。

但是,有些用户已经发现Alt + Enter可以退出全屏并开始滥用此功能。

我可以使用PIF中的设置禁用Alt + Enter,但这会破坏我以编程方式发送这些密钥的方法。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

如何采用不同的方法 - 不要试图阻止它。相反,跟踪窗口(比如10x秒),如果它不是全屏而你没有在过去几秒内发送Alt-Enter,请发送一个。

如果有人按Alt-Enter键进入窗口并立即返回全屏。