Zireael |
Отправлено: 15 Ноября, 2020 - 14:15:29
|
Эксперт
Покинул форум
Сообщений всего: 4472
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Поиск окон (Отобразить)CODE: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
// дальше сам скрипт
// 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;
} |
|
|
Arimor |
Отправлено: 15 Ноября, 2020 - 15:26:50
|
Мастер
Покинул форум
Сообщений всего: 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 )
|
|
|
Arimor |
Отправлено: 15 Ноября, 2020 - 16:00:20
|
Мастер
Покинул форум
Сообщений всего: 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;
} |
|
|
Zireael |
Отправлено: 15 Ноября, 2020 - 16:06:05
|
Эксперт
Покинул форум
Сообщений всего: 4472
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Таким способом не отправляются нажатия кнопок в блокнот
В блокноте надо отправлять нажатия в контрол, а не главное окно.
CODE:sendkey("asd", window (-1, "Edit", window (w.name[0], w.class[0], -1))); |
|
|
|