Автор: Сергей Чубченко. Дата публикации: 31.07.2005
Введение
Не знаю, в курсе Вы или нет, но пару лет назад мной был разработан довольно интересный скриптовый язык программирования, умеющий создавать нормальные Win32 приложения. О степени поддержки возможностей современных языков и оптимизированности спорить конечно бессмысленно, но когда нужно на скорую руку написать Autorun менюшку на диск или любую другую несложную программу, то данный язык может сильно пригодиться. Я не буду описывать все возможности языка - на то есть хелп. Моя цель - научить Вас на нем писать разного рода продукты. Поэтому учиться начнем на конкретных примерах. Приступим.
Autorun меню за считанные минуты
Для начала откройте GPScript и в меню "Формы" выберите пункт меню "Редактор Форм". В появившемся окне мы будем создавать интерфейс для нашего Autorun’а. В левом верхнем углу формы, прямо под меню расположена панель компонентов, которые можно разместить на форме. Их выбор не велик, но этого вполне хватит для реализации несложных задач.
Первый компонент - "Кнопка" представляет собой графическую кнопку, а также может использоваться как обычный PictureBox. Щелкните по нему. В появившемся окне выберите графический объект. Для примера возьмем файл Exit1.jpg из папки Buttons (эта папка находится в папке с GPScript’ом). Чуть ниже списка компонентов есть список свойств. У кнопки всего одно важное свойство "Стиль". Оно определяет, будет ли картинка статичной, или выполняет роль кнопки.
Второй компонент - "WinКнопка" представляет собой обычную виндовую кнопку, стандартную для всех приложений. Добавим ка на форму пару таких кнопок и разместим объекты где необходимо! Забыл сказать, если потребуется изменять размеры контролов - нуджно всего лишь подвести курсор к правому нижнему краю контрола или формы, зажать Alt на клавиатуре и ресайзить выделенный контрол.
Третий компонент - "Текст" может использоваться как поле для ввода текста или как лейбл. Все зависит от свойства "Стиль". Этот контрол мы используем в качестве лейбла вверху нашего Autorun меню.
Вот что у меня получилось:
Теперь можно сохранить шаблон формы через меню "Файл" -> "Сохранить". Это потребуется, если Вы впоследствии решите что нибудь изменить в форме используя визуальных редактор, а не копаясь в малопонятном коде. Кстати, чтобы форму добавить в свой код ее нужно перевести на язык GPScript, для этого служит меню "Компиляция". В нем два пункта. "With attach" означает что картинки из кнопок будут храниться внутри EXE файла, а не подгружаться из выбранной папки. Теперь когда мы разобрались с принципом создания формы скомпилим нашу форму With attach и скопируем скомпиленный скрипт из окна в правом нижнем углу редактора форм в самое начало нашего кода в главном окне GPScript. Как видите, там уже есть заготовки для обработчиков кнопок - они должны быть в конце скрипта, после скрипта загрузки формы. Вот код, который получился у меня:
Генератор тут немного накосячил. Перепутал параметры в функции "записать"... таких глюков в автогенераторах полно и я их не в силах исправитить, так как уже нет у меня исходников GPScript’а, Потому если возникает глюк - нужно лезть в хелп и смотреть как правильно. Хелп всегда прав :) Короче меняем:
на
Этот косяк не единственный. Генератор еще для красоты перед строчкой:
поставил два пробела, что недопустимо для директив компилятора, поэтому эти два пробела нужно убрать. Также, так как это директива компилятора, то если программу не откомпилировать - она работать как надо не будет, потому не торопитесь жать F5 (Запуск программы), а нажмите Shift+F5, введите имя создаваемой программы и после успешного создания EXE файла можете попробовать его запустить - все должно работать как надо. Теперь напишем обработчики для кнопок:
Вот и все. Быстро, правда?
Тест защиты на GPScript’е
Чтобы усвоить материал предлагаю познакомиться с моим шестым сэмплом защиты. Он написан именно на GPScript’е:
Обратите внимание, перед метками также нельзя ставить пробелов. Метки и имена переменных чувствительны к регистру.
Visual Basic и ассемблерные вставки
Да, GPScript и на такое способен. Можете смело писать в коде так:
Только чтобы это скомпилировать псевдокомпиляция не поможет - нужно выбирать в меню "Программа" пункт "Компиляция" и заранее в опциях указать путь к Visual Basic 6.0, установленному у Вас на компьютере. Без него VB код скомпилировать не получится. Кстати вы можете юзать переменные GPScript’а в VB вставках и наоборот. Лучшим примером будет программа, написанная ShackS’ом. Эта прога рисует на форме фигуры лиссажу:
Теперь пара слов об ассемблерных вставках. Их юзать можно например так:
Встраиваем звук в программу
И наконец надо рассказать как встроить музыку в программу и проиграть ее при запуске. Помните директиву компилятора "#", которая в программу вставляет файл, путь к которому передается после символа "#"? Тем же методом приаттачивается музыка в формате wav (если бы сохранился исходный код GPScript’а - сделал бы поддержку и других, более современных форматов), затем при запуске программы сохраняем музыкальный файл в Temp папку и можно воспроизводить вызовом функции:
Вот мы и разобрались с некоторой частью возможностей GPScript’а. Если есть вопросы - загляните в справку, она очень подробно расписывает все возможности языка GScript.
Разрабатываем программы на GPScript'е
Введение
Не знаю, в курсе Вы или нет, но пару лет назад мной был разработан довольно интересный скриптовый язык программирования, умеющий создавать нормальные Win32 приложения. О степени поддержки возможностей современных языков и оптимизированности спорить конечно бессмысленно, но когда нужно на скорую руку написать Autorun менюшку на диск или любую другую несложную программу, то данный язык может сильно пригодиться. Я не буду описывать все возможности языка - на то есть хелп. Моя цель - научить Вас на нем писать разного рода продукты. Поэтому учиться начнем на конкретных примерах. Приступим.
Autorun меню за считанные минуты
Для начала откройте GPScript и в меню "Формы" выберите пункт меню "Редактор Форм". В появившемся окне мы будем создавать интерфейс для нашего Autorun’а. В левом верхнем углу формы, прямо под меню расположена панель компонентов, которые можно разместить на форме. Их выбор не велик, но этого вполне хватит для реализации несложных задач.
Первый компонент - "Кнопка" представляет собой графическую кнопку, а также может использоваться как обычный PictureBox. Щелкните по нему. В появившемся окне выберите графический объект. Для примера возьмем файл Exit1.jpg из папки Buttons (эта папка находится в папке с GPScript’ом). Чуть ниже списка компонентов есть список свойств. У кнопки всего одно важное свойство "Стиль". Оно определяет, будет ли картинка статичной, или выполняет роль кнопки.
Второй компонент - "WinКнопка" представляет собой обычную виндовую кнопку, стандартную для всех приложений. Добавим ка на форму пару таких кнопок и разместим объекты где необходимо! Забыл сказать, если потребуется изменять размеры контролов - нуджно всего лишь подвести курсор к правому нижнему краю контрола или формы, зажать Alt на клавиатуре и ресайзить выделенный контрол.
Третий компонент - "Текст" может использоваться как поле для ввода текста или как лейбл. Все зависит от свойства "Стиль". Этот контрол мы используем в качестве лейбла вверху нашего Autorun меню.
Вот что у меня получилось:
Теперь можно сохранить шаблон формы через меню "Файл" -> "Сохранить". Это потребуется, если Вы впоследствии решите что нибудь изменить в форме используя визуальных редактор, а не копаясь в малопонятном коде. Кстати, чтобы форму добавить в свой код ее нужно перевести на язык GPScript, для этого служит меню "Компиляция". В нем два пункта. "With attach" означает что картинки из кнопок будут храниться внутри EXE файла, а не подгружаться из выбранной папки. Теперь когда мы разобрались с принципом создания формы скомпилим нашу форму With attach и скопируем скомпиленный скрипт из окна в правом нижнем углу редактора форм в самое начало нашего кода в главном окне GPScript. Как видите, там уже есть заготовки для обработчиков кнопок - они должны быть в конце скрипта, после скрипта загрузки формы. Вот код, который получился у меня:
;Загрузка формы
Объект.загрузить Форма
Объект.размер Форма, 3000, 480, 2300, 3405
Объект.цвет Форма, -2147483630, -2147483633
Объект.стиль Форма, 1
Объект.текст Форма, Autorun Menu
;Загрузка Кнопки 1
Объект.загрузить Кнопка1
Объект.размер Кнопка1, 690, 1215, 465, 1980
Объект.стиль Кнопка1, 0
#C:\gpch\GPScript\Buttons\Exit1.jpg
аттач C:\gpch\GPScript\Buttons\Exit1.jpg, Tmp_Button1_jpg
удалить @Temp@Кнопка1.jpg
записать @Tmp_Button1_jpg@, @Temp@Кнопка1.jpg
Объект.рисунок Кнопка1, @Temp@Кнопка1.jpg
удалить @Temp@Кнопка1.jpg
;Загрузка Текстового поля 1
Объект.загрузить Текст1
Объект.размер Текст1, 390, 180, 345, 2385
Объект.цвет Текст1, -2147483640, -2147483633
Объект.текст Текст1, Крутой Autorun
Объект.стиль Текст1, 0
Объект.шрифт Текст1, MS Sans Serif, 8,25
;Загрузка Win Кнопки 1
Объект.загрузить WinКнопка1
Объект.размер WinКнопка1, 225, 660, 375, 1050
Объект.цвет WinКнопка1, , -2147483633
Объект.текст WinКнопка1, Product
Объект.шрифт WinКнопка1, MS Sans Serif, 8,25
;Загрузка Win Кнопки 2
Объект.загрузить WinКнопка2
Объект.размер WinКнопка2, 1995, 645, 375, 1050
Объект.цвет WinКнопка2, , -2147483633
Объект.текст WinКнопка2, Web Site
Объект.шрифт WinКнопка2, MS Sans Serif, 8,25
;Сделать все объекты видимыми
Объект.показать Форма
Объект.показать Кнопка1
Объект.показать Текст1
Объект.показать WinКнопка1
Объект.показать WinКнопка2
Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
;Конец вашего кода WinКнопка1
Конец_Процедура_WinКнопка_1
Процедура_Кнопка_1
;Начало вашего кода
;Конец вашего кода
Конец_Процедура_Кнопка_1
Процедура_WinКнопка_2
;Начало вашего кода WinКнопка2
;Конец вашего кода WinКнопка2
Конец_Процедура_WinКнопка_2
Генератор тут немного накосячил. Перепутал параметры в функции "записать"... таких глюков в автогенераторах полно и я их не в силах исправитить, так как уже нет у меня исходников GPScript’а, Потому если возникает глюк - нужно лезть в хелп и смотреть как правильно. Хелп всегда прав :) Короче меняем:
записать @Tmp_Button1_jpg@, @Temp@Кнопка1.jpg
на
записать @Temp@Кнопка1.jpg, @Tmp_Button1_jpg@
Этот косяк не единственный. Генератор еще для красоты перед строчкой:
#C:\gpch\GPScript\Buttons\Exit1.jpg
поставил два пробела, что недопустимо для директив компилятора, поэтому эти два пробела нужно убрать. Также, так как это директива компилятора, то если программу не откомпилировать - она работать как надо не будет, потому не торопитесь жать F5 (Запуск программы), а нажмите Shift+F5, введите имя создаваемой программы и после успешного создания EXE файла можете попробовать его запустить - все должно работать как надо. Теперь напишем обработчики для кнопок:
Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
запустить @Current@Product\Setup.exe
;Конец вашего кода WinКнопка1
Конец_Процедура_WinКнопка_1
Процедура_Кнопка_1
;Начало вашего кода
завершить
;Конец вашего кода
Конец_Процедура_Кнопка_1
Процедура_WinКнопка_2
;Начало вашего кода WinКнопка2
запустить explorer http://www.dotfix.net
;Конец вашего кода WinКнопка2
Конец_Процедура_WinКнопка_2
Вот и все. Быстро, правда?
Тест защиты на GPScript’е
Чтобы усвоить материал предлагаю познакомиться с моим шестым сэмплом защиты. Он написан именно на GPScript’е:
;Загрузка Формы
Объект.загрузить Форма
Объект.размер Форма, 3000, 480, 3035, 4425
Объект.цвет Форма, -2147483630, -2147483633
Объект.стиль Форма, 1
Объект.текст Форма, Test Protection 6 by DotFix Software
;Загрузка Текстового поля 1
Объект.загрузить Текст1
Объект.размер Текст1, 465, 210, 705, 3405
Объект.цвет Текст1, -2147483640, -2147483633
Объект.текст Текст1, To register please pay $9 for the license. Protected by DotFix Software. Protectors is not used!
Объект.стиль Текст1, 0
Объект.шрифт Текст1, MS Sans Serif, 8,25
;Загрузка Текстового поля 2
Объект.загрузить Текст2
Объект.размер Текст2, 225, 1185, 285, 1650
Объект.цвет Текст2, -2147483640, -2147483633
Объект.текст Текст2, User name:
Объект.стиль Текст2, 0
Объект.шрифт Текст2, MS Sans Serif, 8,25
;Загрузка Текстового поля 3
Объект.загрузить Текст3
Объект.размер Текст3, 240, 1635, 285, 1650
Объект.цвет Текст3, -2147483640, -2147483633
Объект.текст Текст3, Password:
Объект.стиль Текст3, 0
Объект.шрифт Текст3, MS Sans Serif, 8,25
;Загрузка Текстового поля 4
Объект.загрузить Текст4
Объект.размер Текст4, 1950, 1110, 285, 1650
Объект.цвет Текст4, -2147483640, -2147483643
Объект.текст Текст4,
Объект.стиль Текст4, 1
Объект.шрифт Текст4, MS Sans Serif, 8,25
;Загрузка Текстового поля 5
Объект.загрузить Текст5
Объект.размер Текст5, 1950, 1545, 285, 1650
Объект.цвет Текст5, -2147483640, -2147483643
Объект.текст Текст5,
Объект.стиль Текст5, 1
Объект.шрифт Текст5, MS Sans Serif, 8,25
;Загрузка Win Кнопки 1
Объект.загрузить WinКнопка1
Объект.размер WinКнопка1, 360, 2010, 330, 1455
Объект.цвет WinКнопка1, , -2147483633
Объект.текст WinКнопка1, Register
Объект.шрифт WinКнопка1, MS Sans Serif, 8,25
;Загрузка Win Кнопки 2
Объект.загрузить WinКнопка2
Объект.размер WinКнопка2, 2505, 2010, 330, 1455
Объект.цвет WinКнопка2, , -2147483633
Объект.текст WinКнопка2, Exit
Объект.шрифт WinКнопка2, MS Sans Serif, 8,25
;Сделать все объекты видимыми
Объект.показать Форма
Объект.показать Текст1
Объект.показать Текст2
Объект.показать Текст3
Объект.показать Текст4
Объект.показать Текст5
Объект.показать WinКнопка1
Объект.показать WinКнопка2
Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
переменная 10,ецеикс
переменная @Форма.Текст4.Caption@,имя
объединить @имя@@имя@,@имя@@имя@,имя
длина @имя@,длина
перейти ошибка, если длина < 1
Метка ключ_a
выдернуть @имя@,@ецеикс@,1,байт
код @байт@,число
сложить @число@,@ецеикс@,число
символ @число@,байт
объединить @пасс@,@байт@,пасс
вычесть @ецеикс@,1,ецеикс
перейти ключ_a, если ецеикс > 0
перейти всеок, если Форма.Текст5.Caption = @пасс@
;обнуляем переменные
переменная ,пасс
переменная ,байт
переменная ,число
переменная ,ецеикс
перейти парольневерный
перейти выход
Метка ошибка
мессага Слишком маленькое имя пользователя@CrLf@Введите имя пользователя еще раз,64,Регистрация
перейти выход
Метка всеок
мессага Регистрация пройдена!,64,Регистрация
перейти выход
Метка парольневерный
мессага Вы ввели неверный пароль!,16,Регистрация
перейти выход
Метка выход
;Конец вашего кода WinКнопка1
Конец_Процедура_WinКнопка_1
Процедура_WinКнопка_2
;Начало вашего кода WinКнопка2
завершить
;Конец вашего кода WinКнопка2
Конец_Процедура_WinКнопка_2
Обратите внимание, перед метками также нельзя ставить пробелов. Метки и имена переменных чувствительны к регистру.
Visual Basic и ассемблерные вставки
Да, GPScript и на такое способен. Можете смело писать в коде так:
vb
msgbox "Test"
end_vb
Только чтобы это скомпилировать псевдокомпиляция не поможет - нужно выбирать в меню "Программа" пункт "Компиляция" и заранее в опциях указать путь к Visual Basic 6.0, установленному у Вас на компьютере. Без него VB код скомпилировать не получится. Кстати вы можете юзать переменные GPScript’а в VB вставках и наоборот. Лучшим примером будет программа, написанная ShackS’ом. Эта прога рисует на форме фигуры лиссажу:
;Загрузка Формы
Объект.загрузить Форма
Объект.размер Форма, 3000, 480, 5090, 6585
Объект.цвет Форма, -2147483630, -2147483633
Объект.стиль Форма, 1
Объект.текст Форма, Лиссажу
;Загрузка Win Кнопки 1
Объект.загрузить WinКнопка1
Объект.размер WinКнопка1, 2280, 3990, 375, 2055
Объект.цвет WinКнопка1, , -2147483633
Объект.текст WinКнопка1, Начать
Объект.шрифт WinКнопка1, MS Sans Serif, 8,25
;Сделать все объекты видимыми
Объект.показать Форма
Объект.показать WinКнопка1
Процедура_WinКнопка_1
;Начало вашего кода WinКнопка1
vb
w1=2*3.1415926536*1500
w=2*3.1415926536*1000
f=0
f1=0
u=1500
u1=1500
do
’Форма.cls
for t=0 to 360 step 0.5
doevents
x=u*sin(((w*t)+f)*3.1415926536/180)
y=u1*sin(((w1*t)+f1)*3.1415926536/180)
y1=u1*sin(((w1*t)+f1-1)*3.1415926536/180)
Форма.pset(3247-x,1995+y1),-2147483633
Форма.pset(3247-x,1995+y),12345678
next
f1=f1+1
if f1>360 then f1=0
loop
end_vb
;Конец вашего кода WinКнопка1
Теперь пара слов об ассемблерных вставках. Их юзать можно например так:
<
jmp down
ret
down:
mov ah,9
mov dx,offset coolest
int 21h
loop down
jmp down
mov ax,4c00h
int 21h
end start
C:\Program Files\GPScript\cool.asm >
!run Asm\Tasm.exe cool.asm cool.obj
!kill C:\Program Files\GPScript\cool.asm
!run Asm\tlink.exe /x cool.obj
!kill C:\Program Files\GPScript\cool.obj
#C:\Program Files\GPScript\cool.exe#
аттач C:\Program Files\GPScript\cool.exe,f1
удалить @Temp@cool.exe
записать @Temp@cool.exe,@f1@
запустить @Temp@cool.exe
завершить
Встраиваем звук в программу
И наконец надо рассказать как встроить музыку в программу и проиграть ее при запуске. Помните директиву компилятора "#", которая в программу вставляет файл, путь к которому передается после символа "#"? Тем же методом приаттачивается музыка в формате wav (если бы сохранился исходный код GPScript’а - сделал бы поддержку и других, более современных форматов), затем при запуске программы сохраняем музыкальный файл в Temp папку и можно воспроизводить вызовом функции:
воспроизвести <полный путь к WAV файлу>
Вот мы и разобрались с некоторой частью возможностей GPScript’а. Если есть вопросы - загляните в справку, она очень подробно расписывает все возможности языка GScript.
Комментарии |
Добавил: GPcH Дата: 01.08.2005 Пример работы с консолью: Метка Старт консоль.загрузить FTN консоль.цвет 3,0 ;Начало вашего кода консоль.напечатать Введите адрес вашего узла@CrLf@ консоль.цвет 15,0 консоль.считать Node консоль.цвет 3,0 консоль.напечатать Введите пароль@CrLf@ консоль.цвет 15,0 консоль.считать Password консоль.цвет 3,0 консоль.напечатать Все данные сохранены в файле @Current@FTN_TEST.TXT@CrLf@ ini.записать FTN,Node,@Node@,@Current@FTN_TEST.TXT ini.записать FTN,Password,@Password@,@Current@FTN_TEST.TXT консоль.цвет 15,0 консоль.считать ok ;Конец вашего кода консоль.выгрузить Завершить |
Добавил: programmist Дата: 02.12.2007 GPSskript - отличный язык программирования. Сейчас я разрабатываю лдополнения к нему. Те, кто хотят делять это со мной присоединяйтесь! |
Добавил: programmist Дата: 02.12.2007 GPSskript - отличный язык программирования. Сейчас я разрабатываю лдополнения к нему. Те, кто хотят делять это со мной присоединяйтесь! мой адрес: power_2007_pro@mail.ru |
Добавил: programmist Дата: 02.12.2007 Пример программы "Калькулятор" ;Загрузка Формы Объект.загрузить Форма Объект.размер Форма, 3000, 480, 1395, 2190 Объект.цвет Форма, -2147483630, -2147483633 Объект.стиль Форма, 4 Объект.текст Форма, калькулятор ;Загрузка Win Кнопки 1 Объект.загрузить WinКнопка1 Объект.размер WinКнопка1, 30, 30, 275, 1000 Объект.цвет WinКнопка1, , -2147483633 Объект.текст WinКнопка1, сложить Объект.шрифт WinКнопка1, MS Sans Serif, 8,25 ;Загрузка Win Кнопки 2 Объект.загрузить WinКнопка2 Объект.размер WinКнопка2, 30, 330, 275, 1000 Объект.цвет WinКнопка2, , -2147483633 Объект.текст WinКнопка2, вычесть Объект.шрифт WinКнопка2, MS Sans Serif, 8,25 ;Загрузка Win Кнопки 3 Объект.загрузить WinКнопка3 Объект.размер WinКнопка3, 1065, 30, 275, 1000 Объект.цвет WinКнопка3, , -2147483633 Объект.текст WinКнопка3, умножить Объект.шрифт WinКнопка3, MS Sans Serif, 8,25 ;Загрузка Win Кнопки 4 Объект.загрузить WinКнопка4 Объект.размер WinКнопка4, 1065, 330, 275, 1000 Объект.цвет WinКнопка4, , -2147483633 Объект.текст WinКнопка4, разделить Объект.шрифт WinКнопка4, MS Sans Serif, 8,25 ;Сделать все объекты видимыми Объект.показать Форма Объект.показать WinКнопка1 Объект.показать WinКнопка2 Объект.показать WinКнопка3 Объект.показать WinКнопка4 Процедура_WinКнопка_1 ;Начало вашего кода WinКнопка1 ;Сложение начало терминал введите первое число, число1 терминал введите второе число, число2 сложить @число1@, @число2@, результат сообщение результат сложения: @результат@ ;Сложение конец ;Конец вашего кода WinКнопка1 Конец_Процедура_WinКнопка_1 Процедура_WinКнопка_2 ;Начало вашего кода WinКнопка2 терминал введите первое число, число1 терминал введите второе число, число2 вычесть @число1@, @число2@, результат сообщение результат вычитания: @результат@ ;Конец вашего кода WinКнопка2 Конец_Процедура_WinКнопка_2 Процедура_WinКнопка_3 ;Начало вашего кода WinКнопка3 терминал введите первое число, число1 терминал введите второе число, число2 умножить @число1@, @число2@, результат сообщение результат умножения: @результат@ ;Конец вашего кода WinКнопка3 Конец_Процедура_WinКнопка_3 Процедура_WinКнопка_4 ;Начало вашего кода WinКнопка4 терминал введите первое число, число1 терминал введите второе число, число2 разделить @число1@, @число2@, результат сообщение результат деления: @результат@ ;Конец вашего кода WinКнопка4 Конец_Процедура_WinКнопка_4 |
Добавление комментария |