Режим киоска для устаревшего 16-битного приложения - PullRequest
3 голосов
/ 23 мая 2011

Мне нужно программно свернуть и развернуть полноэкранное 16-битное приложение.К сожалению, DosBox не подходит, так как это приложение взаимодействует с некоторыми периферийными устройствами, не поддерживаемыми DosBox.

Мне удалось написать код (тяжелый для Win32 API), который может установить фокус, отправить клавиши alt + enter исвернуть / развернуть.

Все будет работать, однако некоторые пользователи выяснили, что Alt + Enter может выйти из полноэкранного режима, и начали злоупотреблять этим.

Я могу отключить Alt + Enter, используя настройкив PIF, но это нарушает мой подход к программной отправке этих ключей.

Есть ли лучшая альтернатива для получения NTVDM для программного переключения полноэкранного режима, чем отправка Alt + Enter?

Я использовал Spy ++ и обнаружил, что для достижения полноэкранного режима NTVDM изменял системное разрешение на 640 x 480.

Я пытался вызывать API ChangeDisplaySettings для переключения разрешений по мере необходимости, но когда я установил640 x 480 NTVDM по-прежнему работает как оконное приложение.

Я рассматриваю вопрос настройки низкоуровневой клавиатуры (http://msdn.microsoft.com/en-us/library/ms644985(v=vs.85).aspx) для фильтрации Alt + Enter. Я мог бы отключить эту ловушку на короткий промежуток времени, который требуется моейприложение, чтобы отправить его. Это звучит как опасный хак, который может иметь много побочных эффектов. Я также не уверен, что это будет работать, так как NTVDM, похоже, не использует цикл обработки сообщений для обработки ввода с клавиатуры. API SendMessage не делаетрезультатов не получилось, и Alt + Enter пришлось отправить с помощью API keybd_event. Есть мысли?

1 Ответ

2 голосов
/ 23 мая 2011

Как насчет другого подхода - прекрати пытаться его заблокировать.Вместо этого следите за окном (скажем, 10 раз в секунду), если оно не полноэкранное, и вы не отправляли Alt-Enter в последние пару секунд, отправьте его.

Если кто-то нажимает Alt-Enterоно переходит в окно и сразу возвращается на весь экран.

...