Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Операционные системы > Софт
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 07.07.2009, 03:07   #1
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Подмигивание Аналог ACTool

Доброго времени суток !

По некоторой необходимости и для приобретения опыта я решил сделать программу аналог ACTool - автокликера.

Данной программы у меня нету , лиш видел её на скринах видео.
По описаниям на форумах понял что она"умеет делать".

Сделать свой ACTool не составит никакого труда , но я хочу сделать более продвинутую программу.
Среди возможностей этой программы:
Клик мышкой
Нажатие клавиши
Установка мышки в нужную позицию
Задержа между действиями
создание циклов

То что я хочу реализовать:
Полная имитация мышки и клавиатуры :
Нажатие/отпускание любой клавиши
Изменение раскладки на РУс/ENG
Клик/Нажатие/отпускание Любой из 3х кнопок мыши
Установка/движение из точки А в точку Б мышки ( в нажатом или отпущенном состоянии)
Создание переменных и работа с ними (переменные для расчётов)

Пример: В онлайн игре имеется персонаж , у него есть некий запас манны , допустим 1000. Действие которое производится в игре (благодаря программе) стоит 100 маны . Тоесть после 10 таких действий мана ту персонажа закончится - нам нужно предусмотреть это и подготовить бутылочку с манной/едой для него. Допустим бутылка добавит 500 манны - значит мы можем сделать ещё несколько действий.
Так же "манна" у персонажа может восстанавливатся с некоторой скоростью - и это нам тоже нужно предусмотреть )
Работа с окнами : Установка прозрачности/изменение размеров/изменение координат/сворачивание/установка активным/неактивным/Запретить закрытие/определение координат и размеров всё это с внесением в переменные
Установка переменных(ещё не уверен в необходимости) с помощью WM_SETTEXT.
Звуковое сопроводение некоторых действий стандартными звуками/указанием файла для воспроизведения.
Логические операторы , циклы.
Выключением компьютера после некоторых "результатов" с сохранением лога и скриншота проделанной работы.

Большинство всех этих операций выполняется простым парсингом ...
Примеры и опыт работы с ними - есть.
Но больше всего меня волнует реализация:
Переменных и работы с ними( +-*/() )
Логических операций(включающих в себя арифметические действия( (а+б) > в , round(г/д;+) < (з - е)

Для всего этого мне предстоит написать парсер , наверно будет правильным назвать всю эту затею "интерпретатором" Скрипты будет понимать естественно только моя программа , и выполнять их тоже будет она (либо после записи скрипта экспорт его в exe файл).

Подскажите примерное развитие данной затеи ( как организовать циклы , как работать с вложенными арифметическими действиями ? (а+б)/(в*г)-д )

Такая программа будет полезна не только в играх , но и в других областях. Например можно будет написать скрипт для "клика по баннерам" для заработка. Уйдёш на работу/по делам , а скрипт сам всё делает , и ведёт отчёт)

Благодарю всех откликнувшихся !!!
Lime вне форума Ответить с цитированием
Старый 07.07.2009, 07:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
Пример:
Я обычно такие "Примеры" колю в ОллиДебугере, и убераю именьшенния "манны" ))
Цитата:
Для всего этого мне предстоит написать парсер
Ну ввобщето эвалюаторы и интерпретаторы уже обсуждались, но говоря о том что можно тупо поднапрячь компилятор тот или инной, и писать "скрипты" на Делфи или Си.


В принципе затея хорошая. Много опыта даст.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.07.2009, 10:01   #3
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

Такие проги уже есть, причем предназначены они для других целей, и стоят немалые деньги. Human Emulator, например.
Viteef вне форума Ответить с цитированием
Старый 07.07.2009, 11:03   #4
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Радость

Цитата:
Сообщение от Viteef Посмотреть сообщение
Такие проги уже есть, причем предназначены они для других целей, и стоят немалые деньги. Human Emulator, например.
Сейчас по необходимости опять-же сделал то что мне нужно в делфи. Это хорошо , я дома компилятор под рукой , цели однообразные , немного полей настроек , и пользуюсь
А в других ситуациях ?
И не только мне ?

Но прежде чем начать работу нужно хорошенько всё обдумать) Хотябы иметь представление о кусках этой программы и принципах работы.
И как я уже написал , со всем есть опыт работы кроме таких важных частей как :
Переменных и работы с ними( +-*/() )
Логических операций(включающих в себя арифметические действия( (а+б) > в , round(г/д;+) < (з - е)


Вот их я и хотел бы обсудить) А точнее услышать Ваши советы)

Например скрипт будет выглядет таким образом

if ((a+b)>c)
{
SetCursor 89,115;
LeftDown;
SetCursor (89+50),(115+50);
LeftUp;
}

Работа программы предполагается с переменными 3х типов : Integer , String & Boolean.

Цитата:
Я обычно такие "Примеры" колю в ОллиДебугере, и убераю именьшенния "манны" ))
Это не основное назначение программы , но наиюолее подходящее по будущим возможностям( я о примере)
Да и онлайн игры( для которых тренеров не напишеш , тк они сверяют всё с сервером) не так просто обмануть или взломать. Гораздо легче автоматизировать какой-то легальный в игре процесс.
Я например "зарабатываю деньги" в онлайн игре пока сплю , и не финансовыми возможностями игры - а с помощью имитаций мох действий программой.
Правда это так , месячное увлечение )

Последний раз редактировалось Lime; 07.07.2009 в 11:11.
Lime вне форума Ответить с цитированием
Старый 07.07.2009, 23:52   #5
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Цитата:
if ((a+b)>c)
{
SetCursor 89,115;
LeftDown;
SetCursor (89+50),(115+50);
LeftUp;
}
Мои мысли такие...
Во первых ((a+b)>c) слишком сложное выражение(особенно для начала), скрипт нужно делать похожим на асм(моё мнение) - одна строка - одна операция.
Твой скрипт превратиться во что-то вроде этого
Код:
0001 add a b a; первые две буквы - слогаемые. сохранение в третью букву - "a"
0002 > a c 0010 ; типа проверка и если неправда - переход на 0010
0004 SetCursor 89,115 ;вызов функции
Что-бы работать с переменными можно просто объявить например iA,iB,iC ... и т.д. И разрешить в скрипте только такие имена целочисленных переменных. Аналогично со строками и булями.

Возможно есть более лучшии способы, но я думаю именно так.
Lime если хочешь пиши в личку, распишу подробнее или помогу с реализацией.

Последний раз редактировалось Виталий Серов; 07.07.2009 в 23:54.
Виталий Серов вне форума Ответить с цитированием
Старый 08.07.2009, 00:07   #6
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Виталий Серов Посмотреть сообщение
Мои мысли такие...
Во первых ((a+b)>c) слишком сложное выражение(особенно для начала), скрипт нужно делать похожим на асм(моё мнение) - одна строка - одна операция.
Твой скрипт превратиться во что-то вроде этого
Код:
0001 add a b a; первые две буквы - слогаемые. сохранение в третью букву - "a"
0002 > a c 0010 ; типа проверка и если неправда - переход на 0010
0004 SetCursor 89,115 ;вызов функции
Что-бы работать с переменными можно просто объявить например iA,iB,iC ... и т.д. И разрешить в скрипте только такие имена целочисленных переменных. Аналогично со строками и булями.

Возможно есть более лучшии способы, но я думаю именно так.
Lime если хочешь пиши в личку, распишу подробнее или помогу с реализацией.
Мои мысли о вышенаписанном :
Да , выражение слишком сложное , но если для каждого простого действия булет одна строка - это будет нудно и не продуктивно.

На счёт мат формул я думаю , нужно сделать рекурсию. Если её сделать достойно то с мат формулами ( приоритетом операций -*/+() ) не будет сложностей

Переменные : Обьявлять думаю как в php - $a $b $manna $hp.
Вопрос немного в другом , в динамическом обьявлении , например в циклах.
Доредактирую : Как мысль - до запуска "скрипта" пересчитать кол-во переменных(+ циклы) создать из и сделать соответствие
Хотя это вариант влоб(
Я например без лишних угрызений совести заставлю цикл выполнится 10 000 раз. А как быть с while ? ...
Хотя возможно ограничить пользователя обьявлением всех переменных в начале скрипта , запретив в других частях скрипта

Вместо перехода на ( в примере на 0010 строку) намного легче сделать лэйблы
:st1
//
//
//
if ($a > $b) goto st1;

C вызовом функций вообще просто) Учитывая что в параметры могут идти выражения , а с их ращётом мы "уже" определились остаётся только парсить)

1 полуголова хорошо , а 1,5 лучше) Если есть время и желание можно обсудить в ICQ

Последний раз редактировалось Lime; 08.07.2009 в 00:13.
Lime вне форума Ответить с цитированием
Старый 08.07.2009, 00:16   #7
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Цитата:
Да , выражение слишком сложное , но если для каждого простого действия булет одна строка - это будет нудно и не продуктивно.
Значит ассемблер жутко непродуктивная вещь.
Цитата:
На счёт мат формул я думаю , нужно сделать рекурсию. Если её сделать достойно то с мат формулами ( приоритетом операций -*/+() ) не будет сложностей
Будет сложней, но несамненно удобней.
Цитата:
Вместо перехода на ( в примере на 0010 строку) намного легче сделать лэйблы
Что-бы интерпритатор знал куда переходить ему придётся перечитывать весь фаил(хотя-бы однажды). Можно сделать лабел равный номеру строки - будет быстрее.
Что-бы во время набора скрипта было удобно надо будет сделать типа компилятора, тоторый превратит goto label в goto 0010

Последний раз редактировалось Виталий Серов; 08.07.2009 в 00:19.
Виталий Серов вне форума Ответить с цитированием
Старый 08.07.2009, 01:50   #8
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Виталий Серов Посмотреть сообщение
Значит ассемблер жутко непродуктивная вещь.

Будет сложней, но несамненно удобней.

Что-бы интерпритатор знал куда переходить ему придётся перечитывать весь фаил(хотя-бы однажды). Можно сделать лабел равный номеру строки - будет быстрее.
Что-бы во время набора скрипта было удобно надо будет сделать типа компилятора, тоторый превратит goto label в goto 0010
ассемблер тут непричем.
Людей с ним работающих и заядлых геймеров сравнивать не приходится.
"Нас" сложности не пугают Пишу ради опыта.
Весь "файл" обычно будет состоять не более 1000 строк. С моим стилем исполнения. Часто достаточно будет 10-15 строк.
Лейблы можно запихать в двумерный массив(название лейбла - строка№)(при старте скрипта) и далее по массиву шастать и искать.
Компилятор должен превратить goto label в работоспособную программу а не в кучу стрингов.

Ещё идеи ?
Lime вне форума Ответить с цитированием
Старый 09.07.2009, 15:17   #9
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Вот что я "промежуточно" решил
Переменные будут обьявлятся до запуска скрипта.
Хранится будут в 2мерном массиве по типу Имя;Значение .

В формулах вроде

$mana = $max_manna - ($spell_cost * 5);
Все переменные (кроме результатирующей , её просто не будет в формуле) будут заменены на значения.

$max_manna - ($spell_cost * 5); => 17568 - (2230 * 5);
Просчитыватся и далее уже присваивается)

На простое выражение +-*/ написал , в моей реализации выглядит так:
Код:
function ExtCalcClear(formula:string):extended;
var
i2:integer;
st:tstringlist;
begin
formula:=stringreplace(formula,' ','',[rfreplaceall]);
st:=tstringlist.Create;
formula:=stringreplace(formula,'+',#10+'+'+#10,[rfreplaceall]);
formula:=stringreplace(formula,'-',#10+'-'+#10,[rfreplaceall]);
formula:=stringreplace(formula,'*',#10+'*'+#10,[rfreplaceall]);
formula:=stringreplace(formula,'/',#10+'/'+#10,[rfreplaceall]);
st.Text := formula;
//showmessage(st.Text);
i2 := 1;
while i2 <= st.Count-2 do
begin
if st[i2] = '*' then
begin
st[i2-1] := FloatToStr(StrToFloat(st[i2-1])*StrToFloat(st[i2+1]));
st.Delete(i2);
st.Delete(i2);
//showmessage(st.Text);
end else
if st[i2] = '/' then
begin
st[i2-1] := FloatToStr(StrToFloat(st[i2-1])/StrToFloat(st[i2+1]));
st.Delete(i2);
st.Delete(i2);
//showmessage(st.Text);
end else i2 := i2+1;
end;
i2 := 1;
while i2 <= st.Count-2 do
begin
if st[i2] = '+' then
begin
st[i2-1] := FloatToStr(StrToFloat(st[i2-1])+StrToFloat(st[i2+1]));
st.Delete(i2);
st.Delete(i2);
//showmessage(st.Text);
end else
if st[i2] = '-' then
begin
st[i2-1] := FloatToStr(StrToFloat(st[i2-1])-StrToFloat(st[i2+1]));
st.Delete(i2);
st.Delete(i2);
//showmessage(st.Text);
end else i2 := i2+1;
end;
result:= strtofloat(st[0]);
end;
ПС: showmessage(st.Text); наглядно показывает как происходят действия)
Если что не так , подправьте меня)

С выражениями +-*/() Сейчас попробую сделать с рекурсией.

http://programmersforum.ru/showthread.php?t=57287 тут со скобками)

Остаётся обдумать принцип общего парсера , кроме формул ещё полно команд , наверно нужно в каждой строке искать название команды ...
Есть у каво идеи?)

Последний раз редактировалось Lime; 09.07.2009 в 19:21.
Lime вне форума Ответить с цитированием
Старый 09.07.2009, 22:32   #10
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Хорошо

Цитата:
По некоторой необходимости и для приобретения опыта я решил сделать программу аналог ACTool - автокликера.
С ACTool не знаком, но как раз начал делать что-то подобное (судя по описанию) с той же целью...

Но у меня не такие масштабы - просто знаний и времени может не хватить...

Цитата:
Установка мышки в нужную позицию
А я делаю не просто "установку", а плавное перемещение...
Со стороны выглядит будто кто-то курсор мышкой двигает... (на всякий случай)


Но вот может ли какая-нибудь программа-шпион узнать, что курсор двигается программой, а не пользователем?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аналог tree на C# (вывод содержимого каталогов) LepihinMS Общие вопросы .NET 8 22.03.2019 15:51
Аналог radmin DiME Работа с сетью в Delphi 8 28.04.2009 07:08
Аналог GetDC() Василий Win Api 3 14.01.2009 09:32
Аналог with на С++. Иллидан Общие вопросы C/C++ 1 16.05.2008 20:41


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS