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

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

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

> Описание: Определение свернуто или нет окно
Dantes3000
Отправлено: 04 Сентября, 2018 - 20:00:38
Post Id



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


Покинул форум
Сообщений всего: 1480
Дата рег-ции: Июнь 2016  
Репутация: 58




Выделено в отдельную тему из темы "Версия 4.05 Немодальные диалоговые окна. Интерактивное управление программой через диалоги."
Как узнать минимизировано ли(свёрнуто) окно?
IsIconic всегда 0 возвращает, IsWindowVisible всегда 1


Спкойоер (Отобразить)
 
 Top
Kibor
Отправлено: 04 Сентября, 2018 - 20:34:30
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8191
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 Dantes3000 пишет:
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;

start_();


external(INT, "IsIconic", "IsIconic", "User32.dll");
external(INT, "IsWindowVisible", "IsWindowVisible", "User32.dll");


loop()
{
start_();

textout(0,0,0, format(IsIconic(formatwi(w_KIB))), 0);
textout(1,0,15, format(IsWindowVisible(formatwi(w_KIB))), 0);


}

function start_()
{
pause(100);
int x, y;
getmouse(x, y);
w_KIB=getwindow(0, x, y);
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
}


Функция IsIconic возвращает это.
Но алгоритм не верный.
В цикле функция start_();, в которой идет заново получение указателя на окно под мышкой. То есть где мышь, там и окно определяется. И указатель указывает постоянно на активное развернутое окно под мышкой.
Надо start_(); вынести за цикл, тогда будет указывать на окно которое при запуске стояло. И будет его статус определять.
CODE:
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;

start_();


external(INT, "IsIconic", "IsIconic", "User32.dll");

start_();

loop()
{

textout(0,0,0, format(IsIconic(formatwi(w_KIB))), 0);


}

function start_()
{
pause(100);
int x, y;
getmouse(x, y);
w_KIB=getwindow(0, x, y);
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
}
 
 Top
Dantes3000
Отправлено: 04 Сентября, 2018 - 20:39:16
Post Id



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


Покинул форум
Сообщений всего: 1480
Дата рег-ции: Июнь 2016  
Репутация: 58




Да я как обычно тупанул. Пока на форум не напишу - не догадаюсь. Я на варспе тестировал по прямой привязке к окну....а этих окна у меня 2 открыто.
(Добавление)
А можно как-то без подключения внешней функции развернуть окно?

CODE:
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;

start_();


external(INT, "IsIconic", "IsIconic", "User32.dll");
external(INT, "ShowWindow", "ShowWindow", "User32.dll");


start_();


loop() if(IsIconic(formatwi(w_KIB))!=0) ShowWindow(formatwi(w_KIB), 1);







function start_()
{
pause(100);
int x, y;
getmouse(x, y);
w_KIB=getwindow(0, x, y);
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
}
 
 Top
Kibor
Отправлено: 04 Сентября, 2018 - 21:14:33
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8191
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 Dantes3000 пишет:
А можно как-то без подключения внешней функции развернуть окно?

?
http://kibor-bot.com/forum/topic...84398#1487084398
и ниже пост разве не то?.
 
 Top
Dantes3000
Отправлено: 04 Сентября, 2018 - 21:34:32
Post Id



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


Покинул форум
Сообщений всего: 1480
Дата рег-ции: Июнь 2016  
Репутация: 58




Kibor , это развернуть на весь экран. А я имею ввиду развернуть из свёрнутого положения.
 
 Top
Kibor
Отправлено: 04 Сентября, 2018 - 21:39:38
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8191
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Ну надо найти значения нужной константы в интернете и подставить.
 
 Top
Zireael
Отправлено: 05 Сентября, 2018 - 01:42:21
Post Id



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


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




 Цитата:
развернуть из свёрнутого положения.

https://docs.microsoft.com/ru-ru...rc/wm-syscommand
 Цитата:
SC_RESTORE
0xF120

Переводим из hex в dec, f120 = 61728
CODE:
win w=window (-1, "Notepad", -1); // найти блокнот
sendmessage(WM_SYSCOMMAND, 61728, 0, w); // восстановить окно
 
 Top
Dantes3000
Отправлено: 05 Сентября, 2018 - 16:18:49
Post Id



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


Покинул форум
Сообщений всего: 1480
Дата рег-ции: Июнь 2016  
Репутация: 58




Zireael , спасибо. Так и думал. Находил эти значения и даже понял, что это то что надо, но чёт не допёр до конца.
Было бы неплохо эту инфу добавить в тему про post/sendmessage
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by