AutoHotkey задыхается от фигурной скобки той же строки для составных операторов if

У меня проблема, когда AutoHotkey сообщает мне, что отсутствует { перед «else», где я думаю, что мой код в порядке. (Это работало до тех пор, пока я не изменил связанный с окном if с Pidgin на qutIM)

^!p::
   IfWinExist ahk_class QWidget, ,qutIM {  ;if there is a qutIM-window other than the buddy-list...
      IfWinNotActive ahk_class QWidget, , qutIM {  ;ans it is not active...
         WinActivate
      } else {  ;the closing bracket in front of the else here puts AHK off...
         WinMinimize
      } 
   } else {  ;do some stuff with the buddy-list
      ; [...]
   } 
return

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


person Community    schedule 01.12.2009    source источник


Ответы (3)


Если я не ошибаюсь, стиль One True Brace можно использовать только с чистыми операторами If, а не с такими составными операторами, как IfWinExist.

Из документации по выражениям if:

Стиль One True Brace (OTB) можно дополнительно использовать с операторами if, которые являются выражениями (но не с традиционными операторами if).

Т.е. вам нужно использовать форму WinExist(), а не IfWinExist.

person PhiLho    schedule 01.12.2009
comment
Большое спасибо, это было решение моей проблемы (но я до сих пор удивляюсь, почему это работало до этого, oO) - person ; 02.12.2009
comment
@StevenVascellaro Судя по всему, вы сами ответили на свой вопрос, и это хорошо... :-) - person PhiLho; 04.09.2017

Как заявил Фило, стиль One True Brace (OTB) нельзя использовать с составными операторами if.

Хотя прямой функции для WinNotActive() нет, вы можете использовать ! в качестве модификатора для того же эффекта.

^!p::
   if WinExist("ahk_class QWidget", , "qutIM") {
      if !WinActive("ahk_class QWidget", , "qutIM") {
         WinActivate
      } else {
         WinMinimize
      } 
   } else {
      ; [...]
   } 
return
person Stevoisiak    schedule 28.08.2017

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

^!p::
IfWinExist, ahk_class Notepad ; if there is a qutIM-window other than the buddy-list
    {
    WinActivate
    Exists=True
    }
else ;the closing bracket in front of the else here puts AHK off...
    {
    WinMinimize
    Exists=False
    }
If Exists=True 
    MsgBox, do some stuff with the buddy-list ; dummy code
Else
    {
    Msgbox, Exiting App ; dummy code
    ExitApp
    }
person user224431    schedule 09.12.2009
comment
речь шла об открытии/скрытии окна чата многооконного IM-клиента... Как заметил PhiLho, я просто использовал неправильную нотацию для своих if, но все равно спасибо ;) - person ; 10.12.2009