1 (изменено: serzh82saratov, 2019-07-19 01:01:53)

Тема: AHK: Порядок окон Z-Order

Как получить Z-Order окон?
Например, в каком порядке будут переключатся окна по Alt+Escape.

Если например активно окно блокнота, и активируется окно скрипта, то по нажатию я ожидаю получить окно блокнота, как предыдущее окно в Z-Order.
https://docs.microsoft.com/ru-ru/window … -getwindow


DetectHiddenWindows, On  
SetFormat, IntegerFast, H
Gui, +HWNDhGui 
Gui, Show, w222 h222 

1:: 
	GW_HWNDPREV := 3
	hGetWindow := DllCall("GetWindow", "Ptr", hGui, UInt, GW_HWNDPREV, "Ptr")
	WinGetClass, WinClass, ahk_id %hGetWindow% 
	WinGetTitle, WinTitle, ahk_id %hGetWindow%  
	WinGet, Process, ProcessName, ahk_id %hGetWindow%  
	
	ToolTip %  hGetWindow "`n" hGui "`n`n" WinClass "`n" WinTitle "`n" ProcessName
	Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Порядок окон Z-Order

Как-то так:

SetFormat, IntegerFast, H
Gui, +HWNDhGui 
Gui, Show, w222 h222 

1:: 
   GW_HWNDNEXT := 2, hWnd := hGui
   Loop
      hWnd := DllCall("GetWindow", "Ptr", hWnd, UInt, GW_HWNDNEXT, "Ptr")
   until DllCall("IsWindowVisible", Ptr, hWnd)
   WinGetClass, WinClass, ahk_id %hWnd% 
   WinGetTitle, WinTitle, ahk_id %hWnd%  
   WinGet, Process, ProcessName, ahk_id %hWnd%  
   
   ToolTip % hWnd "`n" hGui "`n`n" WinClass "`n" WinTitle "`n" Process
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: teadrinker, 2019-07-19 02:25:54)

Re: AHK: Порядок окон Z-Order

Ну, или так:

Gui, +HWNDhGui 
Gui, Show, w222 h222 

1:: 
   WinGet, list, List
   Loop % list
      i := A_Index
   until list%i% = hGui
   i++
   WinExist("ahk_id" list%i%)
   WinGetClass, WinClass
   WinGetTitle, WinTitle
   WinGet, Process, ProcessName
   
   ToolTip % list%i% "`n" hGui "`n`n" WinClass "`n" WinTitle "`n" Process
   Return

Или даже так:

Gui, +HWNDhGui 
Gui, Show, w222 h222 

1:: 
   WinGet, list, List
   WinExist("ahk_id" list4)
   WinGetClass, WinClass
   WinGetTitle, WinTitle
   WinGet, Process, ProcessName
   
   ToolTip % list%i% "`n" hGui "`n`n" WinClass "`n" WinTitle "`n" Process
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Порядок окон Z-Order

Не, всё не так просто:
https://stackoverflow.com/questions/210 … t-tab-does

5

Re: AHK: Порядок окон Z-Order

Да, что окно может принадлежать другому, не учёл. Но это легко добавить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Порядок окон Z-Order

Ещё что не свёрнуто и имеет кнопку в панели задач.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7 (изменено: Malcev, 2019-07-19 13:11:21)

Re: AHK: Порядок окон Z-Order

А почему свёрнутые исключать, они же присутствуют в меню альт-таб?
А вот учесть какой алгоритм используется, классический, flip или flip3d наверное надо.
Например, на вин7 с включенным аэро в меню альт-таб появляется рабочий стол, на который, правда, нельзя перейти нажатием alt+esc.
С выключенным же - рабочего стола нету.

8

Re: AHK: Порядок окон Z-Order

Я почему-то ориентируюсь пока на alt+esc.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Порядок окон Z-Order

По alt+esc на Win7 тоже на свернутые переключается.

10 (изменено: serzh82saratov, 2019-07-19 17:43:51)

Re: AHK: Порядок окон Z-Order

В общем рисуются очень мутные алгоритмы. Я думал винда просто хранит в массиве порядок активации окон.

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

AlwaysOnTop окна которые могут перекрывать окно в не зависимости от порядка активаций - не в счёт. WindowFromPoint не вариант.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Порядок окон Z-Order

Или правильнее сказать - какое окно было активно до активации текущего активного.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Порядок окон Z-Order

Отслеживай события смены активного окна.

13

Re: AHK: Порядок окон Z-Order

Я говорю про момент когда это требуется.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Порядок окон Z-Order

serzh82saratov пишет:

Как теперь узнать что окно скрипта находится поверх всех остальных окон?

Как-то так:

Gui, +hwndhGui
Gui, Show, w300 h300
Return

$F1:: MsgBox, % IsWindowOverlapped(hGui)

IsWindowOverlapped(hWnd) {
   WinGetPos, X, Y, W, H, ahk_id %hWnd%
   hRgn := DllCall("CreateRectRgn", Int, X, Int, Y, Int, X + W, Int, Y + H, Ptr)
   VarSetCapacity(RECT, 16), overlapped := false
   WinGet, list, List
   while list%A_Index% != hWnd {
      DllCall("GetWindowRect", Ptr, list%A_Index%, Ptr, &RECT)
      if DllCall("RectInRegion", Ptr, hRgn, Ptr, &RECT) && overlapped := true
         break
   }
   DllCall("DeleteObject", Ptr, hRgn)
   Return overlapped
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Порядок окон Z-Order

serzh82saratov пишет:

AlwaysOnTop окна которые могут перекрывать окно в не зависимости от порядка активаций - не в счёт.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16 (изменено: teadrinker, 2019-07-19 18:13:37)

Re: AHK: Порядок окон Z-Order

В смысле? У меня они как раз не учитываются.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Порядок окон Z-Order

А, понял, о чём ты. Ну принцип тот же, ещё проверяй на AlwaysOnTop.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Порядок окон Z-Order

Нет, AlwaysOnTop могло быть активировано после, и тогда оно уже "законно" перекрывает. Важен именно порядок активации, а не наложение.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Порядок окон Z-Order

Заметил что в Win10 AlwaysOnTop окна не участвуют в alt+esc.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Порядок окон Z-Order

serzh82saratov пишет:

Я говорю про момент когда это требуется.

Так для этого и существуют хуки.

21

Re: AHK: Порядок окон Z-Order

А что хукать, если запустили после активаций окон.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Порядок окон Z-Order

Так проверь z-order сначала, если нужно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: Порядок окон Z-Order

Панель задач видимо не входит в z-order, тогда что искать.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24

Re: AHK: Порядок окон Z-Order

Почему не входит? Смотри WinGet, list.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: Порядок окон Z-Order

Ок, посмотрю.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26

Re: AHK: Порядок окон Z-Order

По-моему не в ту степь пошли.
Z-Order это не список состоящий из последовательно активированных окон.

27 (изменено: teadrinker, 2019-07-19 22:31:30)

Re: AHK: Порядок окон Z-Order

Почему, при активации окно поднимается наверх z-order стека, уступая место окнам со стилем WS_EX_TOPMOST.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28

Re: AHK: Порядок окон Z-Order

Приведи пример в котором будет всегда показываться предыдущее активное окно.

29

Re: AHK: Порядок окон Z-Order

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30 (изменено: Malcev, 2019-07-19 22:57:16)

Re: AHK: Порядок окон Z-Order

Можно при запуске скрипта ставить хук и переактивировать все окна в системе.

31

Re: AHK: Порядок окон Z-Order

Можно, если делаешь для себя. Я бы не хотел, чтобы какое-либо приложение переактивировало мои окна.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32

Re: AHK: Порядок окон Z-Order

Сделал себе функцию чтобы не искать последнее активное окно проводника, а с него переключаться в активное до него.
Работает отлично, но если свернуть окно, оно улетает в конец Z-Order среди окон проводника, и моя цепочка нарушается, кстати в Alt+Tabе остаётся на месте, как и требуется.
Так как в Alt+Tab залезть нельзя, как мы выяснили, есть какие то идеи по решению вопроса, без запоминаний окон в скрипте?


1:: explorerTowindows()


explorerTowindows() {
	; проблема - если окно было свёрнуто оно поменяет порядок
	WinGet, List_id, List, ahk_class CabinetWClass ahk_exe explorer.exe
	Loop % List_id
	{
		If !DllCall("IsWindowVisible", Ptr, List_id%A_Index%)
			Continue  
		If !WinActive("ahk_id " List_id%A_Index%) || (A_Index = 2)
		{ 
			WinGet, Style, Style, % "ahk_id " List_id%A_Index%   
			If (Style & 0x20000000) ; WS_MINIMIZE  
				WinRestore, % "ahk_id " List_id%A_Index% 
			WinActivate, % "ahk_id " List_id%A_Index% 
			break
		}
		If WinActive("ahk_id " List_id%A_Index%)
			Continue
	} 
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

33

Re: AHK: Порядок окон Z-Order

Например возможно ли перенести как то окно вверх Z-Order после уведомления о сворачивании.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

34

Re: AHK: Порядок окон Z-Order

Z-Order управляется через setwindowpos.

35

Re: AHK: Порядок окон Z-Order

А, забыл, это тоже самое что включить и выключить AlwaysOnTop.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui