1 (изменено: NonameDayz, 2013-03-28 02:12:08)

Тема: AHK: Не могу разобраться с Gui, Add, Hotkey

Пишу скрипт для Доты 2.
Не могу понять почему когда задаю любой из хоткеев в Gui они не выполняют отведенные им части скрипта.

IniRead, ColdSnap, %A_ScriptDir%\config.ini, Skills, ColdSnap
IniRead, GhostWalk, %A_ScriptDir%\config.ini, Skills, GhostWalk
IniRead, IceWall, %A_ScriptDir%\config.ini, Skills, IceWall
IniRead, Emp, %A_ScriptDir%\config.ini, Skills, Emp
IniRead, Torando, %A_ScriptDir%\config.ini, Skills, Tornado
IniRead, Alacrity, %A_ScriptDir%\config.ini, Skills, Alacrity
IniRead, SunStrike, %A_ScriptDir%\config.ini, Skills, SunStrike
IniRead, ForgeSpirit, %A_ScriptDir%\config.ini, Skills, ForgeSpirit
IniRead, Meteor, %A_ScriptDir%\config.ini, Skills, Meteor
IniRead, DeafeningBlast, %A_ScriptDir%\config.ini, Skills, DeafeningBlast

Gui, Add, Picture, x300 y0 w150 h80 , E:\1\icon.jpg
Gui, Add, Picture, x262 y110 w80 h80 , E:\1\ability5.jpg
Gui, Add, Picture, x262 y200 w80 h80 , E:\1\ability6.jpg
Gui, Add, Picture, x262 y290 w80 h80 , E:\1\ability7.jpg
Gui, Add, Picture, x262 y380 w80 h90 , E:\1\ability8.jpg
Gui, Add, Picture, x412 y110 w80 h80 , E:\1\ability9.jpg
Gui, Add, Picture, x412 y200 w80 h80 , E:\1\ability10.jpg
Gui, Add, Picture, x412 y290 w80 h80 , E:\1\ability11.jpg
Gui, Add, Picture, x412 y380 w80 h90 , E:\1\ability12.jpg
Gui, Add, Picture, x562 y110 w80 h80 , E:\1\ability13.jpg
Gui, Add, Picture, x562 y200 w80 h80 , E:\1\ability14.jpg
Gui, Add, Hotkey, vColdSnap x202 y130 w60 h30 , %ColdSnap%  
Gui, Add, Hotkey, vGhostWalk x202 y220 w60 h30 , %GhostWalk%
Gui, Add, Hotkey, vIceWall x202 y310 w60 h30 , %IceWall%
Gui, Add, Hotkey, vEmp x202 y410 w60 h30 , %Emp%
Gui, Add, Hotkey, vTorando x352 y130 w60 h30 , %Torando%
Gui, Add, Hotkey, vAlacrity x352 y220 w60 h30 , %Alacrity%
Gui, Add, Hotkey, vSunStrike x352 y310 w60 h30 , %SunStrike%
Gui, Add, Hotkey, vForgeSpirit x352 y410 w60 h30 , %ForgeSpirit%
Gui, Add, Hotkey, vMeteor x502 y130 w60 h30 , %Meteor%
Gui, Add, Hotkey, vDeafeningBlast x502 y220 w60 h30 , %DeafeningBlast%
Gui, Add, Button, vSave x62 y750 w100 h30 , Save
Gui, Add, Button, vStart x222 y750 w100 h30 , Применить    Запустить
; Generated using SmartGUI Creator 4.0
Gui, Show, x577 y84 h842 w730, New GUI Window
Return

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Process, Priority, , High ;

F10::reload
F11::suspend

ButtonSave:
    Gui, Submit, NoHide
    IniWrite, %ColdSnap%, %A_ScriptDir%\config.ini, Skills, ColdSnap
    IniWrite, %GhostWalk%, %A_ScriptDir%\config.ini, Skills, GhostWalk
    IniWrite, %IceWall%, %A_ScriptDir%\config.ini, Skills, IceWall
    IniWrite, %Emp%, %A_ScriptDir%\config.ini, Skills, Emp
    IniWrite, %Torando%, %A_ScriptDir%\config.ini, Skills, Tornado
    IniWrite, %Alacrity%, %A_ScriptDir%\config.ini, Skills, Alacrity
    IniWrite, %SunStrike%, %A_ScriptDir%\config.ini, Skills, SunStrike
    IniWrite, %ForgeSpirit%, %A_ScriptDir%\config.ini, Skills, ForgeSpirit
    IniWrite, %Meteor%, %A_ScriptDir%\config.ini, Skills, Meteor
    IniWrite, %DeafeningBlast%, %A_ScriptDir%\config.ini, Skills, DeafeningBlast
Return

ButtonStart:
Gui, Submit, NoHide
Return


GhostlWalk:
Send, QQWRWWW
Sleep 400
Send D
return



Tornado1:
Send, WWQR
return

Emp:
Send, WWWR
return

DeafeningBlast: 
Send, QWER
return

SunStrike: 
Send, EEER
return

Meteor: 
Send, EEWR
return

ColdSnap: 
Send, QQQR
return

IceWall: 
Send, QQER
Return

ForgeSpirit: 
Send, EEQR
Sleep 400
Send D
Return

Alacrity:
Send, WWER
Return

GuiClose:
ExitApp

Допустим выбрал кнопку для GhоstWаlk. Нажимаю кнопку старта. Жму выбранную кнопку для проверки  и ничего не происходит...

2 (изменено: NonameDayz, 2013-03-26 22:53:29)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

А так же вопрос.
Как сделать чтобы в поле Gui, Add, Hotkey нельзя было вводить определённые буквы, допустим Q W E R.

3 (изменено: creature.ws, 2013-03-26 23:32:29)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

почему когда задаю любой из хоткеев в Gui они не выполняют отведенные им части скрипта

Почему вы считаете, что какие-либо части приведенного кода должны выполнятся при нажатии горячих клавиш?
За исключением

F10::reload
F11::suspend

горячие клавиши в скрипте не используются.


Почему вы считаете, что Gui, Add, Hotkey «создаёт» горячую клавишу?

4 (изменено: NonameDayz, 2013-03-27 00:31:18)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Вообщем разобрался что к чему...
Если кому поможет то читайте дальше.
Нашел у себя несколько ошибок по типу:  должно быть Tornado а у меня написано Torando.
Не правильно обозвал вызов части скрипта по нажатию кнопки.

ButtonStart:
Gui, Submit, NoHide
Return

Когда у меня как я понял кнопка вызываться по имени "Применить    Запустить"

Gui, Add, Button, vStart x222 y750 w100 h30 , Применить    Запустить

Поэтому переименовал кнопку просто в Start.
А так же добавил Hotkey, %GhostWalk%, GhostWalk.


ButtonStart:
Hotkey, %GhostWalk%, GhostWalk
return

По сути останется прописать кучу хоткеев и все. Моя цель будет достигнуто.

Остается вопрос по поводу

Как сделать чтобы в поле Gui, Add, Hotkey нельзя было вводить определённые буквы, допустим Q W E R.

5 (изменено: creature.ws, 2013-03-27 00:48:33)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Отличный диалог. GUIControls#hotkey

Моя цель будет достигнуто.

Как скажете

Gui Margin, 20, 10
Gui Add, Hotkey, gLabel vHotkeyBox
Gui Show
return

Label:
    if (HotkeyBox ~= "Q|W|E|R") {
        GuiControl,, HotkeyBox
        return
    }
    ToolTip % HotkeyBox
    return

6

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Большое спасибо за помощь. Я примерно был близок к это идеи. Благодаря вам открыл для себя команду GuiControl.

Но возник вопрос, т.к. у меня много хоткеев и у них разные метки "v*****" но одинаковые "gSave" можно ли как нибудь оптимизироваться код или нужно для каждой метки "v******" писать строки с проверкой на совпадение QWER.
Для примера:

Gui Margin, 20, 10
Gui Add, Hotkey, gLabel vAbrakadabra
Gui Add, Hotkey, gLabel vVeryHotBox
Gui Add, Hotkey, gLabel vNotHotBox; И далее куча хоткеев. 
Gui Show
return

Label:
    if (Abrakadabra ~= "Q|W|E|R") {
        GuiControl,, Abrakadabra
        return
    }

    if (VeryHotBox ~= "Q|W|E|R") {
        GuiControl,, VeryHotBox
        return
    }

    if (NotHotBox~= "Q|W|E|R") {
        GuiControl,, NotHotBox
        return
    }

       return

7 (изменено: creature.ws, 2013-03-27 01:40:12)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Gui Margin, 20, 10
Gui Add, Hotkey, gLabel vHotkeyBox1
Gui Add, Hotkey, gLabel vHotkeyBox2
Gui Show
return

Label:
    if (%A_GuiControl% ~= "Q|W|E|R") {
        GuiControl,, %A_GuiControl%
        return
    }
    ToolTip % %A_GuiControl%,,, SubStr(A_GuiControl, 0)
    return

8

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Благодарю.

9 (изменено: NonameDayz, 2013-03-27 03:12:58)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Пытаюсь сделать проверку чтобы не было одинаковых хоткеев и QWER. Не могу понять что не так.

И почему нельзя сделать так:

Gui Margin, 20, 10
Gui Add, Hotkey, gLabel vHotkeyBox1
Gui Add, Hotkey, gLabel vHotkeyBox2
Gui Add, Hotkey, gLabel vHotkeyBox3
Gui Show
return

Label:
    if (%A_GuiControl% ~= "Q|W|E|R"|%A_GuiControl%) {
        GuiControl,, %A_GuiControl%
        return
    }
    ToolTip % %A_GuiControl%,,, SubStr(A_GuiControl, 0)
    return

А так же пробовал различные варианты допустим:


Label:
    if (%A_GuiControl% ~= HotkeyBox1) {
        GuiControl,, %A_GuiControl%
        return
    }
    ToolTip % %A_GuiControl%,,, SubStr(A_GuiControl, 0)
    return

Если HotkeyBox1 пустой то не получиться изменить другие хотбоксы пока не изменишь первый.

10 (изменено: NonameDayz, 2013-03-27 03:20:13)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

И еще вопрос по поводу оптимизации:


LoadGui:
Gui, Add, Hotkey, vColdSnap gSave x185 y130 w60 h30 , %ColdSnap%
Gui, Add, Hotkey, vGhostWalk gSave x185 y220 w60 h30 , %GhostWalk%
Gui, Add, Hotkey, vIceWall gSave x185 y310 w60 h30 , %IceWall%
Gui, Add, Hotkey, vEmp gSave x185 y410 w60 h30 , %Emp%
Gui, Add, Hotkey, vTornado gSave x335 y130 w60 h30 , %Tornado%
Gui, Add, Hotkey, vAlacrity gSave x335 y220 w60 h30 , %Alacrity%
Gui, Add, Hotkey, vSunStrike gSave x335 y310 w60 h30 , %SunStrike%
Gui, Add, Hotkey, vForgeSpirit gSave x335 y410 w60 h30 , %ForgeSpirit%
Gui, Add, Hotkey, vMeteor gSave x485 y130 w60 h30 , %Meteor%
Gui, Add, Hotkey, vDeafeningBlast gSave x485 y220 w60 h30 , %DeafeningBlast%
Gui, Add, Button, x222 y750 w100 h30 , Start
Gui, Add, Button, x400 y750 w100 h30 , Clear
; Generated using SmartGUI Creator 4.0
Gui, Show, x577 y84 h842 w730, New GUI Window
Return

ButtonClear:
GuiControl,, ColdSnap
GuiControl,, GhostWalk
GuiControl,, IceWall
GuiControl,, Emp
GuiControl,, Tornado
GuiControl,, Alacrity
GuiControl,, SunStrike
GuiControl,, ForgeSpirit
GuiControl,, Meteor
GuiControl,, DeafeningBlast
Return

Можно ли как нибудь отчистить все gui hotkey одной командой или возможно чтобы не писать все метки использовать %A_GuiControl% ?

Извините если кого то достаю нубскими вопросами.

11

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

так же пробовал различные варианты

И увы,  кубик не влезает в круглое отверстие…

Кажется, самое время посоветовать почитать справку.

12

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

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

13 (изменено: creature.ws, 2013-03-27 17:04:36)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

A_GuiControl
~=
Expressions
If (expression)
Gui
GuiControls#Hotkey
Hotkey command

«Ответы на заданные вопросы» где-то между строк.

сделать проверку чтобы не было одинаковых хоткеев и QWER
И почему нельзя сделать так

Помимо неправильного синтаксиса данная конструкция лишена смысла.
Нет магии в autohotkey, что описываете, то и получаете. Нельзя взять «горсть команд» языка, перемешать в произвольном порядке и получить желаемую функциональность.

14

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Я щас свихнусь...

Почему этот скрипт не показывает в итоге одно сообщение ок.


ColdSnap:= "W"
Array := [ColdSnap, GhostWalk, IceWall, Emp, Tornado, Alacrity, SunStrike, ForgeSpirit, Meteor, DeafeningBlast]
for i in Array{
if  (Array[i]!=)
{
    MsgBox, ok    
    }
    }
    

15

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

После  этого я даже не знаю как справку то теперь читать:

Пустые строки. Чтобы задать в выражении пустую строку, используйте пустую пару кавычек. Например, условный оператор if (MyVar <> "") вернет истину, если у переменной MyVar есть значение. Однако, если условный оператор имеет традиционную форму, пустые кавычки трактуются буквально. К примеру, приведенный далее условный оператор, не содержащий выражений, вернет истину, только если переменная MyVar действительно содержит пару кавычек: if MyVar = "". Таким образом, чтобы с помощью несодержащего выражений условного оператора проверить, есть ли у переменной значение, используйте в правой части оператора символ = или <> и ничего за ним, как в этом примере: if MyVar =

Прочитав это я так и не понял когда ставить кавычки когда нет... Но методом проб и ошибок понял что в моем случае нужно ставить...

16 (изменено: creature.ws, 2013-03-28 01:28:31)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

ColdSnap:= "W"
Array := [ColdSnap, GhostWalk, IceWall, Emp, Tornado, Alacrity, SunStrike, ForgeSpirit, Meteor, DeafeningBlast]
for i in Array {
    if Array[i] != ""
        MsgBox, ok
}

«Ничего» это слишком объемное понятие, чтоб отсутствие логического элемента в выражении как-то интерпретировать. Сравнивайте с пустой строкой.

когда ставить кавычки когда нет

В выражении, при операциях со строками кавычки нужны. «Слово» без кавычек в выражении интерпретируется как имя переменной.

Используйте оператор = исключительно для сравнения.
Используйте для присваивания значения оператор :=
В if используйте круглые скобки и подразумевайте, что в скобках после if  — выражение.
Постарайтесь отказаться от использования команд IfEqual и т.п.
Опциональные параметры в определениях функций объявляйте с использованием оператора :=

— «на будущее».

17 (изменено: NonameDayz, 2013-03-28 15:45:10)

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Вообщем если вам интересно как я решил проблему с одинаковыми хоткеями то прошу смотреть в мой скрипт.
Я применил  чудо индийского кода, на большего моего ума не хватило. Можете потыкать, да потестить хоткеи. А лучше посоветовать как оптимизировать. Собственно сам код:

Gosub, LoadIni
GoSub, LoadGui
Return

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Process, Priority, , High ;

F10::reload
F11::suspend



Save:
    Gui, Submit, NoHide
Array := [ColdSnap, GhostWalk, IceWall, Emp, Tornado, Alacrity, SunStrike, ForgeSpirit, Meteor, DeafeningBlast]

for i in Array{; проверка на QWER и дубликаты
    
if (%A_GuiControl% ~= "Q|W|E|R") {
        GuiControl,, %A_GuiControl%
         return
    }
    
if  (Array[i]!=""){
    
if (%A_GuiControl% ~= Array[i]){
    i:=++i
    t:=11 - i 
    Loop %t%    {
    if (%A_GuiControl% = Array[i]){
        GuiControl,, %A_GuiControl%
        }
    i:=++i
}
}
}
}



    IniWrite, %ColdSnap%, %A_ScriptDir%\config.ini, Skills, ColdSnap
    IniWrite, %GhostWalk%, %A_ScriptDir%\config.ini, Skills, GhostWalk
    IniWrite, %IceWall%, %A_ScriptDir%\config.ini, Skills, IceWall
    IniWrite, %Emp%, %A_ScriptDir%\config.ini, Skills, Emp
    IniWrite, %Tornado%, %A_ScriptDir%\config.ini, Skills, Tornado
    IniWrite, %Alacrity%, %A_ScriptDir%\config.ini, Skills, Alacrity
    IniWrite, %SunStrike%, %A_ScriptDir%\config.ini, Skills, SunStrike
    IniWrite, %ForgeSpirit%, %A_ScriptDir%\config.ini, Skills, ForgeSpirit
    IniWrite, %Meteor%, %A_ScriptDir%\config.ini, Skills, Meteor
    IniWrite, %DeafeningBlast%, %A_ScriptDir%\config.ini, Skills, DeafeningBlast
    
Return

ButtonClear:
GuiControl,, ColdSnap
GuiControl,, GhostWalk
GuiControl,, IceWall
GuiControl,, Emp
GuiControl,, Tornado
GuiControl,, Alacrity
GuiControl,, SunStrike
GuiControl,, ForgeSpirit
GuiControl,, Meteor
GuiControl,, DeafeningBlast
Gosub, Save
Return

ButtonStart:
Hotkey, %Tornado%, Tornado
Hotkey, %ColdSnap%, ColdSnap
Hotkey, %GhostWalk%, GhostWalk
Hotkey, %IceWall%, IceWall
Hotkey, %Emp%, Emp
Hotkey, %Tornado%, Tornado
Hotkey, %Alacrity%, Alacrity
Hotkey, %SunStrike%, SunStrike
Hotkey, %ForgeSpirit%, ForgeSpirit
Hotkey, %Meteor%, Meteor
Hotkey, %DeafeningBlast%, DeafeningBlast
return

GhostWalk:
Send, QQWRWWW
Sleep 400
Send D
return


Tornado:
Send, WWQR
return

Emp:
Send, WWWR
return

DeafeningBlast: 
Send, QWER
return

SunStrike: 
Send, EEER
return

Meteor: 
Send, EEWR
return

ColdSnap: 
Send, QQQR
return

IceWall: 
Send, QQER
Return

ForgeSpirit: 
Send, EEQR
Sleep 400
Send D
Return

Alacrity:
Send, WWER
Return

GuiClose:
ExitApp

LoadINI:
IniRead, ColdSnap, %A_ScriptDir%\config.ini, Skills, ColdSnap
IniRead, GhostWalk, %A_ScriptDir%\config.ini, Skills, GhostWalk
IniRead, IceWall, %A_ScriptDir%\config.ini, Skills, IceWall
IniRead, Emp, %A_ScriptDir%\config.ini, Skills, Emp
IniRead, Tornado, %A_ScriptDir%\config.ini, Skills, Tornado
IniRead, Alacrity, %A_ScriptDir%\config.ini, Skills, Alacrity
IniRead, SunStrike, %A_ScriptDir%\config.ini, Skills, SunStrike
IniRead, ForgeSpirit, %A_ScriptDir%\config.ini, Skills, ForgeSpirit
IniRead, Meteor, %A_ScriptDir%\config.ini, Skills, Meteor
IniRead, DeafeningBlast, %A_ScriptDir%\config.ini, Skills, DeafeningBlast
Return

LoadGui:
Gui, Add, Picture, x300 y0 w150 h80 , E:\1\icon.jpg
Gui, Add, Picture, x100 y110 w80 h80 , E:\1\ability1.jpg
Gui, Add, Picture, x100 y200 w80 h80 , E:\1\ability2.jpg
Gui, Add, Picture, x100 y290 w80 h80 , E:\1\ability3.jpg
Gui, Add, Picture, x100 y380 w80 h90 , E:\1\ability4.jpg
Gui, Add, Picture, x250 y110 w80 h80 , E:\1\ability5.jpg
Gui, Add, Picture, x250 y200 w80 h80 , E:\1\ability6.jpg
Gui, Add, Picture, x250 y290 w80 h80 , E:\1\ability7.jpg
Gui, Add, Picture, x250 y380 w80 h90 , E:\1\ability8.jpg
Gui, Add, Picture, x400 y110 w80 h80 , E:\1\ability9.jpg
Gui, Add, Picture, x400 y200 w80 h80 , E:\1\ability10.jpg
Gui, Add, Picture, x400 y290 w80 h80 , E:\1\ability11.jpg
Gui, Add, Picture, x400 y380 w80 h90 , E:\1\ability12.jpg
Gui, Add, Picture, x550 y110 w80 h80 , E:\1\ability13.jpg
Gui, Add, Picture, x550 y200 w80 h80 , E:\1\ability14.jpg
gui, font, w700 s15, Times New Roman
Gui, Add, Text, x70 y130 w20 h30 , Q
Gui, Add, Text, x70 y220 w20 h30 , W
Gui, Add, Text, x70 y310 w20 h30 , E
Gui, Add, Text, x70 y410 w20 h30 , R
gui, font,,
Gui, Add, Hotkey, vColdSnap gSave x185 y130 w60 h30 , %ColdSnap%
Gui, Add, Hotkey, vGhostWalk gSave x185 y220 w60 h30 , %GhostWalk%
Gui, Add, Hotkey, vIceWall gSave x185 y310 w60 h30 , %IceWall%
Gui, Add, Hotkey, vEmp gSave x185 y410 w60 h30 , %Emp%
Gui, Add, Hotkey, vTornado gSave x335 y130 w60 h30 , %Tornado%
Gui, Add, Hotkey, vAlacrity gSave x335 y220 w60 h30 , %Alacrity%
Gui, Add, Hotkey, vSunStrike gSave x335 y310 w60 h30 , %SunStrike%
Gui, Add, Hotkey, vForgeSpirit gSave x335 y410 w60 h30 , %ForgeSpirit%
Gui, Add, Hotkey, vMeteor gSave x485 y130 w60 h30 , %Meteor%
Gui, Add, Hotkey, vDeafeningBlast gSave x485 y220 w60 h30 , %DeafeningBlast%
Gui, Add, Button, x222 y750 w100 h30 , Start
Gui, Add, Button, x400 y750 w100 h30 , Clear
; Generated using SmartGUI Creator 4.0
Gui, Show, x577 y84 h842 w730, New GUI Window
Return

Это очень сырая версия скрипта для инвокера на доту 2, да и без картинок то выкладываю.

В данном скрипте я кое как решил проблему (не без вашей помощи) чтобы хоткей не допускал дубликаты, а также QWER. Также возникла сложная ситуацию когда хоткей ругался пустые поля, которую я кое как решил...

Уже сразу нашел глюк, если не заполнить все хоткеи то скрипт при нажатии кнопки старт работать не будет. 
А также теперь нельзя назначить хоткеи по типу Alt + Q т.к. моментально ругается на Q. Вот об этом я как то не подумал. А такая комбинация хоткея мне понадобиться.

18

Re: AHK: Не могу разобраться с Gui, Add, Hotkey

Эх и никто даже совета не даст... по оптимизации данного кода.