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

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

11. Kibor - 24 Сентября, 2018 - 07:27:15 - перейти к сообщению
 KeSeG пишет:
если делать так:

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


то складывает все их в одну стопку, т.е. не оставляя их на месте.


Конечно. Ведь тут всем окнам указываются одни и те же размеры и позиции.

CODE:
win w[2];
w[0]=window ("Калькулятор", "CalcFrame", -1);
w[1]=window ("Безымянный — Блокнот", "Notepad", -1);

int x[2], y[2];
int sx[2], sy[2];

x[0]=10; y[0]=20;sx[0]=200; sy[0]=100;
x[1]=110; y[1]=210;sx[1]=150; sy[1]=200;




for (int n=0; n<2; n++)
{
w.left[n]=x[n];
w.top[n]=y[n];
w.width[n]=sx[n];
w.height[n]=sy[n];
movewindow(w[n]);
}

[i](Добавление)

И еще.
Структура WIN, с помощью которой можно менять размеры, позицию и тд создается только при определение указателя встроенными функциями Кибор.
Если определяется другим способом, то надо ее заполнить полностью руками всю.
12. Zireael - 22 Октября, 2018 - 18:40:57 - перейти к сообщению
Найти окно по части имени (Отобразить)
13. KeSeG - 30 Января, 2019 - 23:49:09 - перейти к сообщению
Пример:
CODE:
#include "C:\Program Files\Kibor\include\FindWindow.txt" // загружаем функцию
loop(3)start("C:\Windows\system32\notepad.exe"); // запускаем 3 блокнота
sleep(1000);
win wind[10]; // массив для указателей
int count; // переменная, в которую вернётся количество найденных окон
count=Find_Window(#wind[0], "", "Notepad", 1, 1); // ищем все блокноты, имя не указано, только класс.
messagebox("Найдено окон: "+format(count));
// wind[0] - последнее активное окно, wind[1] - предпоследнее и т. д.

// переименовываем блокноты.
external(INT, "SetWindowText", "SetWindowTextA", "user32.dll");
for(int i=0;i<count;i++)
SetWindowText(formatwi(wind[i]),"Блокнот "+format(i+1));


Вчера работал замечательно, сегодня выдает ошибку.(для просмотра ссылки Вам необходимо авторизоваться)
Сегодня было обновление кибора, возможно конечно проблема с ним не связана... но не знаю на что и грешить, подскажите пожалуйста.
14. Kibor - 30 Января, 2019 - 23:57:54 - перейти к сообщению
 KeSeG пишет:
Пример:

O_o Это пример? А код в include для развития ясновидения и телепатии у нас?
15. KeSeG - 31 Января, 2019 - 00:04:42 - перейти к сообщению
Он из первого поста автора:
CODE:
function Find_Window(win #w, string name, string class, int full_name, int full_class)
{
external(INT, "FindWindowEx", "FindWindowExA", "user32.dll");
external(VOID, "GetClassName", "GetClassNameA", "user32.dll");
external(VOID, "GetWindowText", "GetWindowTextA", "user32.dll");

char array[255];
int n=0, handle;
if(name == "" && class == "") // если не указаны имя и класс
{
return 0;
}

if(name != "" && class != "") // поиск по имени и классу
{

// имя окна и класс указаны полностью
if(full_name==1 && full_class==1)
{
handle=FindWindowEx(0, 0, class, name);
while (handle!=0)
{
w[n]=formatiw(handle); n++;
handle=FindWindowEx(0, handle, class, name);
}
return n;
}

// имя указано полностью, класс частично
if(full_name==1 && full_class==0)
{
handle = FindWindowEx(0, 0, 0, name);
GetClassName (handle, address (#array[0]), 255);
while (handle!=0)
{
if(find_str(format(#array[0]), class, full_class) == 1)
{
w[n]=formatiw(handle); n++;
}
handle=FindWindowEx(0, handle, 0, name);
GetClassName (handle, address (#array[0]), 255);
}
return n;
}

// имя указано частично, класс полностью
if(full_name==0 && full_class==1)
{
handle = FindWindowEx(0, 0, class, 0);
GetWindowText (handle, address (#array[0]), 255);
while (handle!=0)
{
if(find_str(format(#array[0]), name, full_name) == 1)
{
w[n]=formatiw(handle); n++;
}
handle=FindWindowEx(0, handle, class, 0);
GetWindowText (handle, address (#array[0]), 255);
}
return n;
}

// имя указано частично, класс частично
if(full_name==0 && full_class==0)
{

handle = FindWindowEx(0, 0, 0, 0);
GetClassName (handle, address (#array[0]), 255);
while (handle!=0)
{
if(find_str(format(#array[0]), class, full_class) == 1)
{
GetWindowText (handle, address (#array[0]), 255);

if(find_str(format(#array[0]), name, full_name) == 1)
{
w[n]=formatiw(handle); n++;
}
}
handle=FindWindowEx(0, handle, 0, 0);
GetClassName (handle, address (#array[0]), 255);
}
return n;
}
}

if(name=="") // поиск по классу, имя не указано
{
if(full_class==1)
{
handle = FindWindowEx(0, 0, class, 0);
while (handle!=0)
{
w[n]=formatiw(handle); n++;
handle=FindWindowEx(0, handle, class, 0);
}
}
else
{
handle = FindWindowEx(0, 0, 0, 0);
GetClassName (handle, address (#array[0]), 255);
while (handle!=0)
{
if(find_str(format(#array[0]), class, full_class) == 1)
{
w[n]=formatiw(handle); n++;
}
handle = FindWindowEx(0, handle, 0, 0);
GetClassName (handle, address (#array[0]), 255);
}
}
}
else // поиск по имени, класс не указан
{
if(full_name==1)
{
handle = FindWindowEx(0, 0, 0, name);
while (handle!=0)
{
w[n]=formatiw(handle); n++;
handle=FindWindowEx(0, handle, 0, name);
}
}
else
{
handle = FindWindowEx(0, 0, 0, 0);
GetWindowText (handle, address (#array[0]), 255);
while (handle!=0)
{
if(find_str(format(#array[0]), name, full_name) == 1)
{
w[n]=formatiw(handle); n++;
}
handle = FindWindowEx(0, handle, 0, 0);
GetWindowText (handle, address (#array[0]), 255);
}
}
}
return n;

function find_str(string s1, string s2, int full)
{
int i=0, j=0, len1=size(s1),len2=size(s2);
char tmp1[255], tmp2[255];
string temp="";
strcpy(#tmp1[0], s1); strcpy(#tmp2[0], s2);
while(i <= len1 - len2 && temp != s2)
{
temp="";
if(full==0){while(tmp1[i]!=tmp2[0] && i < len1 - len2)i++;}j=0;
while(tmp1[i]==tmp2[j] && i < len1){temp=temp+tmp1[i]; i++; j++;}i++;
}
if(temp == s2)return 1;
else return 0;
}
}
16. Kibor - 31 Января, 2019 - 00:46:42 - перейти к сообщению
KeSeG , Спасибо. Обновил.
И в коде ошибку исправьте этом. Скобку перенесите нижнюю на закрытие верхней функции.
Проверьте скобки щелчком правой кнопкой мыши на нумерацию.
17. KeSeG - 31 Января, 2019 - 00:49:10 - перейти к сообщению
Вам спасибо, за столь быструю реакцию.
18. Zireael - 31 Января, 2019 - 14:50:24 - перейти к сообщению
Поиск нескольких окон с одинаковым именем или классом (Отобразить)

Переделал. Структура win теперь тоже заполняется. В массиве окна упорядочены в порядке их запуска.
19. KeSeG - 02 Февраля, 2019 - 00:48:52 - перейти к сообщению
Zireael Опять что то не такс новым FindWindow.txt

CODE:
#include "C:\Program Files\Kibor\include\FindWindow.txt" // загружаем функцию
loop(3)start("C:\Windows\system32\notepad.exe"); // запускаем 3 блокнота
sleep(1000);
win wind[10]; // массив для указателей
int count; // переменная, в которую вернётся количество найденных окон
count=Find_Window(#wind[0], "", "Notepad", 1, 1); // ищем все блокноты, имя не указано, только класс.
messagebox("Найдено окон: "+format(count));
// wind[0] - последнее активное окно, wind[1] - предпоследнее и т. д.

// переименовываем блокноты.
external(INT, "SetWindowText", "SetWindowTextA", "user32.dll");
for(int i=0;i<count;i++)
SetWindowText(formatwi(wind[i]),"Блокнот "+format(i+1));



Сначала выдает ошибку:(для просмотра ссылки Вам необходимо авторизоваться)
ну тут вроде все ок, прост переменная уже была обозначена в FindWindow.txt

заменяю i на j

CODE:
#include "C:\Program Files\Kibor\include\FindWindow.txt" // загружаем функцию
loop(3)start("C:\Windows\system32\notepad.exe"); // запускаем 3 блокнота
sleep(1000);
win wind[10]; // массив для указателей
int count; // переменная, в которую вернётся количество найденных окон
count=Find_Window(#wind[0], "", "Notepad", 1, 1); // ищем все блокноты, имя не указано, только класс.
messagebox("Найдено окон: "+format(count));
// wind[0] - последнее активное окно, wind[1] - предпоследнее и т. д.

// переименовываем блокноты.
external(INT, "SetWindowText", "SetWindowTextA", "user32.dll");
for(int j=0;j<count;j++)
SetWindowText(formatwi(wind[j]),"Блокнот "+format(j+1));


выдает ошибку (для просмотра ссылки Вам необходимо авторизоваться) потом (для просмотра ссылки Вам необходимо авторизоваться)
ну и естественно не переименовывает. Со старым - работает.
20. Zireael - 02 Февраля, 2019 - 02:31:09 - перейти к сообщению
Это в файл FindWindow.txt:
Содержимое файла FindWindow.txt (Отобразить)

Пример использования:
code (Отобразить)

Powered by ExBB FM 1.0 Final