Что нового

AutoIt3 - переделываем под свой лад

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Да простит меня CreatoR, ибо кроме как сабж и "копание сорцев" мне в голову ничего не приходило.
Но ближе к телу!
Итак, вроде бы спокойно делаем свои скриптики-фенечки, но любому (по крайней мере мне :smile:) хотелось бы иметь свой собственный уголок в любом проекте. Маленький, тихий, темный, укромный и свой. А 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)
А собственно зачем нам lpTemp? А незачем! Меняем эти строчки на:
Код:
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
Выносим ifndef и 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
3. Первый поход в дебри
Если у вас еще какие ошибки, можете отписывать здесь, авось и решим.
А мы двигаемся дальше.
Идем в папку 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"
AppTitile? AutoItWinGetTitle! Итак, меняем строку на свою (я цинично изменил на "AutoIt v3 & Modified By Nik_rus") и запускаем скрипт:
Код:
MsgBox(0,"Info",AutoItWinGetTitle())

И ву-а-ля... наш слепок уже и тут!
4. Мы погружаемся в глубины...
Идем дальше?
А давайте сделаем свою функцию!
Пока что делаем без параметров, потом может и добавим чего...
Идем в script.cpp и после:
Код:
{"HEX", &AutoIt_Script::F_Hex, 2, 2},
Ставим:
Код:
{"HORROR", &AutoIt_Script::F_Horror, 0, 0},
Да, я назвал свою функцию Horror() :smile:. Она мистическая.
Но не так всё просто! Нам ведь всё таки нужно описать её деятельность, да ещё и подтвердить её существование...
С существованием всё легко, перед строчкой в 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()
Код внутри функции взят из функциональности msgbox'а. Он в файле utils.cpp
Итак, вызывает такой код:
Код:
Horror()

И... OH SH--! It's works! :smile:
Потом расскажу другие фенечки по мере их нахождения.
А остальным предлагаю рассказывать то, что сами наделали :smile:.
P.S.: не знал куда запостить - запостил сюда.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Этот форум, вроде, не для исследования.
 

SyDr

Сидра
Сообщения
651
Репутация
158
А смысла? autoit-v3.1.0-src.exe
Функции можно вызывать прямо из dll. Либо написав плагин.
А использовать устаревшие на 5 лет исходники, по мойму глупо.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
IMHO
Я, конечно, приветствую любознательность Nik_rus, и то, что вы тут изложили это хорошо, и познавательно, для общего развития!
Но чтобы собирать свои сборки, зачем?
Честно говоря, это мне напоминает сборки наших умельцев, коим напичкан весь интернет. Одного только wordpress`а пруд пруди, что уже говорить об онлайн играх и т.д. Но, ведь куда интереснее создать что-либо своё, непохожее не на что. Ну, или чуть-чуть похожее :smile:
Кстати разбираться в чужом коде, архи как тяжко :smile:
 
Автор
N

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
А мне было интересно копать исходники AutoIt3
а кому-то на моск покапал :smile:
А насчет версии - была бы новее, взял бы новее.
 
Верх