Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Без описания
mrPuh
Отправлено: 10 Августа, 2015 - 17:14:35
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2015  
Репутация: 0




Как получить координаты окна по указателю?
 
 Top
Kibor
Отправлено: 10 Августа, 2015 - 21:44:37
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8102
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 mrPuh пишет:
Как получить координаты окна по указателю?

Опять использовать Api. Функцию GetWindowRect
Описание ее и описание структуры RECT смотреть в интернете

CODE:
external(INT, "My_GetWindowRect", "GetWindowRect", "user32.dll");

int hwnd=w[x];//То что получили с помощью FindWindowExA (http://kibor-bot.com/forum/topic.php?forum=5&topic=336&postid=1439191324#1439191324)

char poz_siz[16];//Это для заполнения структуры RECT
/*
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
*/
// LONG имеет 4 байта. Значит вся полная структура 16
My_GetWindowRect(hwnd, address(#poz_siz[0]));

//Тут разберем структуру по 4 байта.
int t[4];

t[0]=addressi(address(#poz_siz[0]));
messagebox ("Левый угол Y "+format(t[0]));

t[1]=addressi(address(#poz_siz[4]));
messagebox ("Левый угол Y "+format(t[1]));

t[2]=addressi(address(#poz_siz[8]))-t[0];
messagebox ("Размер X "+format(t[2]));

t[3]=addressi(address(#poz_siz[12]))-t[1];
messagebox ("Размер Y "+format(t[3]));

(Добавление)
Исправил код. Была ошибка в расчете ширины и высоты.
 
 Top
mrPuh
Отправлено: 11 Августа, 2015 - 08:26:44
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2015  
Репутация: 0




Kibor!
Помоги, пожалуйста, устранить ошибку.
Как я понял ругается на "int hwnd=w[x];".
CODE:

external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");
external(INT, "My_GetWindowRect", "GetWindowRect", "user32.dll");

string hh="Блокнот";
char t[25];
strcpy(#t[0],hh);
int ss=size(#t[0]);
int si;
int y;
int x;
string all[500];
char h[512];
int adr=address(#h[0]);
int a=my_windows(0, 0, 0, 0);
win w[500];
int n=0;

s: if (a!=0)
{
h[0]=formatic(0);
my_getname(a, adr, 512);
si=size(#h[0]);
if (pr()==-1) goto nn;
all[n]=format(#h[0]);
w[n]=formatiw(a);
n++;
nn: a=my_windows(0, a, 0, 0);
goto s;
}



for (x=0; x<n; x++)
{


w.name[x]=all[x];
w.width[x]=737;
w.height[x]=696;
w.left[x]=0;
w.top[x]=0;
movewindow(w[x]);

int hwnd=w[x];//Òî ÷òî ïîëó÷èëè ñ ïîìîùüþ FindWindowExA (http://kibor-bot.com/forum/topic.php?forum=5&topic=336&postid=1439191324#1439191324)

char poz_siz[16];//Ýòî äëÿ çàïîëíåíèÿ ñòðóêòóðû RECT
/*
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
*/
// LONG èìååò 4 áàéòà. Çíà÷èò âñÿ ïîëíàÿ ñòðóêòóðà 16
My_GetWindowRect(hwnd, address(#poz_siz[0]));

//Òóò ðàçáåðåì ñòðóêòóðó ïî 4 áàéòà.
int tp[4];

tp[0]=addressi(address(#poz_siz[0]));
messagebox ("Ëåâûé óãîë Y "+format(tp[0]));

tp[1]=addressi(address(#poz_siz[4]));
messagebox ("Ëåâûé óãîë Y "+format(tp[1]));

tp[2]=addressi(address(#poz_siz[8]))-tp[0];
messagebox ("Ðàçìåð X "+format(tp[2]));

tp[3]=addressi(address(#poz_siz[12]))-tp[1];
messagebox ("Ðàçìåð Y "+format(tp[3]));
}

function pr()
{
for (int j=0; j<si-ss+1; j++)
{
y=j;
for (int b=0; b<ss; b++)
{
if (h[y]!=t[b])goto d;
y++;
}
return 1;
d:;
}
return -1;
}
 
 Top
Kibor
Отправлено: 11 Августа, 2015 - 11:42:14
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8102
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




(для просмотра ссылки Вам необходимо авторизоваться)
 Цитата:
Добавлены функции конвертации значения указателя win в int и наоборот. Это позволяет производить с указателями любые математические операции, сравнение указателей и вывод их в виде числа на экран.

formatwi - преобразует указатель win к int
CODE:
win wind=selectwindow ("Имя Окна");
int a=formatwi(wind);


formatiw - преобразует int к win
CODE:

int a=344535;
win wind=formatiw(a);



 Цитата:
win w[500];
int hwnd=w[x];




win - это внутренняя переменная Кибор. В ней находится HWND (указатель), а так же структура w.top w.left и тд. Обращаться как к переменной напрямую к ней нельзя. только использовать в внутренних функциях кибор..
На самом деле HWND это числовое значение 4 байта целое.
поэтому при получение и работе в WinApi с HWND использовать int.
Если надо записывать win в int и наоборот надо их приводить друг к другу с помощью функций как написал
 
 Top
mrPuh
Отправлено: 11 Августа, 2015 - 12:32:04
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2015  
Репутация: 0




Все заработало! Большое спасибо, Kibor!
Теперь (вроде) все есть для реализации моего проекта. Художник
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by