Да простит меня CreatoR, ибо кроме как сабж и "копание сорцев" мне в голову ничего не приходило.
Но ближе к телу!
Итак, вроде бы спокойно делаем свои скриптики-фенечки, но любому (по крайней мере мне ) хотелось бы иметь свой собственный уголок в любом проекте. Маленький, тихий, темный, укромный и свой. А AutoIt3? Ну да, UDF и т.д., всё это круто, но... почему бы не впится в сам AutoIt?! Давайте попробуем.
WARNING: Как я понял, из-за выхода AutoHotKey (основанной на сорцах AutoIt), на исходники была наложена лицензия GPL. И еще исходники порядком лохматые.
1. Начнем?
Только с чего?.. Друзья, изменять исходники начинают с их скачивания, поэтому смело топаем по ссылке http://www.autoitscript.com/autoit3/files/archive/autoit/autoit-v3.1.0-src.exe и качаем-устанавливаем.
Скачали-установили? Отлично, но чтобы из этой кучи непонятных файлов получить один вожделенный exe, нужен компилятор. В принципе, если у вас есть Visual Studio 2003-2010, то просто стоит открыть AutoIt_VC7.sln (если нужно - отконвертировать), если не хочется это громадину, то, думаю, в интеренте найдете много голых компиляторов (в папке есть Makefile для gcc).
Лично у меня стоит VS 2007, я отконвертирвал проект и сразу начал корпеть над сорцами.
2. Компилируем... Что за?..
Условно, назовём "компилируем" - пропускаем через gcc или в VS идем Buld->Build AutoIt_VC7. Ну, собственно, компилируем. Если всё прошло без ошибок, то... Честь вам и хвала, вам повезло!
Мне повезло не сильно, 3 ошибки и кучи warning'ов. Я забил на warning и занялся error'ами.
Ошибка №1.
У меня это - в файле utility.cpp (мы говорим уже о папке src). Где-то 1126 строка:
А собственно зачем нам lpTemp? А незачем! Меняем эти строчки на:
И всё работает как часы.
Ошибки №2 и №3.
Идентичны.
Связаны с sendkeys.cpp:
Выносим ifndef и endif и никто ниначто не ругается:
3. Первый поход в дебри
Если у вас еще какие ошибки, можете отписывать здесь, авось и решим.
А мы двигаемся дальше.
Идем в папку bin и видим upx.exe и AutoIt3.exe (если скомпилировали). Создаем рядом скрипт и пишем в него любой рабочий бред. Я взял просто MsgBox. Если скрипт исправно заработал - значит вы скомпилировали вашу первую версию AutoIt3! :IL_AutoIt_1:
Но мы же её не отредактировали! Ок, идем и оглядываемся... заходим в resource и открываем AutoIt_VersionInfo.h. Что видим? Версии, верно... Я не знаю как из скрипта достать версии в тексте, но знаю, что если мы изменим числовую - то при вызове этого кода нашим exe-шником:
Мы увидим свеже(или протухше)испеченную версию!
Но это ведь не очень, правда? Давайте впишем себя туда!
Открываем application.h и находим строчку:
AppTitile? AutoItWinGetTitle! Итак, меняем строку на свою (я цинично изменил на "AutoIt v3 & Modified By Nik_rus") и запускаем скрипт:
И ву-а-ля... наш слепок уже и тут!
4. Мы погружаемся в глубины...
Идем дальше?
А давайте сделаем свою функцию!
Пока что делаем без параметров, потом может и добавим чего...
Идем в script.cpp и после:
Ставим:
Да, я назвал свою функцию Horror() . Она мистическая.
Но не так всё просто! Нам ведь всё таки нужно описать её деятельность, да ещё и подтвердить её существование...
С существованием всё легко, перед строчкой в script.h:
Ставим это:
Так жизнедеятельность подтвердили... пора создать саму жизнедеятельность!
Идем в script_win.cpp (или любой другой из похожих файлов) и ипшем там (я писал после ControlShow()):
Код внутри функции взят из функциональности msgbox'а. Он в файле utils.cpp
Итак, вызывает такой код:
И... OH SH--! It's works!
Потом расскажу другие фенечки по мере их нахождения.
А остальным предлагаю рассказывать то, что сами наделали .
P.S.: не знал куда запостить - запостил сюда.
Но ближе к телу!
Итак, вроде бы спокойно делаем свои скриптики-фенечки, но любому (по крайней мере мне ) хотелось бы иметь свой собственный уголок в любом проекте. Маленький, тихий, темный, укромный и свой. А AutoIt3? Ну да, UDF и т.д., всё это круто, но... почему бы не впится в сам AutoIt?! Давайте попробуем.
WARNING: Как я понял, из-за выхода AutoHotKey (основанной на сорцах AutoIt), на исходники была наложена лицензия GPL. И еще исходники порядком лохматые.
1. Начнем?
Только с чего?.. Друзья, изменять исходники начинают с их скачивания, поэтому смело топаем по ссылке http://www.autoitscript.com/autoit3/files/archive/autoit/autoit-v3.1.0-src.exe и качаем-устанавливаем.
Скачали-установили? Отлично, но чтобы из этой кучи непонятных файлов получить один вожделенный exe, нужен компилятор. В принципе, если у вас есть Visual Studio 2003-2010, то просто стоит открыть AutoIt_VC7.sln (если нужно - отконвертировать), если не хочется это громадину, то, думаю, в интеренте найдете много голых компиляторов (в папке есть Makefile для gcc).
Лично у меня стоит VS 2007, я отконвертирвал проект и сразу начал корпеть над сорцами.
2. Компилируем... Что за?..
Условно, назовём "компилируем" - пропускаем через gcc или в VS идем Buld->Build AutoIt_VC7. Ну, собственно, компилируем. Если всё прошло без ошибок, то... Честь вам и хвала, вам повезло!
Мне повезло не сильно, 3 ошибки и кучи warning'ов. Я забил на warning и занялся error'ами.
Ошибка №1.
У меня это - в файле utility.cpp (мы говорим уже о папке src). Где-то 1126 строка:
Код:
char *lpTemp = strchr(szDest, '*');
if (lpTemp != NULL)
Код:
if (strchr(szDest, '*') != NULL)
Ошибки №2 и №3.
Идентичны.
Связаны с sendkeys.cpp:
Код:
#ifndef VK_BROWSER_BACK
#define VK_BROWSER_BACK 0xA6
#define VK_BROWSER_FORWARD 0xA7
#define VK_BROWSER_REFRESH 0xA8
#define VK_BROWSER_STOP 0xA9
#define VK_BROWSER_SEARCH 0xAA
#define VK_BROWSER_FAVORTIES 0xAB
#define VK_BROWSER_HOME 0xAC
#define VK_VOLUME_MUTE 0xAD
#define VK_VOLUME_DOWN 0xAE
#define VK_VOLUME_UP 0xAF
#define VK_MEDIA_NEXT_TRACK 0xB0
#define VK_MEDIA_PREV_TRACK 0xB1
#define VK_MEDIA_STOP 0xB2
#define VK_MEDIA_PLAY_PAUSE 0xB3
#define VK_LAUNCH_MAIL 0xB4
#define VK_LAUNCH_MEDIA_SELECT 0xB5
#define VK_LAUNCH_APP1 0xB6
#define VK_LAUNCH_APP2 0xB7
#endif
Код:
#define VK_BROWSER_BACK 0xA6
#define VK_BROWSER_FORWARD 0xA7
#define VK_BROWSER_REFRESH 0xA8
#define VK_BROWSER_STOP 0xA9
#define VK_BROWSER_SEARCH 0xAA
#define VK_BROWSER_FAVORTIES 0xAB
#define VK_BROWSER_HOME 0xAC
#define VK_VOLUME_MUTE 0xAD
#define VK_VOLUME_DOWN 0xAE
#define VK_VOLUME_UP 0xAF
#define VK_MEDIA_NEXT_TRACK 0xB0
#define VK_MEDIA_PREV_TRACK 0xB1
#define VK_MEDIA_STOP 0xB2
#define VK_MEDIA_PLAY_PAUSE 0xB3
#define VK_LAUNCH_MAIL 0xB4
#define VK_LAUNCH_MEDIA_SELECT 0xB5
#define VK_LAUNCH_APP1 0xB6
#define VK_LAUNCH_APP2 0xB7
Если у вас еще какие ошибки, можете отписывать здесь, авось и решим.
А мы двигаемся дальше.
Идем в папку bin и видим upx.exe и AutoIt3.exe (если скомпилировали). Создаем рядом скрипт и пишем в него любой рабочий бред. Я взял просто MsgBox. Если скрипт исправно заработал - значит вы скомпилировали вашу первую версию AutoIt3! :IL_AutoIt_1:
Но мы же её не отредактировали! Ок, идем и оглядываемся... заходим в resource и открываем AutoIt_VersionInfo.h. Что видим? Версии, верно... Я не знаю как из скрипта достать версии в тексте, но знаю, что если мы изменим числовую - то при вызове этого кода нашим exe-шником:
Код:
MsgBox(0,"Info",@AutoItVersion)
Мы увидим свеже(или протухше)испеченную версию!
Но это ведь не очень, правда? Давайте впишем себя туда!
Открываем application.h и находим строчку:
Код:
#define AUT_APPTITLE "AutoIt v3"
Код:
MsgBox(0,"Info",AutoItWinGetTitle())
И ву-а-ля... наш слепок уже и тут!
4. Мы погружаемся в глубины...
Идем дальше?
А давайте сделаем свою функцию!
Пока что делаем без параметров, потом может и добавим чего...
Идем в script.cpp и после:
Код:
{"HEX", &AutoIt_Script::F_Hex, 2, 2},
Код:
{"HORROR", &AutoIt_Script::F_Horror, 0, 0},
Но не так всё просто! Нам ведь всё таки нужно описать её деятельность, да ещё и подтвердить её существование...
С существованием всё легко, перед строчкой в script.h:
Код:
AUT_RESULT F_Hex(VectorVariant &vParams, Variant &vResult);
Код:
AUT_RESULT F_Horror(VectorVariant &vParams, Variant &vResult);
Идем в script_win.cpp (или любой другой из похожих файлов) и ипшем там (я писал после ControlShow()):
Код:
AUT_RESULT AutoIt_Script::F_Horror(VectorVariant &vParams, Variant &vResult)
{
vResult = Util_MessageBoxEx(NULL, "here i am", "or maybe...", 0 | MB_SETFOREGROUND, 10000);
return AUT_OK;
} // Horror()
Итак, вызывает такой код:
Код:
Horror()
И... OH SH--! It's works!
Потом расскажу другие фенечки по мере их нахождения.
А остальным предлагаю рассказывать то, что сами наделали .
P.S.: не знал куда запостить - запостил сюда.