C# 传统16位应用程序的信息亭模式

C# 传统16位应用程序的信息亭模式,c#,winapi,keyboard,hook,dos,C#,Winapi,Keyboard,Hook,Dos,我需要以编程方式最小化和最大化全屏16位应用程序。不幸的是,DosBox不是一个选项,因为此应用程序与DosBox不支持的某些外围设备通信 我能够编写可以设置焦点、发送alt+enter键和最小化/最大化的代码(使用Win32 API) 一切都会好的,然而,一些用户已经发现Alt+Enter可以退出全屏,并且已经开始滥用它 我可以使用PIF中的设置禁用Alt+Enter,但这打破了我以编程方式发送这些键的方法 有没有比发送Alt+Enter更好的方法让NTVDM以编程方式切换全屏 我使用Spy+

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

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

一切都会好的,然而,一些用户已经发现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)以过滤Alt+Enter。我可以在我的应用程序发送钩子的短暂时间内禁用钩子。这听起来像是一个危险的黑客,可能有很多副作用。我也不确定它是否能工作,因为NTVDM似乎没有使用消息循环来处理键盘输入。SendMessageAPI不产生结果,必须使用keybd_事件API发送Alt+Enter。有什么想法吗?

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

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