Как скрыть заголовок окна 1С и настроить полноэкранный режим киоска

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При создании терминалов самообслуживания, информационных киосков и табло мониторинга на базе «1С:Предприятия» разработчики часто сталкиваются с необходимостью полностью скрыть элементы управления операционной системы. Главная задача здесь — убрать верхнюю строку (заголовок окна) с кнопками «Свернуть», «Развернуть» и «Закрыть». Это требуется как для экономии полезной площади экрана, так и для безопасности, чтобы пользователи не могли получить доступ к рабочему столу Windows.

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

Мы проанализируем как штатные возможности самой платформы «1С:Предприятие» (которые работают даже на Базовых конфигурациях), так и альтернативные варианты с использованием WinAPI и веб-технологий.

Почему Windows не дает установить размер окна больше разрешения экрана?

Выясним причину, по которой операционная система блокирует попытки программного растягивания окна за границы монитора. На уровне ядра Windows за ограничение максимальных размеров окон отвечает системный механизм обработки сообщений WinAPI.

Когда внешнее приложение или сам движок 1С пытается изменить размеры окна (через функции MoveWindow или SetWindowPos), операционная система отправляет этому окну сообщение WM_GETMINMAXINFO. В параметрах этого сообщения передается указатель на структуру MINMAXINFO, которая определяет:

  1. Минимальный размер окна при перетаскивании.
  2. Максимальный размер окна при разворачивании.
  3. Максимальные границы отслеживания размеров (параметр ptMaxTrackSize).

По умолчанию Windows автоматически заполняет эти параметры, ограничивая максимальный размер окна габаритами текущего разрешения монитора (с учетом панели задач). Если попытаться принудительно задать размер больше экрана, операционная система перехватит этот запрос и принудительно сожмет окно до лимитов ptMaxTrackSize. Чтобы обойти это ограничение через внешнюю утилиту (например, написанную на Delphi, C++ или AutoHotkey), потребуется выполнять глубокое субклассирование окна 1С, перехватывать сообщение WM_GETMINMAXINFO и вручную перезаписывать структуру данных, что является технически сложным и нестабильным решением.

Вместо того чтобы «выталкивать» окно за границы экрана, гораздо правильнее использовать более надежные и штатные методы.

Решение 1. Запуск встроенного режима киоска (штатный метод платформы)

Рассмотрим самый простой и надежный способ, который не требует программирования и использования внешних утилит. Начиная с версии платформы 8.3.10, в 1С встроен специализированный Режим киоска. В этом режиме приложение автоматически открывается на весь экран, при этом полностью скрываются:

Существует заблуждение, что режим киоска недоступен в Базовых версиях конфигураций из-за невозможности изменять код конфигурации. Это не так. Режим киоска — это свойство самой платформы, и его можно принудительно активировать при запуске системы с помощью ключей командной строки.

Разберем по шагам, как настроить такой запуск:

  1. Создайте ярлык для запуска тонкого или толстого клиента 1С (файл 1cv8c.exe или 1cv8.exe).
  2. Откройте свойства ярлыка и перейдите в поле Объект.
  3. Добавьте в конец строки запуска параметры подключения к информационной базе и ключ -Kiosk (или флаг /Kiosk).

Пример строки запуска для файловой базы данных:


"C:\Program Files\1cv8\common\1cv8c.exe" ENTERPRISE /F "C:\1C_Bases\KioskBase" /N "KioskUser" /P "Password" -Kiosk

Если вам требуется сохранить видимость некоторых панелей, но убрать заголовок операционной системы, вы можете использовать альтернативный ключ запуска — -FullscreenWorkplace (полноэкранное рабочее место). Этот режим скрывает только заголовок окна ОС, оставляя стандартный интерфейс программы внутри рабочего пространства.

Решение 2. Программное включение режима киоска (для версий ПРОФ и выше)

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

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

Разберем пример реализации. Код необходимо разместить в модуле управляемого приложения в предопределенной процедуре ПередНачаломРаботыСистемы():


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    #Если Клиент Тогда
        // Проверяем, что запуск происходит на специализированном терминале
        ИмяКомпьютераТерминала = ИмяКомпьютера();
        Если ВРег(ИмяКомпьютераТерминала) = "KIOSK_TERMINAL_01" Тогда
            
            // Активируем встроенный режим киоска
            КлиентскоеПриложение.УстановитьРежимОсновногоОкна(РежимОсновногоОкнаКлиентскогоПриложения.Киоск);
            
        КонецЕсли;
    #КонецЕсли;
    
КонецПроцедуры

В данном примере мы также добавили проверку имени компьютера, чтобы режим киоска активировался только на целевом физическом терминале, не мешая разработчикам и администраторам работать в обычном оконном режиме на своих рабочих станциях.

Решение 3. Использование WinAPI для удаления стиля заголовка (WS_CAPTION)

Если штатные режимы киоска по какой-то причине не подходят, а конфигурация строго базовая и вы не хотите использовать параметры командной строки, можно прибегнуть к возможностям WinAPI через внешнее приложение-спутник (например, написанное на Delphi или AutoHotkey).

Вместо некорректного изменения координат окна за пределы экрана, мы применим правильный системный подход: полностью удалим у окна стиль заголовка WS_CAPTION. Без этого стиля операционная система перестает отрисовывать рамку и верхнюю панель, превращая окно в абсолютно чистый прямоугольник (Borderless Window), который затем можно легко развернуть на весь экран.

Посмотрим на пример реализации данного алгоритма на языке Delphi. Внешняя утилита находит окно 1С по его системному классу и динамически модифицирует его стили:


procedure Strip1CHeader;
var
  hWnd1C: HWND;
  CurrentStyle: LongInt;
const
  // Системные константы стилей Windows
  WS_CAPTION = $00C00000;      // Включает в себя WS_BORDER и WS_DLGFRAME
  WS_THICKFRAME = $00040000;   // Рамка изменения размеров окна
  GWL_STYLE = -16;
  SWP_FRAMECHANGED = $0020;    // Флаг принудительной перерисовки рамки
  SWP_NOMOVE = $0002;
  SWP_NOSIZE = $0001;
  SWP_NOZORDER = $0004;
begin
  // Ищем главное окно 1С:Предприятия по имени его оконного класса
  hWnd1C := FindWindow('V8TopLevelFrame', nil);
  
  if hWnd1C <> 0 then
  begin
    // Получаем текущие стили окна
    CurrentStyle := GetWindowLong(hWnd1C, GWL_STYLE);
    
    // Исключаем стили заголовка и рамки изменения размеров с помощью побитового "И НЕ"
    CurrentStyle := CurrentStyle and not (WS_CAPTION or WS_THICKFRAME);
    
    // Записываем новые стили обратно в дескриптор окна
    SetWindowLong(hWnd1C, GWL_STYLE, CurrentStyle);
    
    // КРИТИЧЕСКИ ВАЖНО: Вызываем SetWindowPos с флагом SWP_FRAMECHANGED.
    // Без этого флага Windows не узнает об изменении стилей нерабочей области,
    // и заголовок визуально останется на месте до следующего ресайза.
    SetWindowPos(hWnd1C, 0, 0, 0, 0, 0, 
      SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_FRAMECHANGED);
      
    // Теперь окно можно безопасно максимизировать на весь экран
    ShowWindow(hWnd1C, SW_SHOWMAXIMIZED);
  end;
end;

Для быстрой реализации этой же логики без компиляции полноценного EXE-файла можно воспользоваться простым скриптом для популярного менеджера горячих клавиш AutoHotkey (AHK). Скрипт будет автоматически находить запущенное окно 1С и убирать у него заголовок:


; Ожидаем появления окна 1С:Предприятие
WinWait, ahk_class V8TopLevelFrame
hWnd := WinExist("ahk_class V8TopLevelFrame")

if (hWnd) {
    ; Удаляем стиль заголовка (0xC00000) и рамки изменения размера (0x40000)
    WinSet, Style, -0xC00000, ahk_id %hWnd%
    WinSet, Style, -0x40000, ahk_id %hWnd%
    
    ; Максимизируем окно на весь рабочий стол
    WinMaximize, ahk_id %hWnd%
}

Решение 4. Настройка стилей в веб-клиенте (для тонких систем)

Рассмотрим ситуацию, когда информационный киоск работает через обычный веб-браузер (веб-клиент 1С). Это наиболее современный и простой в администрировании подход. В данном сценарии нам вообще не требуются WinAPI и низкоуровневые манипуляции с операционной системой.

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

Разберем по шагам, как это реализовать:

  1. Установите расширение Tampermonkey в используемый браузер (например, Google Chrome или Яндекс.Браузер).
  2. Создайте новый пользовательский скрипт для URL-адреса вашей веб-публикации 1С.
  3. Напишите JavaScript-код, который внедряет CSS-правило, скрывающее контейнер заголовка.

Пример скрипта Tampermonkey:


// ==UserScript==
// @name         Hide 1C Web Header
// @namespace    http://tampermonkey.net/
// @version      1.0
// @match        http://your-server/your-1c-base/*
// @grant        GM_addStyle
// ==/UserScript==

(function() {
    'use strict';
    // Находим класс заголовка через инструменты разработчика (F12) и скрываем его.
    // Обратите внимание: имя класса может незначительно отличаться в разных версиях платформы.
    GM_addStyle('.g-header, .p-header, #title-bar { display: none !important; }');
})();

После установки этого скрипта при открытии базы 1С в браузере верхняя панель будет автоматически вырезаться из DOM-дерева страницы. Вам останется лишь перевести сам браузер в полноэкранный режим нажатием клавиши F11 (или настроить автозапуск браузера с флагом --kiosk в свойствах ярлыка).

Важное предупреждение о лицензировании

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

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

← На главную