Dantes3000 |
Отправлено: 04 Сентября, 2018 - 20:00:38
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Выделено в отдельную тему из темы "Версия 4.05 Немодальные диалоговые окна. Интерактивное управление программой через диалоги." Как узнать минимизировано ли(свёрнуто) окно?
IsIconic всегда 0 возвращает, IsWindowVisible всегда 1
Спкойоер (Отобразить)CODE: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;
}
|
|
|
Kibor |
Отправлено: 04 Сентября, 2018 - 20:34:30
|
Эксперт
Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 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;
} |
|
|
Dantes3000 |
Отправлено: 04 Сентября, 2018 - 20:39:16
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 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;
} |
|
|
Zireael |
Отправлено: 05 Сентября, 2018 - 01:42:21
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 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); // восстановить окно |
|
|
|