【发布时间】:2011-08-30 20:53:42
【问题描述】:
我需要以编程方式最小化和最大化全屏 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 似乎没有使用消息循环来处理键盘输入。 SendMessage API 不会产生结果,并且 Alt + Enter 必须使用 keybd_event API 发送。有什么想法吗?
【问题讨论】:
标签: c# winapi keyboard hook dos