1

Тема: AHK: Checkbox и suspend

Здравствуйте. Помогите пожалуйста.

Написал скрипт, что бы при зажатой клавише быстрее работало приближение. Все работает отлично.

$vk58::  ; кнопка X
Loop
{
    if not GetKeyState("vk58", "P")
        break
send {wheelup down}
sleep, 5
send {wheelup up}
sleep 5
}
return

Хотел бы вставить этот скрипт в GUI в Checkbox. Когда галочка стоит, то при зажатой X скрипт приближает, если галочка снята, то при зажатой X ничего не происходит и она работает как обычная клавиша.

Вот сам скрипт, который написал:

Gui, Add, CheckBox, x6 y127 w120 h30 gRunautozoom vautozoom, Auto zoom

Gui, Show, x242 y179 h379 w479, New GUI Window
Return

GuiClose:
ExitApp

Runautozoom:
Gui, Submit, NoHide
   if autozoom = 1
   {
      $vk58::  
      Loop
      {
         if not GetKeyState("vk58", "P")
            break
      send {wheelup down}
      sleep, 5
      send {wheelup up}
      sleep 5
      }
      return
    }
   If autozoom = 0
тут как-то отключить
return

Скрипт будет дополняться подобными скриптами поэтому просто использовать Suspend не удобно иначе он отключит ВСЕ горячие клавиши, которые нужны в данный момент.
В справке прочитал: "Suspend [, Mode] On: Отключает все горячие клавиши кроме тех, о которых рассказано в примечаниях." Думал сделать таким образом, погуглил, но не нашел ничего про suspend и его примечаниях.

2 (изменено: serzh82saratov, 2013-04-07 21:23:59)

Re: AHK: Checkbox и suspend

Вам Hotkey нужен.

Скрипт будет дополняться подобными скриптами

Если под "скриптами" вы имеете ввиду ещё гор. клавиши, то наверное так будет проще:



#UseHook
Hotkey := {"AutoZoom":"vk58","F1":"F1"} 
    
Gui, Add, CheckBox, gCheckBox vAutoZoom , Auto zoom 
Gui, Add, CheckBox, gCheckBox vF1 , F1
Gui, Show,, CheckBox
Return

CheckBox:
    GuiControlGet, %A_GuiControl%   
    Hotkey, % Hotkey[A_GuiControl], %A_GuiControl%, % %A_GuiControl% = 1 ? "On" : "Off"
    return

AutoZoom:
    ToolTip %A_ThisLabel% работает
    Sleep 50
    ToolTip
    return 
    
F1:
    ToolTip %A_ThisLabel% работает
    Sleep 50
    ToolTip
    return
    
GuiClose:
    ExitApp

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

3

Re: AHK: Checkbox и suspend

Забыл, подпрограмму AutoZoom замените на:



AutoZoom:
    Loop
    {
        if not GetKeyState("vk58", "P")
            break
        send {wheelup down}
        sleep, 5
        send {wheelup up}
        sleep 5
    }
    return

Ну и F1 в качестве примера простоты добавления новых гор. клавиш.

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

4

Re: AHK: Checkbox и suspend

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

CheckBox:
    GuiControlGet, %A_GuiControl%   
    Hotkey, % Hotkey[A_GuiControl], %A_GuiControl%, % %A_GuiControl% = 1 ? "On" : "Off"
    return

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

5 (изменено: serzh82saratov, 2013-04-07 23:14:03)

Re: AHK: Checkbox и suspend

На примере при нажатии на CheckBox "Auto zoom"

GuiControlGet, %A_GuiControl% использую вместо Gui, Submit, NoHide для повышения производительности, так как сохранение всех переменных ненужно.
На месте "%A_GuiControl%" будет "AutoZoom" - имя переменной контрола вызвавшей процедуру.
Главная строка:

справка пишет:

Hotkey

Создание, изменение, включение или отключение горячих клавиш в запущенном скрипте.
Hotkey, KeyName , Label, Options

Hotkey, % Hotkey[A_GuiControl], %A_GuiControl%, % %A_GuiControl% = 1 ? "On" : "Off"

то есть:
KeyName = % Hotkey[A_GuiControl]
Label = %A_GuiControl%
Options = % %A_GuiControl% = 1 ? "On" : "Off"

KeyName - сама горячая кнопка
Получаем и используем как результат в выражении % Hotkey[A_GuiControl] значение ключа из %A_GuiControl% то есть "AutoZoom" из асс.массива "Hotkey" Hotkey := {"AutoZoom":"vk58","F1":"F1"} то есть "vk58"

Label - метка к которой будет переход, если этот Hotkey включен.
То есть на месте %A_GuiControl% будет "AutoZoom".

Options - нам надо включить (создать) "On", или выключить "Off" Hotkey
% %A_GuiControl% = 1 ? "On" : "Off" на месте %A_GuiControl% будет статус чекбокса, если он = 1, то включаем Hotkey, если нет то "Off". То есть используем результат тернарного выражения.

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

6

Re: AHK: Checkbox и suspend

Вот подпрограмма в немного упрощённом виде



CheckBox:
    Gui, Submit, NoHide
    Key := Hotkey[A_GuiControl]
    Label := A_GuiControl
    If %A_GuiControl% = 1
        Options = On
    Else
        Options = Off
    Hotkey, %Key%, %Label%, %Options%
    return

Все эти переменные, массивы и выражения нужны для удобства последующего добавления кнопок. Для удобства понимания, тоже самое:


#UseHook  
Gui, Add, CheckBox, gCheckBoxAutoZoom vAutoZoom , Auto zoom  
Gui, Add, CheckBox, gCheckBoxF1 vF1 , F1 
Gui, Show,, CheckBox
Return

CheckBoxAutoZoom:
    Gui, Submit, NoHide 
    If AutoZoom = 1
        Hotkey, vk58, AutoZoom, On
    Else
        Hotkey, vk58, AutoZoom, Off
    return
    
CheckBoxF1:
    Gui, Submit, NoHide 
    If F1 = 1
        Hotkey, F1, F1, On
    Else
        Hotkey, F1, F1, Off
    return

AutoZoom:
    ToolTip %A_ThisLabel% работает
    Sleep 50
    ToolTip
    return  
    
F1:
    ToolTip %A_ThisLabel% работает
    Sleep 50
    ToolTip
    return 
    
GuiClose:
    ExitApp

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

7

Re: AHK: Checkbox и suspend

Спасибо еще раз)