1

Тема: Как сврнуть все открытые окна кроме окна Квик?

из Lua
Окно квика нашел и даже восстановил(открыл), но другие открытые окна программ или папок сверху, требуется  их свернуть или сделать окно квика поверх всех

2

Re: Как сврнуть все открытые окна кроме окна Квик?

Просто любопытно зачем это надо?
Делаем автологин пользователя и Quik пихаем в автозагрузку, скрипты стартуют и работают нормально.

3

Re: Как сврнуть все открытые окна кроме окна Квик?

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

4

Re: Как сврнуть все открытые окна кроме окна Квик?

Есть такая прога Deskpins [url]https://deskpins.ru.uptodown.com/windows[/url] , добавил туда в настройки на вкладке Autopin  (Add) окно квика по названию окна и классу , дескриптора нет (по двум параметрам)
Из скрипта Lua
local WM_SYSCOMMAND = 0x0112
local SC_RESTORE = 0xF120
hQuikWnd = w32.FindWindow("InfoClass", "")-- хендл квика
w32.PostMessage(hQuikWnd, WM_SYSCOMMAND, SC_RESTORE, 0)--++ восстановление
В результате так как окно уже настрйках Deskpins поверх всех окон то при восстановлении становится поверх всех

5 (2020-12-23 22:28:08 отредактировано swerg)

Re: Как сврнуть все открытые окна кроме окна Квик?

Посмотрел я как окно неактивного процесса внезапно выкинуть наружу - оказалось, Windows этому активно сопротивляется. Логика такая: вы в каком-то окне что-то вводите с клавиатуры - внезапно другая программа "выскакивает" наверх, получая фокус ввода.
При этом если вы просто смотрите в экран долгое время (настраивается), не производя ввода клавиатурой или мышью (т.е. не взаимодействуя с системой) - то активизировать другое окно уже можно и легально.

Есть разные обходные маневры.... Впрочем, если вы нашли для себя решение - то пусть так и будет, пока оставлю свои раскопки по этой теме.

6

Re: Как сврнуть все открытые окна кроме окна Квик?

Вот тут расписано по окнам [url]https://firststeps.ru/mfc/winapi/r.php?71[/url]

7

Re: Как сврнуть все открытые окна кроме окна Квик?

Вот это даже более интересно [url]http://www.vsokovikov.narod.ru/New_MSDN_API/Window/fn_setforegroundwindow.htm[/url]

8 (2020-12-24 18:22:01 отредактировано toxa)

Re: Как сврнуть все открытые окна кроме окна Квик?

какой-то уродский машинный перевод. есть же msdn!

[url]https://docs.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-setforegroundwindow[/url]

9

Re: Как сврнуть все открытые окна кроме окна Квик?

iforts пишет:

Вот это даже более интересно [url]http://www.vsokovikov.narod.ru/New_MSDN_API/Window/fn_setforegroundwindow.htm[/url]

Поверьте, интернет я весь перечитал.
Вот только во всех этих SetForegroundWindow есть много нюансов.

Накидаю ссылок, если таки вдруг вернусь к этой теме - чтобы было где смотреть.

[url]https://www.cyberforum.ru/delphi-winapi/thread858081.html[/url]
[url]https://www.transl-gunsmoker.ru/2010/10/blog-post_25.html[/url]

А здесь хорошо написано про разницу между SetForeGroundWindow, SetActiveWindow, BringWindowToTop
[url]https://coderoad.ru/2987/Вывод-окна-на-передний-план-в-C-с-помощью-Win32-API[/url]

Но нам это все не совсем подходит, т.к. тут так или иначе рассмотрены легальные способы, причем при наличии второго экземпляра активного приложения.

Ну и по сути:
[url]https://rsdn.org/article/qna/ui/wndsetfg.xml[/url]

PS
С изменением Z-Order окон я не пробобвал, т.к. подозреваю что если воткнуть главное QUIK-окна на самый верх - то уедет порядок его дочерних окон. Это ж большая разница: просто выкинуть наверх одно конкретное окно и трава не расти, или же правильно вытолкнуть наверх родительское окно с кучей дочерних. Впрочем, как говорил - этот способ я не проверял.

На самом деле у вас какая-то очень частная задача (достаточно взять второй монитор, на котором всегда будет квик), может и решать её имеет смысл в частном порядке.

10

Re: Как сврнуть все открытые окна кроме окна Квик?

windows сопротивляется желанию программы в бэкграунде вытащить себя наверх потому, что одно время были весьма распространены вирусы, вытаскивающие всякую рекламу и тому подобное, не давая пользователю работать. после того, как setforegroundwindow ограничили, было изобретено примерно стопицот способов как это обойти, что-то микрософт ограничил опять (например, если background приложение само себе ставит свойство topmost, оно не всплывает), в общем, плохая это идея.

Про дочерние окна. QUIK - это MDI приложение. окна внутри него - это MDI Child окна. У них свой Z-Order внутри MDI Parent окна квика. Это не тот же самый Z-Order что у остальных окон. Сообщения для изменения Z-Order MDI Child окон другие, что-то типа WM_MDIACTIVATE (?!) могу ошибаться. В общем, смысл в том, что при манипуляциих с главным окном квика, которое MDI Parent, оно перемещается вместе со всеми своими MDI Child'ами, ничего уехать не должно.

11 (2020-12-26 10:43:55 отредактировано swerg)

Re: Как сврнуть все открытые окна кроме окна Квик?

А что с вынесенными окнами будет?
Я сам не разбирался с Z-order никогда, не было задачи как-то. Тут поковырялся немного...
Не, явно все можно сделать и даже красиво, но как-то уже стало лень, слишком задача не общая, по-моему.

12 (2020-12-26 13:14:01 отредактировано iforts)

Re: Как сврнуть все открытые окна кроме окна Квик?

Вынесенные окна тоже есть но у них же другой хендл их не должно затронуть
Прога эта не работает как надо видимо по этой же причине так как сама сидит в трее. Да получается надо добавить пару функций в w32. Приснилось сегодня еще одно решение этого вопроса. Активировать скрипт сообщением из vcl перед открытием  (восстановлением) квика, то есть например есть открытые и активное окно другого приложения, по сигналу выводим сообщение чтобы диактивировать другие окна (потоки), сообщение можно сразу убрать и следом восстановить квик, а так как скрипт работает в одном потоке с квиком то и получается что этот процесс становится активным для вызова SetForegroundWindo.
Все это мне требуется для того чтобы была возможность свернуть квик и посмотреть что то в интернет или др. А когда будут сигналы восстанавливать квик поверх всех окон автоматически, чтобы принять решение открывать позицию или нет или настроить другие какие то сигналы на восстановление квика и всего то, можно назвать это капризом )), но это действительно облегчает работу и не дает проспать какой нибудь сигнал, а смотреть в квик постоянно слишком муторно. Робота пока не настроил, надо подбирать параметры. В будущем я конечно это постараюсь сделать, но пока вручную торгую

13

Re: Как сврнуть все открытые окна кроме окна Квик?

второй монитор только для квика. и чтобы ему ничего не мешало там показывать что угодно. дешево, надежно и практично.

14

Re: Как сврнуть все открытые окна кроме окна Квик?

swerg пишет:

А что с вынесенными окнами будет?

все вынесенные окна независимые. если только они не модальные относительно другого окна.