我需要以编程方式最小化和最大化全屏 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 时,它仍然作为窗口应用程序运行。

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

最佳答案

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

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

关于c# - 旧版 16 位应用程序的自助服务终端模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6092787/

10-15 04:33