Что нового

Пишем AutoIt скрипты в PureBasic'e

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Привет всем, делаю возможность для написания AutoIt скриптов в PureBasic`e
Вопрос: Нужно ли это кому нибудь, будут ли этим пользоваться?

Плюсы и минусы:
+ Возможность писать dll
+ Многопоточность
+ Декомпиляторы не возьмут - нужно дезасамблировать
+ Минимальный размер скомпилированного файла
+ Возможность ASM`овских вставок

- Переменные приняли вид из PureBasic'a
- Для обработки сообщений окна и контролов нужно создавать 2 условия (в примере)
- Бинарные числа выглядят не так 0x03FD10 а $03FD10

Пример написанного скрипта:
Код:
IncludeFile "AutoItX.pb"

Declare Msg(id,Title.s, Text.s)
  
hForm = GUICreate("PureBasic + AutoIt", 500, 400)
hLink = GUICtrlCreateHyperLink("AutoIt Russian Community", 10, 10, 150, 20, $AD3428, 1)
hMsg  = GUICtrlCreateButton("Message", 160, 10, 80, 20,WS_EX_CONTROLPARENT)
hCombo = GUICtrlCreateCombo("AutoIt", 250, 10, 120, 20)
GUICtrlSetData(hCombo, -1, "PureBasic")
hInput = GUICtrlCreateInput("Example", 380, 10, 100, 20)

;FileRecycleEmpty() ; Очистка корзины
;MsgBox(48, "Example", Str(InternetConnected())) ; Проверка интернет соединения

Msg(48,"Example","Функция Msg() работает") 

While 1
  nMsg = GUIGetMsg()  
  Select nMsg
     Case GUI_EVENT_CLOSE 
       Exit
       
     ; Обработка событий контролов  
     Case GUI_EVENT_CTRL 
       Select GUIGetCtrl()
         Case hMsg
           MsgBox(48,"Example","Hello World!")
         Case hLink
           Sleep(1000) 
           ShellExecute("www.autoit-script.ru")
     EndSelect        
  
  EndSelect   
Wend

Func Msg(id, Title.s, Text.s)
    Result = MsgBox(id, Title.s, Text.s)
EndFunc

Для более лучшего понятия заключу в тэг AutoIt, уважаемые модераторы и
Администрация форума, понимаю что по правилам заключать в тег AutoIt'a
совершенно другой код - это нарушение, но это не для того чтобы нарушить,
а визуально показать различие.

Код:
IncludeFile "AutoItX.pb"

Declare Msg(id,Title.s, Text.s)
  
hForm = GUICreate("PureBasic + AutoIt", 500, 400)
hLink = GUICtrlCreateHyperLink("AutoIt Russian Community", 10, 10, 150, 20, $AD3428, 1)
hMsg  = GUICtrlCreateButton("Message", 160, 10, 80, 20,WS_EX_CONTROLPARENT)
hCombo = GUICtrlCreateCombo("AutoIt", 250, 10, 120, 20)
GUICtrlSetData(hCombo, -1, "PureBasic")
hInput = GUICtrlCreateInput("Example", 380, 10, 100, 20)

;FileRecycleEmpty() ; Очистка корзины
;MsgBox(48, "Example", Str(InternetConnected())) ; Проверка интернет соединения

Msg(48,"Example","Функция Msg() работает") 

While 1
  nMsg = GUIGetMsg()  
  Select nMsg
     Case GUI_EVENT_CLOSE 
       Exit
       
     ; Обработка событий контролов  
     Case GUI_EVENT_CTRL 
       Select GUIGetCtrl()
         Case hMsg
           MsgBox(48,"Example","Hello World!")
         Case hLink
           Sleep(1000) 
           ShellExecute("www.autoit-script.ru")
     EndSelect        
  
  EndSelect   
Wend

Func Msg(id, Title.s, Text.s)
    Result = MsgBox(id, Title.s, Text.s)
EndFunc
 

Arei

Скриптер
Сообщения
938
Репутация
115
Нужно,куда нам без многопоточности и dll.
 

nsgenn

Новичок
Сообщения
52
Репутация
1
Многопоточность это то что нужно! ;)
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Уже давно совмещаю AutoIt и PB, прекрасное дополнение функциональности к простоте :smile:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
_Lexa98_ [?]
Уже давно совмещаю AutoIt и PB, прекрасное дополнение функциональности к простоте

Я так подумал... легче транслятор написать AutoIt to PureBasic, но времени нет да и желания тоже.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Да, нужно, будем пользоваться.

Кстати, сам purebasic - суть транслятор бейсиковского кода в FASM, насколько помню.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Viktor1703
Использую AutoIt чаще чем c++ главным образом из-за скорости написания и дальнейшей читабельности/легкости массивных правок, чего не скажешь о запутанном c++.

Еще давно обнаружил Pure Basic - и до сих пор никак не решусь на него перейти, вроде настолько же простой как и AutoIt, так еще и компилируемый...

Поэтому с удовольствием воспользуюсь твоей работой.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
firex [?]
Еще давно обнаружил Pure Basic - и до сих пор никак не решусь на него перейти

Зря, зная Autoit - PureBasic освоишь быстро, но в PureBasic (далее PB) типизированные переменные, так же в PB можно "напрямую" вызывать API функции системы, т.е. если в AutoIt нужно использовать DllCall для того что бы вызвать например GetWindowText, то в PB нужно просто написать GetWindowText_(), так же в PB есть потоки, прототипы, макросы, ASM вставки, работа с LIB библиотеками, указатели на функции и переменные, совсем недавно появились пространства имён, но минус PB в том, что всё таки на AutoIt быстрее писать код, хотя это спорный вопрос.... компилируется под Windows, Linux и Mac OS X, я тоже сначала не решался переходить на PureBasic, но потом потихоньку начал писать на нём dll, с этого всё и началась.. совсем забыл, в PureBasic вроде говорили более 500 нативных функций, не уточнял.

P.S. Это не реклама, а кратчайшее описание возможностей языка, ни кому его не навязываю :IL_AutoIt_1:
 

sims

Осваивающий
Сообщения
184
Репутация
24
Viktor1703 [?]
типизированные переменные
Это только плюс. Меньше памяти необходимо, быстрее работает и точно знаешь каков будет результат.

но минус PB в том, что всё таки на AutoIt быстрее писать код
Смотря какой код. Если автоматизация, то согласен, но в других случаях все может быть наоборот. Причем это касается не только AutoIt - PB, но и AutoIt - другие ЯП.

в PureBasic вроде говорили более 500 нативных функций
Вроде их в три раза больше. На официальном сайте написано.
Huge set of internal commands (1400+) to quickly and easily build any application or game
что в переводе на наш язык.
Большое количество встроенных команд (1400+), для быстрого и легкого создания любого приложения или игры.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
sims [?]
Это только плюс. Меньше памяти необходимо, быстрее работает и точно знаешь каков будет результат.

Я не говорил что это минус :smile:

Смотря какой код. Если автоматизация, то согласен, но в других случаях все может быть наоборот. Причем это касается не только AutoIt - PB, но и AutoIt - другие ЯП.

Согласен

Вроде их в три раза больше. На официальном сайте написано.

Ну я этим не интересовался, в любом случае 1400+ - это ещё лучше :smile:
 

Mur

Осваивающий
Сообщения
132
Репутация
32
OffTopic:
Если кто будет искать, но не жаждет покупать, то на рутрекере сладкая раздача с теорией и практикой, последнее особенно порадовало.
(версии 5.1)

Нужно ли это кому нибудь, будут ли этим пользоваться?
Нужно.
 

MaximK

Знающий
Сообщения
33
Репутация
5
У PB есть один большой минус - он платный. Тогда лучше переходить на VB.NET (c#)
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Для меня главный недостаток PureBasic - очень слабая поддержка регулярных выражений. Например, регексы не поддерживают обратных ссылок (backreferences). А это примерно как автомобиль без руля. То есть колеса крутятся, вперед и назад он ездить может, но реально пользоваться им невозможно. По крайней мере, это было в версии 5.10, когда смотрел PB.
http://autoit-script.ru/index.php?topic=3788.0;

То есть для серьезной работы с текстом PureBasic не годится или придется дополнительно прикручивать к нему PCRE и сторонние врапперы. В других языках (AutoIt, c#, Python, я не говорю уже о Perl) регексы сразу работают нормально из коробки.

За исключением регексов PB мне показался довольно интересным.
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Тут не было упомянуто про поддержку DirectX и удобной системы отрисовки спрайтов Sprite/Sprite3D. Так же в него встроен 3D движок OGRE. И что еще для меня удобно, так это работа с COM-потрами без сторонних библиотек через встроенные функции :smile:

Большой минус для меня - это серьезные проблемы с кодировкой, даже включение при компиляции функции "Создать unicode приложение" иногда не помогает, и программа не видит русских символов, а бывает и крашится или просто зависает :-\
 

sims

Осваивающий
Сообщения
184
Репутация
24
MaximK [?]
У PB есть один большой минус - он платный.
Винда, офис и другие программы тоже платные, но это мало кого останавливает?


Тогда лучше переходить на VB.NET (c#)
Смотря какие задачи нужно решать. Например dll на PB проще прикрутить к AutoIt чем на VB.NET или C#. Низкоуровневая работа используя PB по ряду причин обычно проще чем на VB.NET или C#.
Зависимость от .NET Framework не всегда приемлема.

_Lexa98_ [?]
Большой минус для меня - это серьезные проблемы с кодировкой, даже включение при компиляции функции "Создать unicode приложение"
Таких проблем не замечал. Возможно есть ошибки в коде. Надеюсь исходник сохранен в UTF8?

программа не видит русских символов
На русифицированый винде для этого поддержка юникода не нужна. Видимо действительно что-то не так с кодом или настройками.

бывает и крашится или просто зависает
Это явно указывает на ошибки в коде.
Если это происходит в скомпилированной проге, то стоит включить OnError и тогда программа сообщит в какой строке произошла ошибка и какова ее причина.
 

MaximK

Знающий
Сообщения
33
Репутация
5
Платность Пурика не проблема, но обновления ждать приходится долго (я про 5.21 которого нигде нет). И если он изначально кажется простым языком, то когда начинаешь писать более сложные вещи он становиться сложнее С.
 
Верх