Как сделать окно 1С всегда активным и заблокировать клавиши Win, Sleep и Menu в режиме киоска на Windows XP?

Системный администратор IT и автоматизация бизнеса
← На главную

При организации работы терминалов самообслуживания, информационных киосков или рабочих мест кассиров на базе операционной системы Windows XP часто используется так называемый режим «Киоск». В этом режиме приложение 1С разворачивается на весь экран, скрывая элементы управления операционной системы. Однако возникает серьезная уязвимость: случайное или намеренное нажатие пользователем системных клавиш, таких как Win, Sleep или Menu, приводит к потере фокуса активного окна 1С. В результате перед пользователем может открыться панель задач, меню «Пуск» или рабочий стол, что нарушает безопасность и стабильность работы всей системы.

В данной статье мы подробно разберем, как решить эту проблему несколькими надежными способами. Мы рассмотрим как системные настройки реестра Windows XP, так и специализированные программные методы на стороне самой платформы 1С.

Способ 1. Блокировка системных клавиш через карту скан-кодов (Scancode Map)

Самый надежный способ предотвратить выход пользователя из полноэкранного режима 1С — это физическое отключение «опасных» клавиш на уровне операционной системы. Windows XP позволяет переопределить или полностью отключить любую клавишу клавиатуры с помощью специальной таблицы в системном реестре.

Посмотрим, как настроить параметр Scancode Map, чтобы заблокировать клавиши левой и правой Win, системную кнопку вызова контекстного меню Menu, а также кнопки перехода в спящий режим Sleep и выключения Power (актуально для мультимедийных клавиатур).

Выполним следующие шаги для настройки реестра:

  1. Откроем редактор реестра. Для этого нажмите комбинацию клавиш Win + R, введите команду regedit и нажмите Enter.
  2. Перейдем в следующий раздел реестра:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
  3. Обратите внимание, что нам нужен раздел Keyboard Layout (в единственном числе), не перепутайте его с соседним разделом Keyboard Layouts.
  4. Создадим в правом окне редактора реестра новый Двоичный параметр (Binary Value) и назовем его Scancode Map.
  5. Дважды щелкнем по созданному параметру и аккуратно введем следующую последовательность шестнадцатеричных байтов:
    00 00 00 00 00 00 00 00 06 00 00 00 00 00 5B E0 00 00 5C E0 00 00 5D E0 00 00 5F E0 00 00 F6 E0 00 00 00 00

Проанализируем структуру вводимых данных, чтобы понять, как работает эта карта:

После внесения изменений обязательно закройте редактор реестра и перезагрузите компьютер. После перезагрузки указанные клавиши полностью перестанут реагировать на нажатия, и пользователь не сможет случайно свернуть окно 1С.

Способ 2. Запуск 1С:Предприятия в качестве системной оболочки (Shell)

Если на целевом компьютере должна работать исключительно программа 1С, наиболее красивым и безопасным решением будет запуск 1С вместо стандартного графического интерфейса Windows (оболочки explorer.exe).

При таком подходе в операционной системе вообще не будет загружаться рабочий стол, панель задач и меню «Пуск». Нажатие клавиши Win физически не сможет вызвать меню, так как служба, отвечающая за него, просто не запущена. При закрытии 1С пользователь будет автоматически выходить из системы.

Чтобы сохранить возможность администрирования компьютера, мы настроим замену оболочки не глобально для всей операционной системы, а только для конкретного ограниченного пользователя (например, учетной записи Kiosk).

Рассмотрим пошагово этот процесс:

  1. Создадим в Windows XP стандартную учетную запись пользователя с ограниченными правами (например, с именем Kassa).
  2. Выполним вход в систему под этой учетной записью, чтобы Windows сформировала профиль пользователя.
  3. Запустим редактор реестра regedit.
  4. Перейдем в ветку реестра текущего пользователя:
    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
  5. Найдем в этом разделе строковый параметр (REG_SZ) с именем Shell. Если такого параметра нет, создадим его.
  6. В качестве значения параметра укажем полный путь к исполняемому файлу платформы 1С с необходимыми ключами автозапуска конкретной информационной базы. Например:
    "C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /F"C:\Bases\Trade" /N"Kassir" /P"123"

Теперь при входе под учетной записью Kassa на экране сразу же появится окно 1С. Никаких других элементов управления Windows доступно не будет. Если администратору потребуется настроить компьютер, он сможет войти под своей учетной записью администратора и получить стандартный рабочий стол Windows с запущенным процессом explorer.exe.

Способ 3. Блокировка кражи фокуса сторонними программами (ForegroundLockTimeout)

Фокус активного окна 1С может теряться не только из-за нажатия клавиш пользователем, но и по вине фоновых процессов: обновлений антивирусов, всплывающих сообщений сетевых утилит или системных уведомлений. Мы можем запретить операционной системе передавать фокус ввода любым неактивным приложениям.

Выясним, как активировать эту блокировку в реестре:

  1. Перейдем в раздел:
    HKEY_CURRENT_USER\Control Panel\Desktop
  2. Найдем параметр типа DWORD с именем ForegroundLockTimeout.
  3. Установим его значение в шестнадцатеричной системе счисления (Hex) равным 00030d40 (в десятичном представлении это соответствует 200000 миллисекундам, то есть чуть более 3 минут).

Данный параметр указывает операционной системе игнорировать любые попытки сторонних приложений выдвинуть свои окна на передний план, пока пользователь работает с активным окном 1С. Вместо этого иконка стороннего приложения будет просто мигать на панели задач (если панель отображается), не прерывая работу оператора.

Способ 4. Программный возврат фокуса средствами встроенного языка 1С

Если по каким-то причинам вы не можете изменять системный реестр или отключать проводник Windows, задачу удержания фокуса можно решить непосредственно внутри конфигурации 1С. Для этого мы применим связку штатного механизма обработчика ожидания и стандартного системного COM-объекта WScript.Shell.

Суть метода заключается в том, что программа будет периодически (например, каждые 2 секунды) проверять активность своего окна и принудительно возвращать его на передний план в случае потери фокуса.

Реализуем данный алгоритм. Откроем модуль управляемого приложения (или глобальный модуль обычной конфигурации) и добавим в него следующий код:


Процедура ПриНачалеРаботыСистемы()
    // Запускаем периодический контроль активности окна 1С каждые 2 секунды
    ПодключитьОбработчикОжидания("УдерживатьФокусОкна1С", 2);
КонецПроцедуры

Процедура УдерживатьФокусОкна1С() Экспорт
    Попытка
        // Создаем системный объект для работы с окружением Windows
        Шелл = Новый COMОбъект("WScript.Shell");
        
        // Метод AppActivate ищет окно по его заголовку и передает ему фокус.
        // Заголовок должен точно соответствовать названию окна вашего приложения 1С.
        Шелл.AppActivate("1С:Предприятие"); 
    Исключение
        // Исключаем аварийное завершение работы, если запуск COM-объекта заблокирован политиками ОС
    КонецПопытки;
КонецПроцедуры

Данный код будет незаметно для пользователя перехватывать активность. Даже если оператор случайно нажмет клавишу, которая свернет программу или переключит фокус на другое окно, встроенный обработчик ожидания мгновенно (в пределах двух секунд) развернет 1С обратно на весь экран.

Важное примечание: Строка "1С:Предприятие" в методе AppActivate должна в точности соответствовать тексту, отображаемому в заголовке главного окна запущенной программы 1С. Если у вас в заголовке выводится название базы или имя пользователя, скорректируйте этот параметр или динамически считывайте заголовок системы.

← На главную