вторник, 5 января 2016 г.

Alphaskins - мой софт, мои правила.

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

Unregistered skin has been loaded. 
If you have a key for this skin, please insert it in the KeyList.

Я был очень раздосадован данной несправедливостью! Какой то альфаскин посмел В МОЁМ софте показывать всплывающие окна! Ну а т.к. я еврей и платить 20 баксов за какой то скин не намерен, то решил пойти другим путём - перехватить это сообщение вообще, и в данной статье я напишу как это сделать.



Плюсы Delphi по сравнению с C# и прочими си - мы можем творить всё что угодно со своим приложением! Кстати не только со своим, вообще с любыми. Можно даже модифицировать код программы на лету всего десятком строчек! И назревает вопрос - а зачем платить если можно без труда выпилить это сообщение при старте? Раз Delphi даёт нам такие возможности, то грех не воспользоваться!

Что бы перехватить это сообщение - нам нужно поправить таблицу импорта. Если кто не знает что такое таблица импорта то поясню: в программе есть модули (DLL файлы) в которых содержатся готовые функции такие как MessageBox, что бы вызвать эту функцию программе нужно знать адрес, вот как раз таблица импорта и хранит этот адрес.
Делать это нужно до того как приложение начнёт выполнение, а значит перехватывать мы будем на точке входа:


Не мудрствуя лукаво я погуглил и нашёл в интернете кучу информации по перехвату, но самым стабильным оказался метод с правкой таблицы импорта. Тут всё просто: мы создаём свою функцию которая будет выводить сообщения на экран (или не выводить в случае с альфаскином) и подменяем стандартную функцию нашей. 

Всё, теперь мы восстановили контроль над своим приложением и сэкономили 20 баксов.

Скачать исходник можно по ссылке.


11 комментариев:

  1. Он бесплатный для русских: http://www.alphaskins.com/index_rus.php

    ОтветитьУдалить
    Ответы
    1. Альфаскин бесплатный, а сами скины есть платные.

      Удалить
  2. Delphi 7 выдаёт Undeclared identifier: 'PImageImportDescriptor'

    ОтветитьУдалить
    Ответы
    1. В Delphi7 нет описания данной структуры, но можно скопировать с 2010: http://pastebin.com/mpPV02D8
      Всё работает, но с альфаскином не проверял.

      Удалить
  3. Зачем использовать альфаскины если есть стандартные скины delphi?

    ОтветитьУдалить
    Ответы
    1. Они есть только в линейке XE, а в других нет. Да и AlphaSkin имею множество преимуществ по сравнению во VCL Styles.

      Удалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. спс, работает. очень признателен

    ОтветитьУдалить
  6. спс, автору зачет)

    ОтветитьУдалить
  7. Да, сработала на Delphi XE7
    Спасибо.

    ОтветитьУдалить