Исходный код компоненты, на базе которого вы будете выполнять свою работу, находится в файле проекта. Компонента написана на базе шаблона внешней компоненты 1С, на Visual C++ 2017.
Необходимо выполнить следующие доработки нашей внешней компоненты:
1) Реализовать метод получения точного времени с (S)NTP сервера (адрес сервера передается параметром из 1С, может быть передан как DNS имя, так и IP). Если передан доп. параметр, то время компьютера автоматически синхронизируется. В обоих случаях, метод возвращает точное полученное время в часом поясе компьютера и дополнительным параметром, возвращает разницу в секундах. Для синхронизации времени на компьютере, компонента, в случае необходимости. должна запросить права;
2) Починить выполнение методов из 1С на Русском диалекте;
3) По возможности, метод "GetVikiInfo" переделать на структуру (чтобы избавится от кучи параметров). В случае невозможности передачи структуры, сделать формирование XML строки со всеми параметрами;
4) Разобраться с корректностью передачи событий/ошибок в 1С (в том числе и на Русском языке) (сделать примеры);
5) Реализовать метод аналогичный методу "GetVikiInfo" только для касс АТОЛ;
6) Переделать метод "PlaySound" в выделенный поток, чтобы не текла память как в данной реализации. (Основной поток не должен быть занят!). При этом важно не потерять возможность параллельного воспроизведение звука (несколько звуков играет одновременно);
7) Реализовать метод "USBPowerSetup", реализация которого есть на C# в каталоге "USBEnhancedPowerManagementDisabler" в архиве проекта (только нужно изменять параметр либо для всех устройств (если отбор не задан) либо у заданного устройства. При этом, в случае необходимости, необходимо запросить права на изменение в реестре;
8) Если возможно, реализовать метод, который возвращает информацию о том, сенсорный ли ввод в системе;
9) Проверить метод "TouchKey_ShowHide" на корректность работы;
10) Реализовать метод записи звука в файл. Для этого, можно использовать возможности используемой библиотеки BASS (там есть запись звука). При вызове метода "НачатьЗапись", передается каталог для записи, запись происходит в отдельном потоке. При вызове метода "остановить запись", запись останавливается и возвращает полный путь к файлу записи. Запись выполняется в формате mp3;
11) Реализовать простые методы получения скриншота экрана и передача в 1С в виде двоичных данных и сохранения в файл;
12) Реализовать в компоненте аналог DevCon исходный код которого есть на GitHub:
https://github.com/Microsoft/Windows-driver-samples/tree/master/setup/devcon А конкретно необходимы следующие методы:
1) Поиск устройств по вхождению, пример для DevCon: DevCon.exe hwids "@USB\VID_0A89&PID_0030\*", требуется возврат только Instance ID
2) Отключение устройств, пример для DevCon: DevCon.exe disable"@USB\VID_0A89&PID_0030\7&322AFE30&2&3"
3) Включение устройств, пример для DevCon: DevCon.exe enable "@USB\VID_0A89&PID_0030\7&322AFE30&2&3".
Необходимые права для выполнения операции, необходимо запросить;
13) Реализовать метод расчета контрольной суммы файла (путь будет передан в параметре) по следующим функциям: md5, sha1, sha2 (Дело в том, что 1С не умеет рассчитывать контрольную сумму на клиенте, что требуется нашей задачей). При этом, проверка должна выполнятся в отдельном потоке (так как проверяемые файлы у нас большие) и порождать событие в 1С после завершения расчета контрольной суммы;
14) Реализовать метод скачивания файла с HTTP(s)/FTP сервера, при этом, скачивание должно происходить в фоновом режиме (в отдельном потоке) при этом, компонента отправляет оповещение в 1С с прогрессом скачивания файла. Частота передачи оповещений указывается при вызове компоненты. Например передано: 0 - Уведомление отключено, передается только завершение скачивания, 0,1 - оповещение на изменение каждой десятой процента, 0.5 - оповещение на изменение каждой 0,5%, 1 - оповещение на изменение каждого процента, 10 - оповещение на изменения каждого 10% и т.д. Во всех случаях, после скачивания файла, передается событие завершения скачивания. Так же важно, чтобы метод умел докачивать файлы в случае обрыва;
15) Реализовать метод перехвата нажатия клавиш. Перехват вызывается и останавливается соответствующими методами, перехваченные нажатия клавиш отправляются оповещением в 1С;
16) Реализовать метод, возвращающий нажатые модификаторы (Ctrl, Shift, Alt, Win ...) Тестовый пример задачи: Отличие поведения на нажатие кнопки [командной панели, формы], в зависимости от нажатого модификатора. К примеру нажатие кнопки вызывает команду прописанную в коде, а с нажатым Shift предлагается выбор команды к выполнению;
17) Реализовать метод, позволяющий задавать свои произвольные клавиши с необходимыми модификаторами и указыванием имени события, порождаемое при нажатии данного сочетания клавиш. При этом необходимо предусмотреть как метод включения комбинации клавиш, так и её отключение;
18) В целом проверить проект на возможные проблемы / утечки памяти.
Примечания:
1) Внешняя компонента должна быть совместима с x86/x64 Windows системами.
2) Код писался криворукой обезьяной (мной), которая лишь недавно пробует себя в C++
3) Компонента не должна использовать Net.Framework
4) По возможности, не использовать дополнительные внешние библиотеки сверх используемого. Но можно согласовать. Если сделаете так, чтоб все необходимые библиотеки будут в "комплекте" и автоматически устанавливаться при начале использования библиотеки, будет плюсом, но это вторично.
5) Проект должен был возвращен с исходным кодом!
6) Старайтесь оставлять комментарии в коде!
7) Просьба, предоставить тестовую обработку!
8) Совместимость с Windows не ниже Windows 7! (Желательно совместимость с Windows XP)
9) Просьба, предоставлять расчет вашей цены по пунктам, чтобы мы могли в случае превышения бюджета, отказаться от каких-то менее значимых пунктов.
PS: Если вы не опытны в программировании на Visual C++, не стоит рассматривать данный проект, спасибо за понимание!
PPS: Проект является коммерческим лишь от части. По большей части, это моё желание навести порядок.