Часы в строке состояния 1С: Предприятия

Время, дата и раскладка клавиатуры в строке состояния

Время, дата и раскладка клавиатуры в строке состояния

На работе мы используем бухгалтерскую программу 1С-предприятие через терминал. То есть несколько пользователей подключаются через удаленный рабочий стол (mstsc) к более мощному серверу, на котором расположена база данных и сама программа. Это увеличивает скорость работы, т.к. при стандартной работе с программой 1С по сети возникают задержки (особенно когда большое количество пользователей работает одновременно).

При подключении к терминалу, вместо “Проводника” (explorer) сразу же запускается “1С: Предприятие”. Достигается это за счет следующей правки реестра удаленного компьютера:

Это вроде еще как-то через панель “Администрирование” можно сделать, но я делаю так. Путь к программе, естественно, нужно поменять на ваш.

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

Сначала решим проблему с часами. В сети есть множество программ, которые могут выводить часы в любом месте экрана и можно воспользоваться одной из них. Но мне нужно, чтобы выводилось не только время, но еще и дата, и текущая раскладка клавиатуры (т.к. я планирую установить еще и Punto Switcher для быстрого переключения между языками по нажатию клавиши “Ctrl” и для корректировки раскладки по нажатию “Break”). Так же, чтобы эти часы не сильно бросались в глаза и не отвлекали сотрудников, я решил написать небольшую программку, которая будет выводить необходимые нам данные в строке состояния программы 1С. Так они будут выглядеть естественнее, как часть программы, как будто так и должно быть :).

Писать будем на Дельфи. Основная функция, которая выводит текст в строку состояния:

На работе мы используем 1С версии 7.7 и мне попалась эта версия с 3-мя и 5-тью панелями в строке состояния (как оказалось панели добавляются дополнительными плагинами для вывода служебной информации, в моем случае это библиотеки Trade.dll и Salary.dll), поэтому я добавил в функцию возможность указывать номер панели (PanelNumber) справа налево, используя отрицательные числа. Например, если в строке состояния 3 панели, то при  PanelNumber := -1 будет использоваться 3-я панель, при  PanelNumber := -2 — вторая, если же в строке состояния 5 панелей, то будет использоваться 5-я и 4-я соответственно.

Еще в строке состояния будет отображаться текущая раскладка. Для ее определения я использую универсальную функцию:

Ну вот теперь все необходимые функции есть, остается найти окно и передать в него текст. Я поставил выполнение этих функций в таймер, который выполняется каждую секунду.

В данном коде я получаю текущее активное окно функцией GetForegroundWindow, т.к. в терминале всегда активно только 1С предприятие. Если будет активно другое окно, у которого строка состояния класса «msctls_statusbar32» — время будет выводиться в ней (например, в Windows XP – в Проводнике, в Windows 7 – в Диспетчере задач). Если вам нужно получить определенное окно, то вместо  GetForegroundWindow нужно использовать функцию FindWindow. С ее помощью можно найти окно по классу (первый параметр) либо по заголовку (второй параметр), например:

Чтобы вывести раскладку отдельно от времени на соседней панели (а ни как на скриншоте) можно сделать так:

Выглядеть это будет примерно так:

Раскладка клавиатуры отдельно

Раскладка клавиатуры отдельно от времени

Для того, чтобы форма была невидимой при запуске, в код проекта (Project -> View Source Code) добавляем строку:

Теперь решим проблему с автозапуском. Это можно сделать, воспользовавшись bat-файлом, который будет последовательно запускать необходимые нам программы, а сам bat-файл установить как основную программу запуска, вместо 1С. Но тогда останется висеть окно командной строки (или будет быстро появляться/исчезать, забирая на себя фокус), поэтому я воспользовался vbs-скриптом. В приведенном в самом начале файле реестра нужно поменять путь программы на наш скрипт (или в самом реестре через программу regedit). Должно получиться так:

Скрипт выглядит так:

Как видно из скрипта он последовательно запускает Punto Switcher, нашу программу и в конце 1С. Дополнительные параметры в запуске 1С, указывают, что скрипт будет следить за завершением программы и только после ее завершения он выполнит последнюю команду “logoff” (Выход из системы). Сделано это для того, чтобы после закрытия 1С-Предприятия терминал закрывался, если этого не сделать, пользователи будут лицезреть фоновую картинку Рабочего стола. Это происходит из-за того, что наши программы висят в фоне и терминал сам не закроется до их завершения.

Скрипт, файл реестра и исходники программы вместе с бинарником прикрепляю в конце статьи.

Скачать 1CTime.rar (Размер: 214.3 KiB / Скачиваний: 216)

2 комментария: Часы в строке состояния 1С: Предприятия

  • Acid говорит:

    Дак зачем в реестре ставить программу которую надо запускать.  Ее достаточно прописать во вкладке среда. На сервере терминалов у того пользователя которым подключаемся.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Не пропусти новые записи. Подпишись в соц. сетях:

E-mail рассылка блога:

Календарь

Август 2018
Пн Вт Ср Чт Пт Сб Вс
« Авг    
 12345
6789101112
13141516171819
20212223242526
2728293031