Универсальный конвертер текста 1.0

Очередной релиз от меня - программка для конвертации текста в разные представления и вычисления хэшей, написанная на ассемблере (masm32).
Имеется быстрое копирование и вставка текста, сохранение и открытие текстовых файлов.

Поддерживает конвертацию:
* Text -> URLEncode
* Text -> String.fromCharCode (ascii)
* Text -> String.fromCharCode (utf)
* Text -> base64
* Text -> MySQL char
* Text -> HEX
* Text -> BIN
* Text -> chr()
* Text -> MSSQL char
* Text -> PostgreSQL
* Text -> MD5
* Text -> SHA1
* Text -> &#xxx; (ascii)
* Text -> &#xxx; (utf)
* Text -> \xhh
* Text -> %XX
* Text -> VB chr$()
* Text -> C# (char)
* Text -> Транслит
* URLEncoded -> Text
* base64 -> Text

Скриншот:

Скачать exe (10кб) и исходные коды: ZIP

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

Я рассмотрю:
[+] как создавать формы в стиле XP (современный вид элементов управления) с помощью программы ResEd
[+] как создавать и использовать в программе Unicode-строки, в том числе на русском языке
[+] как делать всплывающие подсказки к текстовым полям
[+] как использовать Windows CryptoAPI для генерации хэшей
[+] как использовать буфер обмена Windows для копирования и вставки текста

Напомню, что я использую в коде некоторые удобные макросы из файла macros/macros.asm, входящего в пакет masm32.

1. Как создавать формы в стиле XP (современный вид элементов управления) с помощью программы ResEd?
ResEd - маленькая бесплатная утилита для удобного создания файлов ресурсов.
Скачать его можно отсюда: ResEd.
Открываем редактор, создаем новый проект (File - New Project), добавляем к нему новое диалоговое окно (Project - Add Dialog).
Устанавливаем желаемые параметры окна во вкладке справа внизу, добавляем необходимые элементы управления, устанавливаем их параметры.
Чтобы все элементы выглядели в стиле XP, нужно добавить XP Manifest (Project - Add XP Manifest).
Сохраняем проект - получаем два файла - сам проект *.rc и манифест (xpmanifest.xml).
После того, как мы сохранили проект и вышли из редактора, надо немного подготовить файл ресурсов перед его использованием.
Открываем файл ресурсов (*.rc) в блокноте и добавляем в начало строку:

После этого удаляем строку (необязательно, но без этого у меня проект не запускался):

Сохраняем файл - он готов к использованию в проекте.
Как же скомпилировать исходный код в asm вместе с файлом ресурсов в exe?
Для этого я использовал такой bat-файл (допустим, назовем его COMPILE.bat):

Вызывается этот батник так:
- положите его в папку вместе с исходным кодом и файлом ресурсов *.rc (файлы *.rc и *.asm должны называться одинаково, например, converter.asm и converter.rc, в той же папке должен лежать xpmanifest.xml)
- в командной строке (cmd) перейдите в директорию с этими файлами (с помощью команды cd)
- выполните команду COMPILE имя_проекта (например COMPILE converter)
Если будет выведено "OK" - exe-файл был успешно создан в той же директории.

2. Как создавать и использовать в программе Unicode-строки,, в том числе и на русском языке?
В последней версии пакета masm32 имеется поддержка Unicode-строк и функций, но вот создать с его помощью русскую
Unicode-строку проблематично. Я для этого использовал набор макросов с wasm.ru, который позволяет делать русские Unicode-строки.
К сожалению, макрос создания строк содержит недостаток - каждый 120-й символ просто убирается из строки.
Я поправил недочет этого макроса, скачать исправленный можно тут: windows.asm.

Теперь, чтобы создать русскую Unicode-строку, подключаем макрос с помощью include к коду и пишем так:

Соответственно, такие строки сожно использовать в любых Unicode-функциях (с постфиксом W, например, MessageBoxW).

3. Как делать всплывающие подсказки к текстовым полям?
Начиная с Win XP, у элементов управления Edit появилась возможность создавать всплывающие подсказки, как на первом скриншоте, я покажу, как такое реализовать.
Для показа такой подсказки необходимо послать текстовому полю сообщение EM_SHOWBALLOONTIP, а самой подсказкой управляет структура EDITBALLOONTIP.
Странно, но в inc-файлах масма32 такой структуры не оказалось, поэтому приходится задавать ее самим:

Далее, если у нас есть Edit-контрол с id=1003, то отобразить подсказку можно так:

4. Как использовать Windows CryptoAPI для генерации хэшей?
Для примера я покажу, как генерировать хэши MD5 и SHA1 для заданных строк.
Во-первых, для работы с крипто апи необходимо подключить inc-файл advapi32.inc и lib-файл advapi32.lib.
Приведу пример с комментариями из кода конвертора:

5. Как использовать буфер обмена Windows для копирования и вставки текста?
Опять-таки приведу пару примеров из кода конвертора.

Копирование текста из текстового поля с id=1004:

Вставка текста в поле с id=1003:

Универсальный конвертер текста 1.0: 24 комментария

    1. А в прграмме есть возможность кодить ссыль которая принимаятся контакотом ?

      Нет, это просто помогает перекодировать текст в разные представления. Скрипт для кодирования ссылок контакта - несколькими постами ниже тут.

      PS. Только что обновил программу, заглавные русские буквы в транслит не переводила)

  1. А при переводе в двоичную систему должно быть вначале 0b? Программка в целом хорошая, но помоему одну из кнопок "Кодировать" или "Копировать" нужно переименовать :)

    1. "Язык ассемблера для процессоров Intel" - Кип Р. Ирвин. А в основном - много гугла, мсдна, разбор примеров из пакета masm32, там много чего можно почерпнуть.

  2. Хороший конвертер, спасибо, пользуюсь для URLEncoded -> Text для перегона русских линков в ASCII текст. Вот только одно неудобство, конвертер перегоняет в UTF-8, а результат показать пытается в ASCII. И приходится скидывать в редактор и пересохранять UTF-8 -> ASCII. Неудобно! Попробуйте адрес этой страницы перегнать URLEncoded -> Text. Нельзя ли поправить конвертер, что бы он или в UTF-8 русский корректно отображал или сразу в ASCII конвертил?

    1. Вряд ли я буду править в ближайшее время. Программа очень старая, но есть исходный код, так что если очень нужно, можно и самому как-то поправить.

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

    Помогите корректно вытащить всю конвертацию.

    1. Писалась программа очень давно, я уже и сам не помню, как там реализовано всё это. Вроде бы там было подобие какого-то switch-case на ассемблере (начинается всё после строки .if wParam==1001). Сейчас для меня было бы проще написать тоже самое на C++ (если бы, конечно, не стояла задача получить очень маленький бинарник), это бы заняло в 10 раз меньше строк кода.

  4. хотел спросить может ли автор написать программу конвертер чтобы она из одной папки брала текст в одном формате и перекладывала его в другую папку (которую назначает пользователь) в другом формате и делала это непрерывно по мере поступления нового текста

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

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