Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Список окон в массив.

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

1. mrPuh - 08 Августа, 2015 - 15:04:12 - перейти к сообщению
Всем привет!
Как добавить в массив указатели всех окон, в названии которых есть определенное слово?
На форуме не нашел.
2. Kibor - 08 Августа, 2015 - 15:42:17 - перейти к сообщению
никак.. поиск указателя возможен по множеству параметров, хоть по позиции кнопки в программе по координате X к примеру, но перебор нельзя. надо сделать...
3. Kibor - 10 Августа, 2015 - 01:01:27 - перейти к сообщению
Обновил программу.
Добавил возможность подключать внешние DLL и юзать Api.

Теперь не проблема решать любые задачи, даже если язык Кибор не имеет нужной функции..
Для перебора окон используем FindWindowExA, для того что бы узнать имя окна по HWND используем GetWindowTextA. Их описание можно найти в интернете.
Находятся в user32.dll.

 Цитата:
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");

string all[2000];
char h[512];
int adr=address(#h[0]);
int a=my_windows(0, 0, 0, 0);

int n=0;
s: if (a!=0)
{
h[0]=formatic(0);
my_getname(a, adr, 512);
all[n]=format(#h[0]);
a=my_windows(0, a, 0, 0);
n++;
goto s;
}

if (fopen ("c:\Окна.txt", "w")!=0)
{
for (int x=0; x<n; x++)
{
fwrite(all[x]);
fwrite(ENDL);
}
fclose();
}


start ("c:\Окна.txt");
4. mrPuh - 10 Августа, 2015 - 01:59:37 - перейти к сообщению
Спасибо, Kibor!
Т.к. я не смог разобраться как в массив all[x] добавить указатели на окна, в имени которых есть определенное слово, к примеру "Блокнот".
Чтобы потом можно было использовать что-то типа:
CODE:
activate(all[x])

Подскажи, пожалуйста!
5. Kibor - 10 Августа, 2015 - 02:22:04 - перейти к сообщению
Код не красивый. накидал просто..

CODE:
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "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++)
{
activate(w[x]);
sleep(1000);
}


if (fopen ("c:\Окна.txt", "w")!=0)
{
for (x=0; x<n; x++)
{
fwrite(all[x]);
fwrite(ENDL);
}
fclose();
}


start ("c:\Окна.txt");


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;
}





6. mrPuh - 10 Августа, 2015 - 02:54:26 - перейти к сообщению
Супер!!!! Круто
Это то что нужно!!!
Спасибо большое!
Еще вопрос, когда текст кода выделяю мышью - выделенная часть подсвечивается как положено. Но если выделять текст с помощью клавы - подсветки нет, почему?
7. Kibor - 10 Августа, 2015 - 02:58:50 - перейти к сообщению
отключены.
8. mrPuh - 10 Августа, 2015 - 05:54:06 - перейти к сообщению
Вопрос:
Для перемещения окна использую:
CODE:

all.width[x]=600;
all.height[x]=400;
all.left[x]=0;
all.top[x]=0;
movewindow(all[x]);

Окно перемещается в левый верхний угол, но исчезает название окна, хотя в справке по movewindow сказано:
 Цитата:
Изменяются только те элементы, параметры которых необходимо изменить.

Т.е. раз я не изменил all.name[x], то оно должно остаться прежним.. А оно почему-то становится пустым, почему?
9. Kibor - 10 Августа, 2015 - 06:59:04 - перейти к сообщению
 mrPuh пишет:
Окно перемещается в левый верхний угол, но исчезает название окна, хотя в справке по movewindow сказано:
Цитата:
Изменяются только те элементы, параметры которых необходимо изменить.


сказано правильно.
механизм переименования не действует тогда.
проверить на блокноте.. калькуляторе и чем то другом.
что там и как исчезает я не знаю.

в крайнем случае проверить moveclient
10. mrPuh - 10 Августа, 2015 - 07:52:30 - перейти к сообщению
До перемещения (Отобразить)


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


CODE:

external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "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++)
{
//messagebox(w.left[x]);
w.width[x]=737;
w.height[x]=696;
w.left[x]=0;
w.top[x]=0;
movewindow(w[x]);

/*
if (fopen ("c:\Îêíà.txt", "w")!=0)
{
for (x=0; x<n; x++)
{
fwrite(all[x]);
fwrite(ENDL);
}
fclose();
}


start ("c:\Îêíà.txt");

*/
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;
}

Powered by ExBB FM 1.0 Final