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

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

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

> Без описания
Arimor
Отправлено: 15 Ноября, 2020 - 13:31:15
Post Id



Пользователь
Мастер


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




У меня есть 30 открытых окон, я получаю на них указатель путем наведения курсора на каждый. Как можно упростить задачу?
 
 Top
Zireael
Отправлено: 15 Ноября, 2020 - 13:38:29
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




Найти их. Имя и класс окна разные, одинаковые, частично совпадают?
 
 Top
Arimor
Отправлено: 15 Ноября, 2020 - 14:06:33
Post Id



Пользователь
Мастер


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




 Zireael пишет:
Найти их. Имя и класс окна разные, одинаковые, частично совпадают?

Всё одинаковое, только расположении окон разные.
 
 Top
Zireael
Отправлено: 15 Ноября, 2020 - 14:15:29
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




Поиск окон (Отобразить)
 
 Top
Arimor
Отправлено: 15 Ноября, 2020 - 15:26:50
Post Id



Пользователь
Мастер


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




Zireael , у меня он почему-то ошибку выдает


(Добавление)
в отладке
CODE:

GetClassName ( handle_window [ i ] , address ( # c3 [ 0 ] ) , sizearray ( c3 ) )
if ( regexsearch ( 1 , # temp , format ( # c2 [ 0 ] ) , name_window , IGNORECASE ) && regexsearch ( 1 , # temp2 , format ( # c3 [ 0 ] ) , class_window , IGNORECASE ) )
h = CreateToolhelp32Snapshot ( 2 , 0 )
 
 Top
Zireael
Отправлено: 15 Ноября, 2020 - 15:33:25
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




Добавить в начало:
CODE:
external(INT, "CreateToolhelp32Snapshot", "CreateToolhelp32Snapshot", "Kernel32.dll");
 
 Top
Arimor
Отправлено: 15 Ноября, 2020 - 16:00:20
Post Id



Пользователь
Мастер


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




Таким способом не отправляются нажатия кнопок в блокнот

CODE:
external(INT, "CreateToolhelp32Snapshot", "CreateToolhelp32Snapshot", "Kernel32.dll");
external(INT, "GetWindowThreadProcessId", "GetWindowThreadProcessId", "User32.dll" );
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll" );
external(INT, "Process32First", "Process32First", "Kernel32.dll" );
external(INT, "Process32Next", "Process32Next", "Kernel32.dll" );
external(INT, "FindWindowEx", "FindWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "GetClassName", "GetClassNameA", "User32.dll" );


win w[99]; // массив для окон

// Имя и класс окна можно указать частично. Для латиницы регистр игнорируется.
// для примера поиск всех окон блокнота
string name="Блокнот"; // имя окна, можно не указывать если указан класс окна
string class="Notepad"; // класс окна, можно не указывать если указано имя окна


// вызов функции поиска окон
int count_window=find_window(name, class, #w[0]); // передаётся: имя окна, класс окна, указатель на массив win
messagebox("Найдено окон: "+format(count_window));
for(int i=0; i<count_window; i++)setwindowparam(w[i]); // заполнение структуры win

sendkey("asd", 0, w[1]);
sendkey("qww", 1, w[1]);
sendkey("dsd", w[1]);
sendkey("asd", 0, w[0]);
sendkey("qww", 1, w[0]);
sendkey("dsd", w[0]);
// дальше сам скрипт
// w[0] - первое запущенное окно
// w[1] - второе запущенное окно
// и т. д.

for(int j=0; j<count_window; j++)messagebox(w.name[j]); // имена всех найденных окон



// функция поиска окон, возвращает количество найденных окон
function find_window(string name_window, string class_window, win #ww)
{
if(name_window=="" && class_window==""){messagebox("Нужно указать имя или класс окна"); return 0;}
int handle_array[999][2];
string temp, temp2;
int i, h, process, pid, count_window=0, win_count=0, count_handle=0;
int handle_window[9999];
char c1[255], c2[255], c3[255];
writeaddress(sizearray(c1), address(#c1[3]));
h=FindWindowEx(0, 0, 0, 0); // поиск всех окон
while(h && count_handle<sizearray(handle_window)){handle_window[count_handle]=h; count_handle++; h=FindWindowEx(0, h, 0, 0);}
for(i=0; i<count_handle; i++)
{
GetWindowText(handle_window[i], address(#c2[0]), sizearray(c2));
GetClassName(handle_window[i], address(#c3[0]), sizearray(c3));
if(regexsearch(1, #temp, format(#c2[0]), name_window, IGNORECASE) && regexsearch(1, #temp2, format(#c3[0]), class_window, IGNORECASE))
{
GetWindowThreadProcessId(handle_window[i], address(#pid)); handle_array[count_window][0]=pid; handle_array[count_window][1]=handle_window[i]; count_window++;
}
}
h=CreateToolhelp32Snapshot(2, 0); process=Process32First(h, address(#c1[0]));
while(process)
{
for(i=0; i<count_window; i++){if(codhexi(#c1[8], 4)==handle_array[i][0]){ww[win_count]=formatiw(handle_array[i][1]);win_count++;}}
process=Process32Next(h, address(#c1[0]));
}
CloseHandle(h);
return win_count;
}
 
 Top
Zireael
Отправлено: 15 Ноября, 2020 - 16:06:05
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
Таким способом не отправляются нажатия кнопок в блокнот

В блокноте надо отправлять нажатия в контрол, а не главное окно.
CODE:
sendkey("asd", window (-1, "Edit", window (w.name[0], w.class[0], -1)));
 
 Top
Arimor
Отправлено: 15 Ноября, 2020 - 16:06:55
Post Id



Пользователь
Мастер


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




Но это только в блокнот не пишет, а в игре нормально всё проходит.
 
 Top
Zireael
Отправлено: 15 Ноября, 2020 - 16:12:18
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
Но это только в блокнот не пишет, а в игре нормально всё проходит.

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


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




Powered by