Как то раз мне захотелось украсить свой софт альфаскинами, выбрал я значит самый крутой скин, скомпилировал приложение и.....
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 баксов.
Он бесплатный для русских: http://www.alphaskins.com/index_rus.php
ОтветитьУдалитьАльфаскин бесплатный, а сами скины есть платные.
УдалитьDelphi 7 выдаёт Undeclared identifier: 'PImageImportDescriptor'
ОтветитьУдалитьВ Delphi7 нет описания данной структуры, но можно скопировать с 2010: http://pastebin.com/mpPV02D8
УдалитьВсё работает, но с альфаскином не проверял.
Спасибо,работает
УдалитьЗачем использовать альфаскины если есть стандартные скины delphi?
ОтветитьУдалитьОни есть только в линейке XE, а в других нет. Да и AlphaSkin имею множество преимуществ по сравнению во VCL Styles.
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьспс, работает. очень признателен
ОтветитьУдалитьспс, автору зачет)
ОтветитьУдалитьДа, сработала на Delphi XE7
ОтветитьУдалитьСпасибо.
На Rio тоже работает с альфаскинами 14ю35
ОтветитьУдалитьБлагодарен!!! Вначале проблема была с Trial у AlphaControls! А сейчас добавил платный скин и снова ж0па... Но благодаря статьям здешним оба трабла решены! РЕСПЕКТ!!!
ОтветитьУдалитьПроблема только одна, если вы потом сожмете программу, например upx, то окошко снова будет выплывать))
ОтветитьУдалить