1 (изменено: serzh82saratov, 2012-09-07 00:19:18)

Тема: AHK: Зависимое окно, блокирует владельца

Ничего не могу понять. Всё по справке делаю, но после удаления второго окна по кнопке отмена, главное сворачивается, да ещё и остаётся блокированным!?

Gui, +HWNDguiHWND
Gui, Add, Button, w111 h111 gOK, OK
Gui, Show, w802 h600
Return
OK:
WinGetPos , xpos, ypos, , , ahk_id %guiHWND%
xpos := (xpos+176)
ypos := (ypos+280)
Gui +Disabled
Gui, 2:+owner
Gui, 2:Add, Edit, R1 x5 x5 w362 ReadOnly -Background Section
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Edit, R1 w362 xs ys+36 ReadOnly -Background
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Button,  w80 h27 hp yp+36 wp+20 xp-20 gCancelWindowSelect, Отмена
Gui, 2:+AlwaysOnTop -Border +ToolWindow
Gui, 2:Font, s8 italic, Arial
Gui, 2:Color, B0C4DE
Gui, 2:Add, Text, xs+86 ys+66 Center, Активируйте нужное окно`rи выберите один из вариантов
Gui, 2:Show,  h110 w450 x%xpos% y%ypos%
Return
CancelWindowSelect:
Gui -Disabled 
Gui, 2:Destroy
Return
Esc::Exitapp
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Зависимое окно, блокирует владельца


; ...
; ...
CancelWindowSelect:
Gui 1:-Disabled
; ...
; ...

3

Re: AHK: Зависимое окно, блокирует владельца

Gui, 1:+HWNDguiHWND
Gui, 1:Add, Button, w111 h111 gOK, OK
Gui, 1:Show, w802 h600
Return

OK:
    WinGetPos , xpos, ypos, , , ahk_id %guiHWND%
    xpos := (xpos+176)
    ypos := (ypos+280)
    Gui, 1:+Disabled
    Gui, 2:+owner
    Gui, 2:Add, Edit, R1 x5 x5 w362 ReadOnly -Background Section
    Gui, 2:Add, Button, w50 xp+380 yp hp, OK
    Gui, 2:Add, Edit, R1 w362 xs ys+36 ReadOnly -Background
    Gui, 2:Add, Button, w50 xp+380 yp hp, OK
    Gui, 2:Add, Button,  w80 h27 hp yp+36 wp+20 xp-20 gCancelWindowSelect, Отмена
    Gui, 2:+AlwaysOnTop -Border +ToolWindow
    Gui, 2:Font, s8 italic, Arial
    Gui, 2:Color, B0C4DE
    Gui, 2:Add, Text, xs+86 ys+66 Center, Активируйте нужное окно`rи выберите один из вариантов
    Gui, 2:Show,  h110 w450 x%xpos% y%ypos%
    Return

CancelWindowSelect:
    Gui, 1:-Disabled
    Gui, 2:Destroy
    Return
Esc::Exitapp

CancelWindowSelect выполняется в потоке Gui, 2:

4

Re: AHK: Зависимое окно, блокирует владельца

Спасибо! А почему в таком варианте, второе окно запускается только один раз, то бишь после закрытия не появляется снова по кнопке?

Gui, +HWNDguiHWND +owner
Gui, Add, Button, w111 h111 gOK, OK
Gui, Show, w802 h600
Return
OK:
WinGetPos , xpos, ypos, , , ahk_id %guiHWND%
xpos := (xpos+176)
ypos := (ypos+280)
Gui +Disabled
Gui, 2:+owner
Gui, 2:Add, Edit, R1 x5 x5 w362 vclass ReadOnly -Background Section
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Edit, R1 w362 xs ys+36 vtitle ReadOnly -Background
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Button,  w80 h27 hp yp+36 wp+20 xp-20 gCancelWindowSelect, Отмена
Gui, 2:+AlwaysOnTop -Border +ToolWindow
Gui, 2:Font, s8 italic, Arial
Gui, 2:Color, B0C4DE
Gui, 2:Add, Text, xs+86 ys+66 Center, Активируйте нужное окно`rи выберите один из вариантов
Gui, 2:Show,  h110 w450 x%xpos% y%ypos%
Loop  
{  
WinGetTitle, title, A
WinGetClass, class, A
GuiControl, 2:, title, %title%
GuiControl, 2:, class, ahk_class %class%
}
Return
CancelWindowSelect:
Gui 1:-Disabled
Gui, 2:Destroy
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5 (изменено: creature.ws, 2012-09-07 00:49:41)

Re: AHK: Зависимое окно, блокирует владельца

Clicking on a control while its g-label is already running from a prior click will have no effect and the event is discarded. To prevent this, use Critical as the subroutine's first line (however, this will also buffer/defer other threads such as the press of a hotkey).

Бесконечные циклы это слишком надёжное решение.

6

Re: AHK: Зависимое окно, блокирует владельца

Извращённое решение

Gui, +HWNDguiHWND +owner
Gui, Add, Button, w111 h111 gOK, OK
Gui, Show, w802 h600
Return
OK:
WinGetPos , xpos, ypos, , , ahk_id %guiHWND%
xpos := (xpos+176)
ypos := (ypos+280)
Gui +Disabled
Gui, 2:+owner
Gui, 2:Add, Edit, R1 x5 x5 w362 vclass ReadOnly -Background Section
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Edit, R1 w362 xs ys+36 vtitle ReadOnly -Background
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Button,  w80 h27 hp yp+36 wp+20 xp-20 gCancelWindowSelect, Отмена
Gui, 2:+AlwaysOnTop -Border +ToolWindow
Gui, 2:Font, s8 italic, Arial
Gui, 2:Color, B0C4DE
Gui, 2:Add, Text, xs+86 ys+66 Center, Активируйте нужное окно`rи выберите один из вариантов
Gui, 2:Show,  h110 w450 x%xpos% y%ypos%
Loop
{  
WinGetTitle, title, A
WinGetClass, class, A
GuiControl, 2:, title, %title%
GuiControl, 2:, class, ahk_class %class%
if CancelWindowSelect = 1
{ 
CancelWindowSelect =
Gui 1:-Disabled
Gui, 2:Destroy
Gui, Show
break
}
}
Return
CancelWindowSelect:
CancelWindowSelect = 1
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7 (изменено: creature.ws, 2012-09-07 00:55:06)

Re: AHK: Зависимое окно, блокирует владельца

OFF: Форматирование кода отступами вы не используете с целью «повышения порога вхождения» для отвечающих?

8 (изменено: serzh82saratov, 2012-09-07 00:55:33)

Re: AHK: Зависимое окно, блокирует владельца

Только вот не понятно как я собрался сохранять параметры нужного окна, если в момент нажатия кнопки активным станет скрипт

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

9

Re: AHK: Зависимое окно, блокирует владельца

creature.ws пишет:

OFF: Форматирование кода отступами вы не используете с целью «повышения порога вхождения» для отвечающих?

Как то не думал об этом, мне так удобнее или проще. Исправлюсь.

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

10 (изменено: Irbis, 2012-09-07 01:48:09)

Re: AHK: Зависимое окно, блокирует владельца

serzh82saratov пишет:

Только вот не понятно как я собрался сохранять параметры нужного окна, если в момент нажатия кнопки активным станет скрипт

Наверное, нужно сделать так, чтобы скрипт не обрабатывал параметры, когда скрипт становится активен?
При создании окна #2 cохраняем его id в переменную Gui2:

...
Gui, 2:+owner +HwndGui2
...

Затем в цикле "извращённого решения (с)" сначала делаем проверку, а не скрипт ли сейчас активен:

; ...
Loop
{
id:=WinActive("A")
if (id = Gui2)
  Continue
WinGetTitle, title, A
WinGetClass, class, A
; Далее по тексту

11

Re: AHK: Зависимое окно, блокирует владельца

Irbis

Спасибо! Я так и поступил, правда очень долго думал.

WinGet, ID , ID, A
if ID = %guiHWND%
Return

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

12 (изменено: Irbis, 2012-09-07 02:12:32)

Re: AHK: Зависимое окно, блокирует владельца

Не очень хорошо получается при таком раскладе, что при нажатии на кнопку "Отмена" скрипт пропускает уничтожение 2го окна и активацию главного.
Так будет лучше:

Gui, +HWNDguiHWND +owner
Gui, Add, Button, w111 h111 gOK, OK
Gui, Show, w802 h600
Return
OK:
WinGetPos , xpos, ypos, , , ahk_id %guiHWND%
xpos := (xpos+176)
ypos := (ypos+280)
Gui +Disabled
Gui, 2:+owner +HwndGui2
Gui, 2:Add, Edit, R1 x5 x5 w362 vclass ReadOnly -Background Section
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Edit, R1 w362 xs ys+36 vtitle ReadOnly -Background
Gui, 2:Add, Button, w50 xp+380 yp hp, OK
Gui, 2:Add, Button,  w80 h27 hp yp+36 wp+20 xp-20 gCancelWindowSelect, Отмена
Gui, 2:+AlwaysOnTop -Border +ToolWindow
Gui, 2:Font, s8 italic, Arial
Gui, 2:Color, B0C4DE
Gui, 2:Add, Text, xs+86 ys+66 Center, Активируйте нужное окно`rи выберите один из вариантов
Gui, 2:Show,  h110 w450 x%xpos% y%ypos%
Loop
{
sleep 100
if CancelWindowSelect = 1
   break
if (Gui2 = WinActive("A"))
  Continue
WinGetTitle, title, A
WinGetClass, class, A
GuiControl, 2:, title, %title%
GuiControl, 2:, class, ahk_class %class%
}
CancelWindowSelect =
Gui 1:-Disabled
Gui, 2:Destroy
Gui, Show
Return
CancelWindowSelect:
CancelWindowSelect = 1
Return