1

Тема: AHK: Активация в двух окнах #IfWinActive

Доброго времени суток. В скрипте с помощью команды "#IfWinActive" , задал активацию скрипта только для двух окон. Почему то работает для одного окна. Помогите разобраться .

#IfWinActive ahk_class AkelPad4

#IfWinActive ahk_class Maxthon3Cls_MainFrm

#SingleInstance force

menuHTMLify =

(

"кавычки"%A_Tab%Alt+034/034

"(&c&)"`t`t«(&c&)»

«елочки»%A_Tab%Alt+0171/0187

«(&c&)»`t`t«(&c&)»

„лапки“%A_Tab%Alt+0132/0147

„(&c&)“`t`t„(&c&)“

(скобки)%A_Tab%Alt+0140/0141

((&c&))`t`t“(&c&)”

‘одинарные’%A_Tab%Alt+0145/0146

‘(&c&)’`t`t‘(&c&)’

[кв.скобки]%A_Tab%Alt+091/093

[(&c&)]`t`t‘(&c&)’

 вопрос? %A_Tab%Alt+037/037

(&c&)?`t`t‘(&c&)’

&Bold

<b>(&c&)</b>`t`t[b](&c&)[/b]

&Italic

<i>(&c&)</i>`t`t[i](&c&)[/i]

) ; и прочая, и прочая, и прочая...

Shift::
MButton::

 QLinesMenu:

   ; Send Ctrl+C, to copy selection to clipboard

   Send, {CTRL DOWN}{sc02E}{CTRL UP}  ;c

   Sleep 200   ; Wait to be sure there is something copied

   If ErrorLevel

   {

      CoordMode, ToolTip, Screen

      ToolTip, !! Sorry, cannot copy the selection !!,0,0

      Sleep, 3000

      tooltip

      Return
   }
   ; Create a menu

   CreateMenu("mHTML", menuHTMLify, "HTMLify")

   ; And show it

   Menu mHTML, Show

Return

HTMLify:

   ; Go here when choosing a menu item

   RunMenuItem(menuHTMLify, A_ThisMenuItemPos)

Return

CreateMenu(_menuName, _menuDef, _menuLabel)

{
   Loop Parse, _menuDef, `n

   {
      If (Mod(A_Index, 2) = 1) ; Odd

      {

         Menu %_menuName%, Add, %A_LoopField%, %_menuLabel%

      }
   }
}

RunMenuItem(_menuDef, _index)
{
   Loop Parse, _menuDef, `n
   {
      If (_index * 2 = A_Index)
      {

         If GetKeyState("Ctrl")
         {
            html := A_LoopField

            html := RegExReplace(html, ".*\t\t", "$2")

            StringReplace html, html, (&c&), %Clipboard%, All

            Clipboard := html

            Send, {Ctrl Down}{sc02F}{Ctrl Up}  ;v

            Break

            Return
         }

         ; Get HTML

         html := A_LoopField

         html := RegExReplace(html, "\t.*", "$2")

         ; Substitute special tag with clipboard content

         StringReplace html, html, (&c&), %Clipboard%, All

         ; Update the clipboard

         Clipboard := html

         Send, {Ctrl Down}{sc02F}{Ctrl Up}  ;v

         Break

      }
   }
}

#IfWinActive ahk_class Maxthon3Cls_MainFrm

$~LButton::

 If A_Cursor = IBeam

{

  KeyWait, LButton, D

Sleep, 30 

     SendInput, {Lalt Down}

Sleep, 30

   KeyWait, LButton

Sleep, 30

 SendInput, {Lalt Up}

Sleep, 30
}

  If A_Cursor = Unknown
  {
    Hwnd := WinExist("A")

 SendInput, +!{vk1}
 }
Return

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2 (изменено: Malcev, 2016-04-03 19:04:57)

Re: AHK: Активация в двух окнах #IfWinActive

#If WinActive("ahk_class AkelPad4") or WinActive("ahk_class Maxthon3Cls_MainFrm")

3

Re: AHK: Активация в двух окнах #IfWinActive

Ядрён, а Вы точно всё по инструкции делаете?

Androgen Belkin пишет:

Директивы #IfWin делают легким создание контекстно-чувствительных горячих клавиш [hotkeys] и строк автозамены [hotstrings]. Например:

#IfWinActive ahk_class Notepad
#space::MsgBox Вы нажали Win+Пробел в Блокноте.

Директивы #IfWin позиционны: они затрагивают все горячие клавиши и строки автозамены, физически находящиеся ниже них в скрипте. Также они взаимно исключаемы, то есть только самая последняя директива будет иметь эффект.

Чтобы отключить контекстную чувствительность, укажите директиву #IfWin, но опустите все ее параметры. Например:

#IfWinActive

4

Re: AHK: Активация в двух окнах #IfWinActive

Потому что следующая #IfWinActive отменяет условия срабатывания предыдущей. Так что делается либо через условную директиву #If и добавляется несколько условий через OR либо через один #IfWinActive, но для этого надо создать группу условий в секции инициализации :

GroupAdd MyProgs,ahk_class AkelPad4
GroupAdd MyProgs,ahk_class Maxthon3Cls_MainFrm
...
#IfWinActive ahk_group MyProgs
...
#IfWinActive

Но, если открыть AutoHotKey и посмотреть логи выполнения скриптов, то можно заметить что #If там крутится на выполнении любого действия, так что лучше делать все же через #IfWinActive.