1

Тема: AHK: Открытие второго окна GUI относительно первого

Доброго времени суток. Вот в чем проблема, нужно сделать открытие второго окна относительно первого в скрипте, выглядеть должно это примерно так(не обращайте внимание на содержимое 2 окно, будет дорабатываться):
https://i.imgur.com/t2sWvNt.png
Пробовал сделать по данному уроку, но второе окно не выезжает.
Вот код который у меня получился:

   Gui, +hwndhGui1
   Gui, Font, s12 cBlack, Montserrat SemiBold
   Gui, Add, Text, x0 y20 w320 h20 +0x200 +Center, Помощник для военнослужащего
   Gui, Font
   Gui, Font, s10 cBlack, Montserrat Medium
   Gui, Add, Edit, x17 y70 w135 h20 vname, %name%
   Gui, Add, Text, x169 y70 w100 h20 +Left, Имя
   Gui, Add, Edit, x17 y107 w135 h20 vfamily, %family%
   Gui, Add, Text, x169 y107 w100 h20 +Left, Фамилия
   Gui, Add, Edit, x17 y144 w135 h20 vpnumber, %pnumber%
   Gui, Add, Text, x169 y144 w115 h20 +Left, Номер телефона
   Gui, Add, Edit, x17 y181 w135 h20 vrank, %rank%
   Gui, Add, Text, x169 y181 w50 h20 +Left, Звание
   Gui, Add, Edit, x17 y218 w135 h20 vsubdivision, %subdivision%
   Gui, Add, Text, x169 y218 w115 h20 +Left, Подразделение
   Gui, Font
   Gui, Font, s10 cBlack, Montserrat Medium
   Gui, Add, Button, x17 y268 w84 h24 gSave, Сохранить
   Gui, Add, Button, x118 y268 w84 h24 gWagering vWagering, % Chr(0x2192)
   Gui, Add, Button, x219 y268 w84 h24, Важно
   Gui, Add, Button, x17 y309 w84 h24 gHelp, Помощь
   Gui, Add, Button, x118 y309 w84 h24 gClose, Закрыть
   Gui, Add, Button, x219 y309 w84 h24 gReload, Рестарт
   Gui, Add, Text, x17 y363 w100 h20, Автор: Betskiy
   Gui, Add, Link, x230 y363 w71 h20, <a href="https://vk.com/id188433015">Вконтакте</a>
   Gui, Add, Text, x0 y423 w320 h20 +Center, Специально для Amazing Role Play

   Gui, Show, w320 h463, Army Helper

   Gui, 2:+hwndhGui2 +Owner4 -Caption +Border
   Gui, 2: Add, Tab3, x0 y0 w1048 h463, Основное|КМБ|Посты 1|Посты 2
   Gui, 2: Tab, 1
   Gui, 2: Add, Text, x368 y40 w234 h23, Отыгровки используемые в помощнике
   Gui, 2: Add, Text, x16 y72 w108 h23, Команда на русском
   Gui, 2: Add, Text, x404 y72 w125 h23, Команда на английском
   Gui, 2: Add, Text, x696 y72 w50 h23, Значение
   Gui, 2: Add, Text, x16 y112 w120 h23, .разак
   Gui, 2: Add, Text, x408 y112 w120 h23, /hfpfr
   Gui, 2: Add, Text, x696 y112 w138 h23, Разборка автомата АК-47
   Gui, 2: Add, Text, x16 y152 w120 h23, .сбак
   Gui, 2: Add, Text, x408 y152 w120 h23, /c,fr
   Gui, 2: Add, Text, x696 y152 w120 h23, Сборка автомата АК-47
   Gui, 2: Add, Text, x16 y192 w120 h23, .присяга
   Gui, 2: Add, Text, x408 y192 w120 h23, /ghbczuf
   Gui, 2: Add, Text, x696 y192 w76 h23, Сдача присяги
   Gui, 2: Add, Text, x16 y232 w120 h23, .ку
   Gui, 2: Add, Text, x408 y232 w120 h23, /re
   Gui, 2: Add, Text, x696 y232 w176 h23, Выполнить воинское приветствие
   Gui, 2: Add, Text, x16 y272 w120 h23, .визит
   Gui, 2: Add, Text, x408 y272 w120 h23, /dbpbn
   Gui, 2: Add, Text, x696 y272 w104 h23, Узнать цель визита
   Gui, 2: Add, Text, x16 y312 w120 h23, .удост
   Gui, 2: Add, Text, x408 y312 w120 h23, /eljcn
   Gui, 2: Add, Text, x696 y312 w142 h23, Предъявить удостоверение
   Gui, 2: Add, Text, x16 y352 w120 h23, .пп
   Gui, 2: Add, Text, x408 y352 w120 h23, /gg
   Gui, 2: Add, Text, x696 y352 w94 h23, Спросить паспорт
   Gui, 2: Add, Text, x16 y392 w120 h23, .вп
   Gui, 2: Add, Text, x408 y392 w120 h23, .dg
   Gui, 2: Add, Text, x696 y392 w120 h23, Взять паспорт
   Gui, 2: Tab

   VarSetCapacity(WI, 60)

   OnMessage(0x3, "WM_MOVE")
   OnMessage(0x112, "WM_MOVE")

   Return

   Wagering:
      DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
      if i := !i
         Gui, 2:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
      . " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " hide"
      DllCall("AnimateWindow", Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002))
      GuiControl,, Wagering, % Chr(0x2190|(i ? 0 : 2))
   return

   GuiClose:
   ExitApp

   WM_MOVE(wp, lp, msg, hwnd)
   {
      global hGui1, WI, i
      static k
      if (msg = 0x112)
      {
         if (wp = 0xF020 && k := 1) // SC_MINIMIZE = 0xF020
         Gui, 2:Show, Hide

         if (wp = 0xF120 && !(k := 0) && i) // SC_RESTORE = 0xF120
         Gui, 2:Show
      }

      if (!i || hwnd != hGui1 || k = 1)
         return

      DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
      Gui, 2:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
      . " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " NA"
   }

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

P.S. если что, вот такие ошибки выдает:

Error:  Invalid or nonexistent owner or parent window.

Specifically: Owner4

	Line#
	048: Gui,Add,Button,x17 y309 w84 h24 gHelp,Помощь
	049: Gui,Add,Button,x118 y309 w84 h24 gClose,Закрыть
	050: Gui,Add,Button,x219 y309 w84 h24 gReload,Рестарт
	051: Gui,Add,Text,x17 y363 w100 h20,Автор: Betskiy
	052: Gui,Add,Link,x230 y363 w71 h20,<a href="https://vk.com/id188433015">Вконтакте</a>
	053: Gui,Add,Text,x0 y423 w320 h20 +Center,Специально для Amazing Role Play
	055: Gui,Show,w320 h463,Army Helper
--->	057: Gui,2:+hwndhGui2 +Owner4
	058: Gui,2: Add,Tab3,x0 y0 w1048 h463,Основное|КМБ|Посты 1|Посты 2
	059: Gui,2: Tab,1
	060: Gui,2: Add,Text,x368 y40 w234 h23,Отыгровки используемые в помощнике
	061: Gui,2: Add,Text,x16 y72 w108 h23,Команда на русском
	062: Gui,2: Add,Text,x404 y72 w125 h23,Команда на английском
	063: Gui,2: Add,Text,x696 y72 w50 h23,Значение
	064: Gui,2: Add,Text,x16 y112 w120 h23,.разак

The current thread will exit.Error:  Invalid option.

Specifically: x y h hide

	Line#
	088: Gui,2: Tab
	090: VarSetCapacity(WI, 60)  
	092: OnMessage(0x3, "WM_MOVE")  
	093: OnMessage(0x112, "WM_MOVE")  
	095: Return
	098: DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)  
	099: if i := !i  
--->	100: Gui,2:Show,"x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt") . " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " hide"
	102: DllCall("AnimateWindow", Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002))  
	103: GuiControl,,Wagering,Chr(0x2190|(i ? 0 : 2))
	104: Return
	107: ExitApp
	110: {
	113: if (msg = 0x112)  
	114: {

The current thread will exit.Error:  Invalid option.

Specifically: x y h hide

	Line#
	088: Gui,2: Tab
	090: VarSetCapacity(WI, 60)  
	092: OnMessage(0x3, "WM_MOVE")  
	093: OnMessage(0x112, "WM_MOVE")  
	095: Return
	098: DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)  
	099: if i := !i  
--->	100: Gui,2:Show,"x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt") . " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " hide"
	102: DllCall("AnimateWindow", Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002))  
	103: GuiControl,,Wagering,Chr(0x2190|(i ? 0 : 2))
	104: Return
	107: ExitApp
	110: {
	113: if (msg = 0x112)  
	114: {

The current thread will exit.

2

Re: AHK: Открытие второго окна GUI относительно первого

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

Gui,2:+hwndhGui2 +Owner4

?

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

3 (изменено: Betskiy, 2022-07-20 02:11:54)

Re: AHK: Открытие второго окна GUI относительно первого

teadrinker пишет:

Во-первых, вы пробовали запустить код, который выложили?


Да да, запускал в VS Code.

Во-вторых, что должна означать строчка

Gui,2:+hwndhGui2 +Owner4

?

А вот по поводу этой строчки не совсем понимаю что это значит, увидел в теме на которую ссылку приложил.

4 (изменено: Betskiy, 2022-07-20 01:08:40)

Re: AHK: Открытие второго окна GUI относительно первого

Кстати по вашему примеру делал.

5

Re: AHK: Открытие второго окна GUI относительно первого

Betskiy, ознакомьтесь, пожалуйста, с Правилами, отредактируйте свои посты. Обратите внимание на точки в конце предложений и правила цитирования.

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

6

Re: AHK: Открытие второго окна GUI относительно первого

Уже лучше, но до правил цитирования, похоже, не дочитали.

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

7 (изменено: Betskiy, 2022-07-20 02:12:25)

Re: AHK: Открытие второго окна GUI относительно первого

Проверьте правильно?

8

Re: AHK: Открытие второго окна GUI относительно первого

Можете здесь процитировать то, что написано в правилах о цитировании?

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

9 (изменено: Betskiy, 2022-07-20 02:12:52)

Re: AHK: Открытие второго окна GUI относительно первого

Избегайте избыточного цитирования!

10

Re: AHK: Открытие второго окна GUI относительно первого

Вы только это увидели? Там же ещё что-то есть.

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

11 (изменено: Betskiy, 2022-07-20 02:13:35)

Re: AHK: Открытие второго окна GUI относительно первого

Не цитируйте пост, на который отвечаете, целиком. Используйте цитирование только в том случае, если иначе не будет понятно, на что Вы отвечаете, и старайтесь выбирать только ключевые фразы.

12

Re: AHK: Открытие второго окна GUI относительно первого

Как вы понимаете эту фразу:

Не цитируйте пост, на который отвечаете, целиком.

?

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

13

Re: AHK: Открытие второго окна GUI относительно первого

Понял что не нужно весь пост цитировать, а только ту часть, на которую отвечаю.

14

Re: AHK: Открытие второго окна GUI относительно первого

А вот эту:

Используйте цитирование только в том случае, если иначе не будет понятно, на что Вы отвечаете

?

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

15

Re: AHK: Открытие второго окна GUI относительно первого

Использовать цитирование если не понятно, на что я отвечаю.

16

Re: AHK: Открытие второго окна GUI относительно первого

А тогда какой смысл цитировать предыдущий пост целиком, тем более, если он состоит всего из одной фразы?

Betskiy пишет:
teadrinker пишет:

Можете здесь процитировать то, что написано в правилах о цитировании?

Избегайте избыточного цитирования!

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

17

Re: AHK: Открытие второго окна GUI относительно первого

Соглашусь, смысла нет.

18

Re: AHK: Открытие второго окна GUI относительно первого

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

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

19

Re: AHK: Открытие второго окна GUI относительно первого

Betskiy пишет:

Да да, запускал в VS Code.

Теперь попробуйте скопировать код из первого поста как он есть, сохранить в отдельный файл и запустить его двойным кликом. Что происходит?

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

20

Re: AHK: Открытие второго окна GUI относительно первого

https://i.imgur.com/e4X3CpX.png

21

Re: AHK: Открытие второго окна GUI относительно первого

Вот и разберитесь с этой ошибкой, прежде чем выкладывать код.

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

22

Re: AHK: Открытие второго окна GUI относительно первого

При таком коде запускается скрипт:

   #Persistent
   #CommentFlag //

   #SingleInstance Force
   #NoEnv
   SetWorkingDir %A_ScriptDir%
   SetBatchLines -1

   Gui, +hwndhGui1
   Gui, Font, s12 cBlack, Montserrat SemiBold
   Gui, Add, Text, x0 y20 w320 h20 +0x200 +Center, Помощник для военнослужащего
   Gui, Font
   Gui, Font, s10 cBlack, Montserrat Medium
   Gui, Add, Edit, x17 y70 w135 h20 vname, %name%
   Gui, Add, Text, x169 y70 w100 h20 +Left, Имя
   Gui, Add, Edit, x17 y107 w135 h20 vfamily, %family%
   Gui, Add, Text, x169 y107 w100 h20 +Left, Фамилия
   Gui, Add, Edit, x17 y144 w135 h20 vpnumber, %pnumber%
   Gui, Add, Text, x169 y144 w115 h20 +Left, Номер телефона
   Gui, Add, Edit, x17 y181 w135 h20 vrank, %rank%
   Gui, Add, Text, x169 y181 w50 h20 +Left, Звание
   Gui, Add, Edit, x17 y218 w135 h20 vsubdivision, %subdivision%
   Gui, Add, Text, x169 y218 w115 h20 +Left, Подразделение
   Gui, Font
   Gui, Font, s10 cBlack, Montserrat Medium
   Gui, Add, Button, x17 y268 w84 h24 gSave, Сохранить
   Gui, Add, Button, x118 y268 w84 h24 gWagering vWagering, % Chr(0x2192)
   Gui, Add, Button, x219 y268 w84 h24, Важно
   Gui, Add, Button, x17 y309 w84 h24 gHelp, Помощь
   Gui, Add, Button, x118 y309 w84 h24 gClose, Закрыть
   Gui, Add, Button, x219 y309 w84 h24 gReload, Рестарт
   Gui, Add, Text, x17 y363 w100 h20, Автор: Betskiy
   Gui, Add, Link, x230 y363 w71 h20, <a href="https://vk.com/id188433015">Вконтакте</a>
   Gui, Add, Text, x0 y423 w320 h20 +Center, Специально для Amazing Role Play

   Gui, Show, w320 h463, Army Helper

   Gui, 2:+hwndhGui2 +Owner4 -Caption +Border
   Gui, 2: Add, Tab3, x0 y0 w1048 h463, Основное|КМБ|Посты 1|Посты 2
   Gui, 2: Tab, 1
   Gui, 2: Add, Text, x368 y40 w234 h23, Отыгровки используемые в помощнике
   Gui, 2: Add, Text, x16 y72 w108 h23, Команда на русском
   Gui, 2: Add, Text, x404 y72 w125 h23, Команда на английском
   Gui, 2: Add, Text, x696 y72 w50 h23, Значение
   Gui, 2: Add, Text, x16 y112 w120 h23, .разак
   Gui, 2: Add, Text, x408 y112 w120 h23, /hfpfr
   Gui, 2: Add, Text, x696 y112 w138 h23, Разборка автомата АК-47
   Gui, 2: Add, Text, x16 y152 w120 h23, .сбак
   Gui, 2: Add, Text, x408 y152 w120 h23, /c,fr
   Gui, 2: Add, Text, x696 y152 w120 h23, Сборка автомата АК-47
   Gui, 2: Add, Text, x16 y192 w120 h23, .присяга
   Gui, 2: Add, Text, x408 y192 w120 h23, /ghbczuf
   Gui, 2: Add, Text, x696 y192 w76 h23, Сдача присяги
   Gui, 2: Add, Text, x16 y232 w120 h23, .ку
   Gui, 2: Add, Text, x408 y232 w120 h23, /re
   Gui, 2: Add, Text, x696 y232 w176 h23, Выполнить воинское приветствие
   Gui, 2: Add, Text, x16 y272 w120 h23, .визит
   Gui, 2: Add, Text, x408 y272 w120 h23, /dbpbn
   Gui, 2: Add, Text, x696 y272 w104 h23, Узнать цель визита
   Gui, 2: Add, Text, x16 y312 w120 h23, .удост
   Gui, 2: Add, Text, x408 y312 w120 h23, /eljcn
   Gui, 2: Add, Text, x696 y312 w142 h23, Предъявить удостоверение
   Gui, 2: Add, Text, x16 y352 w120 h23, .пп
   Gui, 2: Add, Text, x408 y352 w120 h23, /gg
   Gui, 2: Add, Text, x696 y352 w94 h23, Спросить паспорт
   Gui, 2: Add, Text, x16 y392 w120 h23, .вп
   Gui, 2: Add, Text, x408 y392 w120 h23, .dg
   Gui, 2: Add, Text, x696 y392 w120 h23, Взять паспорт
   Gui, 2: Tab

   VarSetCapacity(WI, 60)

   OnMessage(0x3, "WM_MOVE")
   OnMessage(0x112, "WM_MOVE")

   Return

   Wagering:
      DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
      if i := !i
         Gui, 2:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
      . " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " hide"
      DllCall("AnimateWindow", Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002))
      GuiControl,, Wagering, % Chr(0x2190|(i ? 0 : 2))
   return

   GuiClose:
   ExitApp

   WM_MOVE(wp, lp, msg, hwnd)
   {
      global hGui1, WI, i
      static k
      if (msg = 0x112)
      {
         if (wp = 0xF020 && k := 1) // SC_MINIMIZE = 0xF020
         Gui, 2:Show, Hide

         if (wp = 0xF120 && !(k := 0) && i) // SC_RESTORE = 0xF120
         Gui, 2:Show
      }

      if (!i || hwnd != hGui1 || k = 1)
         return

      DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
      Gui, 2:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
      . " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " NA"
   }

    Help:
      Run https://vk.com/id188433015 // Переход по ссылке
   Return

   Close:
      MsgBox, 4, Внимание!, Вы действительно хотите закрыть программу?
      IfMsgBox, Yes
      {
         ExitApp
      }
      IfMsgBox, No
      {
         Return
      }
   Return

   Reload:
      Reload // Перезагрузка программы
   Return

   Save:
      Gui, Submit, NoHide
      IniWrite, %name%, data/info.egl, USER, name
      IniWrite, %family%, data/info.egl, USER, family
      IniWrite, %subdivision%, data/info.egl, USER, subdivision
      IniWrite, %rank%, data/info.egl, USER, rank
      IniWrite, %pnumber%, data/info.egl, USER, pnumber
      MsgBox, 0, Сохранение данных, Введенные вами данные успешно сохранены.
      Reload
   Return

Выдает сначала такую ошибку:
https://i.imgur.com/RVSRa3D.png
Потом при нажатии кнопки открытия второго окна такую выдает:
https://i.imgur.com/zwj14du.png
А когда нажимаешь ОК, выдает такую:
https://i.imgur.com/HKSLVPm.png
И скрипт закрывается полностью.

23

Re: AHK: Открытие второго окна GUI относительно первого

Теперь посмотрите в справке, что означает опция Owner у Gui.
Вообще я бы советовал сделать так. Запишите сначала код, который взяли за основу, убедитесь в его работоспособности. Затем попробуйте начать изменять его, но не добавляйте сразу много кода, а по одной строке. И каждый раз проверяйте, работает, или нет. Когда после добавления очередной строки перестанет работать, попробуйте понять, почему. Не забывайте заглядывать в справку, но не переводную, а в оригинал. Если совсем не сможете разобраться, задавайте вопросы тут.

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