Кибор » Кибор - Интегрированная среда разработки ботов » Готовые скрипты » Функция поиска нескольких окон с одинаковым именем и/или классом.

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

1. Zireael - 22 Января, 2018 - 07:48:26 - перейти к сообщению
Функция поиска нескольких окон с одинаковым именем и/или классом. (Отобразить)

Возвращает количество найденных окон.
В массиве окна упорядочены в порядке их последней активности. Т. е. первым будет последнее активное окно, вторым предпоследнее и т. д.
Допускается указывать часть имени и/или класса.
Синтаксис:
CODE:
win wind[10]; // массив для указателей на окна
int count; // переменная, в которую вернётся количество найденных окон
count=Find_Window(#wind[0], "Блокнот", "Notepad", 0, 1); // вызов функции

1й параметр - указатель на массив win.
2й параметр - имя окна или часть имени. Если имени нет или не нужно учитывать, то пишем "".
3й параметр - класс окна или часть класса. Если класс не нужно учитывать, то пишем "".
4й параметр - флаг полного имени окна. 0 - указана часть имени окна, 1 - указано полное имя окна. Если имя не указано параметр игнорируется.
5й параметр - флаг полного имени класса. 0/1. Если класс не указан параметр игнорируется.
Если флаг 1, то окно будет найдено при полном совпадении имени/класса.
Если флаг 0, то будет искать указанную часть в имени/классе. Т. е., если указать имя "Блокнот" и не указывать класс, то будут найдены все окна, в имени которых содержится текст 'Блокнот'.

Сохранить функцию в txt файл, загружать через include.
Пример (Отобразить)
2. Diablo2 - 26 Мая, 2018 - 13:09:16 - перейти к сообщению
Спасибо за скрипт, пригодился. Но не пойму, должен ли он заполнять width и height найденного окна? У меня эти поля выдают мусорные значения. Можно ли как-то самому узнать размеры экрана по win переменной?
3. Zireael - 26 Мая, 2018 - 14:05:21 - перейти к сообщению
 Цитата:
Можно ли как-то самому узнать размеры экрана по win переменной?

Наверное, размеры окна, а не экрана.
На примере блокнота:
CODE:
#include "C:\Program Files\Kibor\include\FindWindow.txt" // загружаем функцию
start("C:\Windows\system32\notepad.exe"); // запускаем блокнот
while(window(-1,"Notepad", -1)==0)sleep(100); // ждём когда блокнот откроется

win wind[10];
int count;
count=Find_Window(#wind[0], "", "Notepad", 1, 1);

external(INT, "GetClientRect", "GetClientRect", "user32.dll");
external(INT, "GetWindowRect", "GetWindowRect", "user32.dll");
int pos[4], rect[4];

GetClientRect(formatwi(wind[0]), address(#rect[0])); // получаем размеры клиента
GetWindowRect(formatwi(wind[0]), address(#pos[0])); // получаем позицию окна

messagebox(format(rect[0])+" "+format(rect[1])+" "+format(rect[2])+" "+format(rect[3]));
messagebox(format(pos[0])+" "+format(pos[1])+" "+format(pos[2])+" "+format(pos[3]));
4. Diablo2 - 26 Мая, 2018 - 14:53:03 - перейти к сообщению
Спасибо за быстрый ответ. Не знаю почему, но когда загружаю твой скрипт через include, то выдает ошибку в "full_name==1goto157", а если просто добавляю в скрипт, то все норм. Может ты знаешь в чем дело?
5. Zireael - 26 Мая, 2018 - 15:13:17 - перейти к сообщению
include никак не влияет на работу скрипта. Просто загружается содержимое файла.
6. KeSeG - 24 Сентября, 2018 - 05:55:17 - перейти к сообщению
Zireael, Подскажи пожалуйста, почему не работает этот код? т.е. он после выполнения куда-то "засовывает" окна, не меняя как я понимаю их размеры. Получается таким образом нельзя обращаться к окнам?

CODE:

#include "D:\FindWindow.txt"

win wind[10];
int count;
count=Find_Window(#wind[0], "", "Notepad", 1, 1);

for(int i=0;i<count;i++)
{
wind[i].width=457;
wind[i].height=836;
movewindow(wind[i]);
}

7. Zireael - 24 Сентября, 2018 - 06:36:26 - перейти к сообщению
 Цитата:
wind[i].width=457;

CODE:
wind.width[i]=457;

Похоже что movewindow не работает с массивами.
CODE:
#include "D:\FindWindow.txt"
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll");

win wind[10];
int count;
count=Find_Window(#wind[0], "", "Notepad", 1, 1);

for(int i=0;i<count;i++)
{
SetWindowPos(formatwi(wind[i]), -2, 0, 0, 836, 457, 2); // изменит размеры окна, положение не изменится
// SetWindowPos(formatwi(wind[i]), -2, 100, 50, 836, 457, 0); // изменит размеры и положение
}

Описание SetWindowPos https://docs.microsoft.com/en-us...ser-setwindowpos
8. Kibor - 24 Сентября, 2018 - 06:44:43 - перейти к сообщению
Zireael , Работает
CODE:
win w[5];
w[1]=window ("Безымянный — Блокнот", "Notepad", -1);
w.width[1]=5;
movewindow(w[1]);


 KeSeG пишет:
wind[i].width


Не так тут.
Так надо.
CODE:
wind.width[i]
9. KeSeG - 24 Сентября, 2018 - 06:56:15 - перейти к сообщению
Zireael , Kibor , Спасибо большое. И тот и тот вариант работают. Проблема в том, что если делать так:

CODE:

for(int i=0;i<count;i++)
{
wind.width[i]=457;
wind.height[i]=836;
movewindow(wind);
}


Он меняет размер, но по всей видимости выносит положение окон за пределы видимости.

если делать так:

CODE:
for(int i=0;i<count;i++)
{
wind.width[i]=457;
wind.height[i]=836;
wind.left[i]=0;
wind.top[i]=0;
movewindow(wind[i])
}


то складывает все их в одну стопку, т.е. не оставляя их на месте.
10. Zireael - 24 Сентября, 2018 - 07:00:29 - перейти к сообщению
Сначала получите позицию окна. Потом присвойте .left и .top.
http://kibor-bot.com/forum/topic...61521#1527361521

Powered by ExBB FM 1.0 Final