Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Добавил возможность контролировать работу скрипта в перекрытом окне путем вывода нужных частей изображения перекрытого окна поверх всех окон.
visualwindow - выводит часть изображения выбранного окна поверх всех окон.
синтаксис:
visualwindow(0, 200, 250, 300, 320, 10, 10 , 100, w);
visualwindow(0, 200, 250, 300, 320, 10, 10 , 100, #Image_0[0][0]);
параметры:
1 - порядковый номер вывода изображения. от 0 до 1000.
2-5 - рамка захвата (клиентские координаты по указателю w)
6-7 - позиция вывода на экран изображения (экранные координаты)
8 - масштаб вывода
9 - указатель на окно или двухмерный массив int в котором хранится изображение или -1 если получаем снимок экрана
Так же можно указать дополнительно первый (не обязательный параметр) - указатель win какого либо диалогового окна куда мы хотим выводить изображение. В этом случае изображение будет выводиться не на экран, а на этот диалог. Можно указывать как свои не модальные диалоги, так и диалоги чужих программ.
Пример:
win aw=window (-1, "MozillaWindowClass", -1);//Получаем указатель на окно
visualwindow(aw, 0, 0, 0, 100, 100, 500, 150 , 100, -1);//Включаем вывод на этом окне
loop()sleep(10);
disablevisualwindow(0);
отключить вывод по порядковому номеру
enablevisualwindow(0);
включить отключенный вывод по порядковому номеру
Включить visualwindow достаточно один раз и он будет работать до завершения скрипта или до disablevisualwindow
пример простой лупы. тут visualwindow в цикле, поскольку меняются координаты..
CODE:int x, y;
a: getmouse(x, y);
visualwindow(0, x-20, y-20, x+20, y+20, 10, 10 , 800, -1);
sleep(10);
goto a;
Вот как выглядит вывод на экран части игры Дарк Орбит во время работы бота
Нажмите для увеличения
Вот видео работы. Выводится два участка игры, поэтому наблюдается мерцание:
http://youtu.be/AE9RJIaGGTE
=========================
Так же можно выводить на экран изображение хранящееся в двухмерном массиве int.
Этот массив можно заполнять программно (рисовать) или считывать с файла.
Вывод на экран изображения хранящегося в массиве Image_0
CODE:visualwindow(0, 0, 0, imagewidth(#Image_0[0][0]), imageheight(#Image_0[0][0]), 100, 120, 100, #Image_0[0][0]);
Пример создания не модального диалога и вывода на него изображения части экрана. Можно выводить с файла и окна.
CODE:int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];
pos_size_button0[0][0]=4; pos_size_button0[0][1]=110; pos_size_button0[0][2]=105; pos_size_button0[0][3]=20;
text_button0[0]="Закрыть";
//////////
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
//////////
showdialog(0, "Наш бот", 558, 234, 115, 170, 1, 1);
//////////
win aw=window("Наш бот");//Получаем указатель на наше окно
visualwindow(aw, 0, 0, 0, 100, 100, 5, 5 , 100, -1);//Включаем вывод на нашем окне
loop()
{
if (flag_button0[0]==1)
{
flag_button0[0]=0;
disablevisualwindow(0);
sleep(100);
destroydialog(0);
goto s;
}
sleep(10);//Убрать после теста
}
s:;
Внимание: Закрытие чужого диалога когда на него идет вывод может привести к ошибке.
Пример рисования линии на кнопке 5 в калькуляторе
CODE:int Image_0[34][27];
win w=window ("Калькулятор", "CalcFrame", -1);//Указатель на калькулятор
//Эти данные получили в шпионе
int RX=34, RY=27;//Размер кнопки 5
int X1=50, Y1=161;//Позиция кнопки 5 в окне калькулятора (левый верхний угол)
int X2=X1+RX, Y2=Y1+RY;//Позиция кнопки 5 в окне калькулятора (правый нижний угол)
pause (1000);
visualwindow(0, 0, 0, RX, RY, w.leftclient+X1, w.topclient+Y1, 100, #Image_0[0][0]);//включили вывод изображения Image_0 в месте кнопки на экране
loop()
{
screen (#Image_0[0][0], X1, Y1, X2, Y2, w);//Получили снимок кнопки 5 в окне калькулятора и записали в Image_0
for (int x=0; x<RX; x++) Image_0[x][RY/2]=255;//Закрасили рисунок кнопки в Image_0 горизонтальной линией по середине кнопки
sleep(10);
}
Пример вывода на экран изображения с файла
Цитата: int Image_0[300][200];
loadimage (#Image_0[0][0], "C:\Image_0.bmp");
//включили вывод всего изображения Image_0 в координатах 100, 120 экрана без сжатия
visualwindow(0, 0, 0, imagewidth(#Image_0[0][0]), imageheight(#Image_0[0][0]), 100, 120, 100, #Image_0[0][0]);
//включили вывод середины изображения Image_0 (50, 70, 250, 150) в координатах 100, 350 экрана сжав его на 50 процентов
visualwindow(1, 50, 70, 250, 150, 100, 350, 50, #Image_0[0][0]);//включили вывод изображения Image_0 в месте кнопки на экране
loop()sleep(10);
Анимация
Цитата: int a[2][100][100];
loadimage (#a[0][0][0], "C:\Users\Вова\Desktop\Image_0.bmp");
loadimage (#a[1][0][0], "C:\Users\Вова\Desktop\Image_1.bmp");
loop()
{
visualwindow (0, 0, 0, imagewidth(#a[0][0][0]), imageheight(#a[0][0][0]), 100, 120, 100 , #a[0][0][0]);
sleep(125);
visualwindow (0, 0, 0, imagewidth(#a[1][0][0]), imageheight(#a[1][0][0]), 100, 120, 100 , #a[1][0][0]);
sleep(125);
} |