Разработка программы в Multimedia Builder на примере утилиты для удаленной работы с кассовым ПО

515aa34fbc9348f4b3bdba8861d72a0c.JPGКак вы все уже поняли, я просто обычный инженер, но я всегда стремлюсь к тому, чтобы сделать свою работу и коллег намного удобнее.

Думаю каждому ИТ-шнику знакома такая задача, как автоматизация выполнения процессов. Так вот, в процессе своей работы с кассовым ПО мне пришлось столкнуться со множеством повседневных процедур, касающихся удаленного доступа и управлением кассой, а также автоматизацией многих процедур.

Сам я не программист. Несмотря на то, что изучал VB, VBA, JavaScript и PHP, но все это осталось на студенческой скамье.Так вот, мне как инженеру надоело каждый раз делать одно и тоже и тратить на это время. И я задался вопросом, а можно ли при минимальных знаниях программирования создать какое-нибудь средство по автоматизации поддержки кассового ПО для выполнения повседневных задач?

Обратился к поиску…

Итак, что нашлось?

1. MediaChance Multimedia Builder — это программа для создания приложений автозапуска компакт-дисков. К сожалению, выпуск её новых версий прекратился уже в далеком 2007 году, но некоторые энтузиасты продолжают на ней делать различные фишки. Таких программ полно, но что мне понравилось в этой среде, так это то, что у неё есть свой скриптовый язык, который на мой взгляд достаточно прост в освоении и также есть еще куча плагинов.

2. Batch-script — это скриптовый язык командной строки Windows, проще говоря позволяет автоматизировать действия в bat-файл. Также добавлю от себя, не знаю как для других, а мне оказалось тоже не сложно его освоить и совместить с MultimediaBuilder.

3. Ну еще в придачу PuTTy и PLink. — думаю все знают, что это утилиты для удаленного доступа по SSH-протколу к *nix-системам.

Итак, у нас в компании есть серверное ПО и кассовые программы для работы магазина. Но как вы все понимаете в процессе работы возникают ситуации, когда нужно подключиться удаленно к магазину.

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

Задача: нужно очень часто удаленно перезагружать кассу, которая работает под ОС Linux.

Создаем проект в Multimedia Builder и внедряем в него так называемый встроенный объект «Embedded»:

665700a900b2446a85248ca0979cee15.png

А на кнопку просто вешаем событие, которое будет запускать bat-файл, который будет дергать plink.exe с параметрами. Получилась вот такая простейшая программа:

b216765f5859469d9fca827ac3c8a36b.png

Стоит отметить, что когда делаешь Embedded Files в Multimedia Builder, то при открытии проги, все внедренные файлы автоматически распаковываются во временную директорию и именно оттуда будут запускаться.

9aa2807eb00347e09328765923a8debe.png

Нажав на кнопку, просто появляется строка, которая из bat-файла выполняет простейший код.

SET /p ipcash=Enter CashIP: plink.exe tc@%ipcash% -pw »12345» «sudo /sbin/reboot» b67ce75185fa41fe9f25dcc77d405e6f.png

Знаю, что возможно для многих рассказываю вещи достаточно банальные, но для меня, как человека постигавшего азы автоматизации, это все было и остается интересным по сей день.

Что сделал дальше? — А очень просто, выложил на корпоративный ресурс и разослал письмо коллегам, что мол вот есть такая штучка.

И что вы думаете? — Народ начал пользоваться, а соответственно и появились хотелки.

Еще раз отмечу, что создавая такую, штуку, я постигал все просто с нуля о том, как писать batch-скрипты до bash-скриптов и.т.п.

Ну и дальше вышла уже следующая версия. То есть уже появились две кнопочки.

6c5e5ec0eebe4834a641feb640cd428c.png

И потом пошло поехало. Причем стоит отметить, чем дальше я углублялся в процесс изучения автоматизации процессов по работе с удаленным подключением, тем больше у меня у самого появлялись идеи, как что-то сделать, лучше чтобы нашему саппорту было удобнее.

Появилась опять следующая версия:

46207151faec405981c87192982b583c.png

И следующая версия:

1a3ec0888bc74da9a7faaf851db8ca66.png

И еще следующая версия:

097f46d46e2a41f883b6473681ba36b0.png

И так версия за версией, рост интереса и моих знаний.

Потом я изучил как делать инсталляционные пакеты и программа получила свой инсталлер:

196e96633abd44f5ae811abdcd22b24b.png

Ну и функционала добавилось:

cb34235bd6d6430db9b8f5a0ff2a8cd1.png

И сейчас, спустя два года это выглядит так:

96e03cc446274059ad95fc731525dc41.png

ba9dfea3955b4c3ba182d51dd48ec016.png

a3edbff87fb24f39a76883ad3dc9cbd2.png

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

Чтобы про неё рассказать не хватит уже к сожалению сил у пальцев руки, так как начиналась она всего лишь с моего простого увлечения или вопроса самому к себе: А как перезагрузить удаленно комп на Линуксе (у нас кассовое по на Линуксе)?

Во что оно превратилось за 4 года вы видели выше.

Но и давайте теперь поделюсь тем, как, например я там все реализую.

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

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

80f12ec436664844ba80ba45ca4a3191.png

Накодил вот такую вещь:

srok1$=cs1$ File1$='cashes/01c.txt' Rv1=StrToFile (File1$, srok1$, FALSE, FALSE) clear$='' srok1$='For /F «Delims=» %%I In (01c.txt) Do Set c01=%%~I' srok2$='Ping -n 1 -w 1%c01% >nul' srok3$='If %ErrorLevel%==0 (' srok4$=' c01ping.txt' srok5$=') Else (' srok6$=' c01ping.txt' srok7$=')' File3$='cashes/c01ping_mmb.bat' Rv=StrToFile (File3$, clear$, FALSE, FALSE) Rv=StrToFile (File3$, srok1$, TRUE, TRUE) Rv=StrToFile (File3$, srok2$, TRUE, TRUE) Rv=StrToFile (File3$, srok3$, TRUE, TRUE) Rv=StrToFile (File3$, srok4$, TRUE, TRUE) Rv=StrToFile (File3$, srok5$, TRUE, TRUE) Rv=StrToFile (File3$, srok6$, TRUE, TRUE) Rv=StrToFile (File3$, srok7$, TRUE, TRUE) Run (»\cashes\c01ping_mmb.bat», «HIDE») Pause (»1000») path1$ = 'cashes/c01ping.txt' col1$='0,255,0' col2$='255,0,0' LoadText («r1$», «FILE: path1$») If (r1$='a') Then SetObjectParam («bt1», «BGCOLOR=col1$») Else If (r1$='n') Then SetObjectParam («bt1», «BGCOLOR=col2$») End End Суть в том, что сразу при нажатии на кнопку «пинг», ip-адрес записывается в файл для этого поля где адрес. Далее генерим код для батника, который будет читать ip-адрес из текстового файла и запускаем его. По результату батника генерится файл ответ «n» или «a» и в зависимости от этого уже читая результат красим кнопку. Да конечно по-любительски, но работает.

2. Запуск putty.exe без ввода логина и пароля.

58226bb88f044109bea0f6bfe7a1dbb4.png

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

Если запустить PuTTy, то будет примерно следующее:

ebda784bae954f8fb178ffac43c4f5af.png

Но я подумал, почему бы не сделать, так: клацнул по кнопочке и у тебя сразу открылась командная строка SSH.

Родился вот такой вот любительский код:

srok1$=cs1$ File1$='cashes/01c.txt' Rv1=StrToFile (File1$, srok1$, FALSE, FALSE) clear$='' srok01$='For /F «Delims=» %%I In (cashes/01c.txt) Do Set c01=%%~I' srok02$='REG ADD HKCU\Software\SimonTatham\PuTTY\Sessions\%c01% /f' srok03$='REG ADD «HKCU\Software\SimonTatham\PuTTY\Sessions\%c01%» /f /v HostName /t REG_SZ /d %c01%' srok04$='REG ADD «HKCU\Software\SimonTatham\PuTTY\Sessions\%c01%» /f /v LineCodePage /t REG_SZ /d UTF-8' srok05$='echo y | plink.exe tc@%c01% -pw »12345» exit' srok06$='putty.exe -load %c01% tc@%c01% -pw »12345»' File3$='run_putty.bat' Rv=StrToFile (File3$, clear$, FALSE, FALSE) Rv=StrToFile (File3$, srok01$, TRUE, TRUE) Rv=StrToFile (File3$, srok02$, TRUE, TRUE) Rv=StrToFile (File3$, srok03$, TRUE, TRUE) Rv=StrToFile (File3$, srok04$, TRUE, TRUE) Rv=StrToFile (File3$, srok05$, TRUE, TRUE) Rv=StrToFile (File3$, srok06$, TRUE, TRUE) Run («run_putty.bat», «HIDE») RunScript («ssh_log_1») Логика:

Записываем ip-адрес в текстовый файл. Далее генерим батник. При запуске в переменные батника подставляется ip-адрес. Сессия добавляется в реестр. PuTTy.exe открывает ссесию. И вуаля: 9fa22cbd58024762b6975cf3a0c29c8b.png

3. Удаленный VNC-сервер.Также у нас на кассах есть возможность удаленного подключения по протоколу VNC-сервера, для того, чтобы можно было смотреть, что там кассиры делают.

Для этого я взял Real VNC Viewer.

Далее получился вот такой код:

srok1$=cs1$ File1$='cashes/01c.txt' Rv1=StrToFile (File1$, srok1$, FALSE, FALSE) clear$='' srok01$='For /F «Delims=» %%I In (cashes/01c.txt) Do Set c01=%%~I' srok02$='rem SET /p ipcash=Enter CashIP for run remote DeskTop:' srok03$='echo n | plink.exe -v -ssh tc@%c01% -pw »12345» -m rdp_vnc_cmd.txt' srok04$='vncviewer.exe %c01%' File3$='rn_vnc_mmb.bat' Rv=StrToFile (File3$, clear$, FALSE, FALSE) Rv=StrToFile (File3$, srok01$, TRUE, TRUE) Rv=StrToFile (File3$, srok02$, TRUE, TRUE) Rv=StrToFile (File3$, srok03$, TRUE, TRUE) Rv=StrToFile (File3$, srok04$, TRUE, TRUE) Message («Сейчас будет запущен сеанс удаленной связи. Нажмите ОК и подождите несколько секунд.»,») Run («rn_vnc_mmb.bat», «HIDE») RunScript («vnc_log_1») Логика:

Записываем ip-адрес в текстовый файл. Генерим батник, который из этого текстового файла читает ip-адрес. Далее запускается vncviewer.exe, который читает сессию. Ну и собственно открывается сеанс: 7cfb5d0933f7423198fe42f4a70b6584.png

Вот как-то так.

На самом деле есть еще куча всяких примочек.

3619c198d525441ab39fb51b1aa6933c.png

А выглядит теперь все это уже так спустя 2 года, как я начал все изучать:

ba3f7e75338d42dca70527e6f6c17a4a.png

И конечно, не обошлось без пасхалок. Сделал одну недавно: если случайно кое-где кликнуть мышкой, то попадаешь в секретный раздел, где много всяких фишек, ну так, чтобы коллег повеселить!

0b7d26f9035c45d28f164bbc7bf5051d.png

© Habrahabr.ru