Giter Club home page Giter Club logo

sm2201autosave's Introduction

Это программное обеспечение используется для форсирования сохранения спектров, имзмеряемых с использованием ПО для управления спектрометром SM-2201 (ПО - MS-DOS утилита, запускается из под Win98, которое обладает псевдо-графическим интерфейсом.

Основная идея: отправка событий нажатия клавиш в MS-DOS окно, что позволит эмулировать управление программой с клавиатуры. И управление этим процессом по расписанию (сейчас сохранение через заданный интервал времени в секундах)

В Win98 имя процесса, запускающего MS-DOS программу

  • C:\WINDOWS\SYSTEM\WINOA386.MOD

SM2201 Горячие клавиши:

W - запись С - продолжение Left Arrow - на канал 1 Right Arrow - на канал 2

Для канала 1: Последовательность виртуальных нажатий клавиш будет следующая

  1. Выбор канала - Left Arrow
  2. Продолжение - Продолжение - C, Enter, Enter
  3. Запись - W
  4. Перезапись файла - Enter

Для канала 2: Последовательность виртуальных нажатий клавиш будет следующая

  1. Выбор канала - Right Arrow
  2. Продолжение - C, Enter, Enter
  3. Запись - W
  4. Перезапись файла - Enter

Конфигурационный файл для управления настройками приложения:

`

# Внимание с символа решетка (#) начинаются комментарии, они не используются для конфигурирования
# Настройки идут в виде пар ключ = значение
# в конфигурации должны присутствовать все пары значений, а именно пары, которые содержат следующие ключи: 
#    - state, 
#    - useChannel1, 
#    - useChannel2,
#    - channel1Period
#    - channel2Period
#    - outputDir
#    - archiveDir
# В текущей версии все значени¤ чувствительны к регистру, поэтому нужно использовать их так, как они перечислены выше
# state - состо¤ние автосохранени¤: 0 - автосохранение ВЫКЛ, 1 - ВКЛ , например, state = 0
state = 1
# useChannel1 - автоматическое сохранение спектров по каналу 1, 0 - автосохранение по каналу 1 ВЫКЛ, 1 - ВКЛ, например, useChannel1 = 1
useChannel1 = 1
# useChannel2 - сохранение спектров по каналу 2, 0 - автосохранение по каналу 2 ВЫКЛ, 1 - ВКЛ, например, useChannel2 = 1
useChannel2 = 1
# channel1Period - период автосохранени¤ спектров по каналу 1 в СЕК , например, дл¤ сохранения спектров с периодом 1 час,       channel1Period = 3600
channel1Period = 5
# channel2Period - период автосохранени¤ спектров по каналу 2 в СЕК , например, дл¤ сохранения спектров с периодом 1 час,     channel2Period = 3600
channel2Period = 10
# outputDir - директория (АБСОЛЮТНЫЙ ПУТЬ), в которую, SM2201 сохран¤ет спектры, например, outputDir=C:\\SM2201\\Specs
outputDir=C:\SM2201\Specs
# archiveDir - директория (АБСОЛЮТНЫЙ ПУТЬ), в которую спектры будут копироватьс¤ из outputDir с уникальным именем, содержащим timestamp,
archiveDir=C:\SavedSpecs

`Text UI Examples:

Channel 1 spec saved

sm2201autosave's People

Contributors

evillord666 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

dmitriistoler

sm2201autosave's Issues

Добавить механизм логирования

Необходимо попробовать добавить способ логирования исключительных ситуаций и событий когда происходила отработка автосохранений

Более удобный TUI

Для приложения необходимо реализовать более удобный текстовый UI, который бы не приводил к постоянному выводу в консоль, я хочу реализовать вывод основных данных в одни и те же позиции консоли (в Linux есть libcurses, есть даже где-то на просторах интернета ее версия для Win, но я не хочу мучиться с настройкой зависимостей, поэтому реализую собственный вариант без curses

данное окно должно выводить следующую информацию:

  • состояние управление автосохранением
  • состояние управления каналами
  • время до выполнения операции сохранения по каждому из каналов
  • время последнего сохранения сохранения по каждому из каналов
  • подсказку о возможных коммандах (их 3 - start, stop, exit)

Тестирование на Win98 с SM2201

необходимо провести тестирования для проверки сохранения спектров на машине с подключенным спектрометром СМ2201

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

Необходимо в будущем переработать ПО, а именно создать статическую библиотеку с С++ кодом и ее использовать в консольном и графическом приложениях, графическое приложение будет проще (чем сейчас) и удобнее контролировать

Добавить команды для управления каналами

необходима возможность управления каналами из командной строки - channel {N} on|off
также необходимо уметь управлять таймаутами - channel {N} set period {value}

Необходимо одновременно сохранять изменения в файл конфигурации и использовать в приложении (приложение раз в N секунд проводит чтение файла конфигурации), поэтому нужно ввести операции через критическую секцию - https://learn.microsoft.com/ru-ru/windows/win32/sync/using-critical-section-objects

Эмуляция взаимодействия с интерфейсом

Необходимо послать следующий набор комманд:

  1. Выбор канала - Left Arrow
    SendMessage(hWnd, WM_CHAR, 0x25, 0); - VK_LEFT
  2. Продолжение - Продолжение - C, Enter, Enter
    SendMessage(hWnd, WM_CHAR, 0x43, 0);
  3. Запись - W
    SendMessage(hWnd, WM_CHAR, 0x57, 0); - Ord('w')
  4. Перезапись файла - Enter
    SendMessage(hWnd, WM_CHAR, 0x0D, 0); - VK_RETURN

Для канала 2: Последовательность виртуальных нажатий клавиш будет следующая

  1. Выбор канала - Right Arrow
    SendMessage(hWnd, WM_CHAR, 0x27, 0); - VK_RIGHT
  2. Продолжение - C, Enter, Enter
    SendMessage(hWnd, WM_CHAR, 0x43, 0);
  3. Запись - W
    SendMessage(hWnd, WM_CHAR, 0x57, 0); - Ord('w')
  4. Перезапись файла - Enter
    SendMessage(hWnd, WM_CHAR, 0x0D, 0); - VK_RETURN

Механизм для перезагрузки конфига

Перед каждым сохранением необходимо прочитать значения из конфиг файла, чтобы понять работает ли приложение и по каким каналам необходимо выполнять авто сохранение

Отбор окон по имени процесса и имени окна

Реализовать метод, который позволит отбирать среди всех окон (std::vector) по имени процесса и имени окна, в контексте разрабатываемого решения имя окна - MC, имя процесса - C:\WINDOWS\SYSTEM\WINOA386.MOD

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.