【问题标题】:Kiosk mode for legacy 16bit app旧版 16 位应用程序的 Kiosk 模式
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-18
      • 2018-04-26
      • 2011-12-11
      • 2014-05-21
      • 2015-10-11
      • 2017-10-05
      • 2015-09-11
      • 2015-12-24
      相关资源
      最近更新 更多