1 (изменено: DaVinchi, 2011-06-26 14:31:40)

Тема: AHK: GUI прикрепляем к скрипту

В общем то дошел я до того, что решил ознакомиться с GUI. Открыл SmartGUI.exe, потыкал, создал нужную мне форму и смотрю на нее, как баран на новые ворота.
Вообщем то вот есть скрипт:

~F1::
sleep, 300
Send, {Enter}

Вот есть GUI что я создал:


Gui, Add, Hotkey, x16 y22 w60 h20 , F1
Gui, Add, Text, x86 y22 w100 h20 +Center, Кнопка ТП
Gui, Add, ComboBox, x16 y52 w60 h10 , 300
Gui, Add, Text, x86 y52 w100 h20 +Center, Задержка (ms)
Gui, Add, Button, x16 y92 w90 h30 , Hide
Gui, Add, Button, x106 y92 w80 h30 , Help
; Generated using SmartGUI Creator 4.0
Gui, Show, xCenter yCenter h147 w201, Настройки
Return

GuiClose:
ExitApp

Вопрос:  Как пришить скрипт к GUI?
Что бы хоткей был не F1, а тот который будет выставлен в GUI. Задержка, та что в ComboBox?
И как правильней задавать опции для кнопок Хайд и Хелп. Т.е. После GUI или перед?

2

Re: AHK: GUI прикрепляем к скрипту

Лучше почитай конечно.
Для наглядности - должно получится вроде этого...

Gui, Add, Hotkey, vKeyHot x16 y22 w60 h20 , F1 ; KeyHot (без v в начале) - асоциированая с данной командой переменная
; После выполнения команды Gui, Submit в ней окажется "имя" искомой  комбинации клавишь
Gui, Add, Text, x86 y22 w100 h20 +Center, Кнопка ТП
Gui, Add, ComboBox, vMiliSek x16 y52 w60 h10 , 100|200|300|400|500 ; MiliSek - переменная. Интервалы задаются через "|"
Gui, Add, Text, x86 y52 w100 h20 +Center, Задержка (ms)
Gui, Add, Button, vHide x16 y92 w90 h30 , Hide
Gui, Add, Button, vHelp x106 y92 w80 h30 , Help
; Generated using SmartGUI Creator 4.0

Gui, Show, xCenter yCenter h147 w201, Настройки 
Return

ButtonHide:
Gui, Submit
Msgbox, Вы нажали Hide
Hotkey, ~%KeyHot% , F1rrr, UseErrorLevel On
Gui, Destroy ; "Закрывает окно"
Return
 
F1rrr:
sleep, %MiliSek%
Send, {Enter}
ThisHK := A_ThisHotkey ; Для проверки имени переменной
Msgbox, KeyHot = %KeyHot%`nMiliSek = %MiliSek%`nButtonHide = %Hide%`nButtonHelp =%Help%`nThisHK = %ThisHK%
Return

ButtonHelp:
Msgbox, Вы нажали Help
Return

GuiEscape:
GuiClose:
FileExit:
Gui, Submit
Msgbox, KeyHot = %KeyHot%`nMiliSek = %MiliSek%`nButtonHide = %Hide%`nButtonHelp =%Help%`nThisHK = %ThisHK%
ExitApp

SmartGUI.exe "рисует" только форму.
Все переменные и действия пишутся в ручную.

3

Re: AHK: GUI прикрепляем к скрипту

В общем то немного разобрался с GUI. Но по умному свое, ничего не получилось сделать. Я взял и в наглую скопировал скрипт у аффтара в соседнем топе и подстроил его под себя. Спасибо аффтару сего скрипта! Не бей сильно, за ошибки допущенные в нем, я ведь не волшебник, а только учусь


freezcount := 300
myhotkey = F1
Gosub,Read
Gosub,TrayMenu
Gosub,Settings
Return

Read:
   If myhotkey =
      {
         myhotkey = F1
         Gosub, Settings
      }
   If freezcount =
      {
         freezcount := 300
         Gosub, Settings
      }
   hotkeyUP = ~%myhotkey%
   Hotkey, %hotkeyUP%, HotkeyLabel, On
   Return

HotkeyLabel:
        Sleep, %freezcount%
		Send {Enter}
    Return
	

SettingsOK:
   Gui, Submit
   Gosub, Read
   Return

Settings:
	Hotkey, %hotkeyUP%, HotkeyLabel, Off
	Gui, Destroy
	Gui, Font, Courier New
	Gui, Add, Edit, vmyhotkey x12 y10 w30 h20 , % myhotkey
	Gui, Add, Edit, vfreezcount x12 y40 w30 h20 , % freezcount
	Gui, Add, Text, x42 y10 w100 h20 , назначаем хоткей
	Gui, Add, Text, x42 y40 w140 h20 , время задержки(мс)
	Gui, Add, Button, gExit x132 y70 w50 h20 , &Exit
	Gui, Add, Button, gSettingsOK x12 y70 w50 h20 , &OK
	Gui, Add, Button, gHelp x72 y70 w50 h20 , &Help
	Gui, Add, Text, x16 y92 w160 h20 +Center, Powered by DaVinchi
	Gui, Show, xCenter yCenter h115 w187, Settings
	Return

TrayMenu:
   Menu, Tray, NoStandard
   Menu, Tray, Add, &Settings, Settings
   Menu, Tray, Add, &Exit, Exit
   Return

Help:
	Run, %A_WorkingDir%\HelpMe.txt
Return,
	
Exit:
   Gui, Destroy
   ExitApp

4

Re: AHK: GUI прикрепляем к скрипту

Думаю всё же для хоткея лучше подойдёт,

...
Gui, Add, Hotkey, vmyhotkey x12 y10 w40 h20, % myhotkey
...

чем поле ввода.

...
Gui, Add, Edit, vmyhotkey x12 y10 w30 h20 , % myhotkey
...

OFF: И ни чего не поделаешь - копирайт!

Powered by DaVinchi

5

Re: AHK: GUI прикрепляем к скрипту

OFF: И ни чего не поделаешь - копирайт!

В последующих обновления софтинки, а оно будет обязательно, укажу обязательно!

6

Re: AHK: GUI прикрепляем к скрипту

Спасибо конечно, но не за награды радеем...

7

Re: AHK: GUI прикрепляем к скрипту

А как сделать так, чтобы AutoHotkey и задержку записывала в *.INI-файл, и при последующих запусках брала оттуда, а при сохранении перезаписывала?

8

Re: AHK: GUI прикрепляем к скрипту

iniread
iniwrite

9

Re: AHK: GUI прикрепляем к скрипту

В общем разобрался я почти со всем, но есть некоторые нюанс.
Вот GUI:


Gui, Destroy
Gui, Font, Courier New
Gui, Add, Button, x4 y82 w24 h21 , 0
Gui, Add, Button, x62 y56 w24 h21 , 9
Gui, Add, Button, x33 y56 w24 h21 , 8
Gui, Add, Button, x4 y56 w24 h21 , 7
Gui, Add, Button, x62 y30 w24 h21 , 6
Gui, Add, Button, x33 y30 w24 h21 , 5
Gui, Add, Button, x4 y30 w24 h21 , 4
Gui, Add, Button, x62 y4 w24 h21 , 3
Gui, Add, Button, x33 y4 w24 h21 , 2
Gui, Add, Button, x4 y4 w24 h21 , 1
Gui, Add, Button, gSaveLogin2 x36 y82 w50 h20 , OK
Gui, Add, Edit, vmyPIN x107 y97 w90 h20 , % myPIN
Gui, Add, Text, x107 y9 w81 h72 , 
Gui, Add, Picture, x106 y7 w85 h74 , logo.bmp
Gui, Show, xCenter yCenter h132 w204, Введите ПИН
Return

Как сделать так, что бы в окне Edit можно было ввести ограниченное количество цифр? И как сделать так, что бы вводить эти цифры можно было только нажимая на кнопки GUI (запретить с клавиатуры). А по введению к примеру 4х цифр выполнялось Gosub автоматически, без нажатия дополнительных клавиш?

10

Re: AHK: GUI прикрепляем к скрипту

DaVinchi пишет:

Как сделать так, что бы в окне Edit можно было ввести ограниченное количество цифр?

AutoHotkey Help (RUS) пишет:

Опции Edit (чтобы удалить опцию, поставьте перед ней знак минуса):
Limit: ограничивает ввод текста видимой шириной редактируемого поля. Кроме того, чтобы ограничить ввод текста определенным количеством символов, можно непосредственно после опции указать их количество. Например, Limit10 позволит ввести не более 10 символов.

DaVinchi пишет:

И как сделать так, что бы вводить эти цифры можно было только нажимая на кнопки GUI (запретить с клавиатуры).

AutoHotkey Help (RUS) пишет:

Опции Edit (чтобы удалить опцию, поставьте перед ней знак минуса):
ReadOnly: не позволяет пользователю изменять содержимое элемента управления. Тем не менее, текст можно прокручивать для просмотра, выделять и копировать в буфер.

DaVinchi пишет:

А по введению к примеру 4х цифр выполнялось Gosub автоматически, без нажатия дополнительных клавиш?

AutoHotkey Help (RUS) пишет:

Edit (редактируемое поле ввода)
...
В версиях AutoHotkey 1.0.35 и выше в опциях элемента управления можно поместить метку перехода, например, gMySubroutine. После этого каждый раз при изменении пользователем содержимого элемента управления эта метка будет запускаться автоматически.

А уже в этой метке (то есть подпрограмме) будет проверятся содержимое переменной, привязанной к элементу управления Edit. И если его длина равна 4 символам, то выполнится действие.

11

Re: AHK: GUI прикрепляем к скрипту

DaVinchi пишет:

И как сделать так, что бы вводить эти цифры можно было только нажимая на кнопки GUI (запретить с клавиатуры). А по введению к примеру 4х цифр выполнялось Gosub автоматически, без нажатия дополнительных клавиш?

Gui, Destroy
Gui, Font, Courier New
Gui, Add, Button, x4 y82 w24 h21 gbuttonchek, 0
Gui, Add, Button, x62 y56 w24 h21 gbuttonchek, 9
Gui, Add, Button, x33 y56 w24 h21 gbuttonchek, 8
Gui, Add, Button, x4 y56 w24 h21 gbuttonchek, 7
Gui, Add, Button, x62 y30 w24 h21 gbuttonchek, 6
Gui, Add, Button, x33 y30 w24 h21 gbuttonchek, 5
Gui, Add, Button, x4 y30 w24 h21 gbuttonchek, 4
Gui, Add, Button, x62 y4 w24 h21 gbuttonchek, 3
Gui, Add, Button, x33 y4 w24 h21 gbuttonchek, 2
Gui, Add, Button, x4 y4 w24 h21 gbuttonchek, 1
Gui, Add, Button, gSaveLogin2 x36 y82 w50 h20 vOkbt, OK
Gui, Add, Edit, vmyPIN x107 y97 w90 h20 +0x800, % myPIN ; ES_READONLY 0x800 ES_NUMBER 0x2000 
Gui, Add, Text, x107 y9 w81 h72 , 
Gui, Add, Picture, x106 y7 w85 h74 , logo.bmp
Gui, Show, xCenter yCenter h132 w204, Введите ПИН
Return

SaveLogin2:
Return

buttonchek:
AddNum:=A_GuiControl
If AddNum Is Number
If StrLen(myPIN)<4
myPIN .=AddNum
Else myPIN=
GuiControl,, myPIN, % myPIN
return

12 (изменено: DaVinchi, 2011-07-08 15:57:40)

Re: AHK: GUI прикрепляем к скрипту

kirtech, ypppu Спасибо. Немного разобрался. Оказалось, что я просто пропустил описание Типы элементов управления GUI и по этому не разобрался сразу.
Но как я не крутил, все равное не получается, что бы при достижении 4х цифры в окне Edit, автоматически переходило к SaveLogin2. Дело в том, что по идее кнопки OK не предусмотрено. И активироваться введенный пин должен по достижению нужного количества знаков в строке.

Upd.
Немного подумал и получилось вот что:

buttonchek:
AddNum:=A_GuiControl
If AddNum Is Number
If StrLen(myPIN)<4
myPIN .=AddNum
Else gosub, SaveLogin2
GuiControl,, myPIN, % myPIN
return

Т.е. по достижению 4х цифр, при нажатии 5й идет переход к SaveLogin2. Но это немного не то пальто. Нужно что бы сразу после введения 4х знаков, шел переход.

13

Re: AHK: GUI прикрепляем к скрипту

Вместо

Else gosub, SaveLogin2

написать

if strlen(mypin)=4
   gosub, SaveLogin2

14

Re: AHK: GUI прикрепляем к скрипту

Да пробовал я так. Прикол в том, что при достижении 4х знаков переходит к SaveLogin2, но записывает

Gui, Add, Edit, vmyPIN x107 y97 w90 h20 +0x800, % myPIN

эту строку в *.INI только 3 часла из 4х

15

Re: AHK: GUI прикрепляем к скрипту

Вот такой пример, надеюсь, поможет.

Gui, Add, Edit, vmyPIN x107 y97 w90 h20 gMySubroutine,
Gui, Show, xCenter yCenter h132 w204, Введите ПИН
Return

MySubroutine:
GUI, Submit, NoHide
If StrLen(myPIN) = 4
MsgBox, Введено четыре символа!

16 (изменено: DaVinchi, 2011-07-08 19:05:55)

Re: AHK: GUI прикрепляем к скрипту

Спасибо. Это действительно помогло.
Появился новый вопрос. Как заставить сохранять параметр Checkbox в *.INI. То что это IniRead я понимаю. Но что то не получается сохранить.

17

Re: AHK: GUI прикрепляем к скрипту

IniWrite

18 (изменено: DaVinchi, 2011-07-08 20:19:37)

Re: AHK: GUI прикрепляем к скрипту

Grey пишет:

IniWrite

Я как бы знаю команду! Я знаю как ее использовать. Но с Checkbox я еще толком не разобрался!
Я так понимаю, что при загрузке скрипта, должно проходить чтение *.ini файла и загружать параметр для Checked.
Что мне писать в параметрах Checkbox и тут

IniWrite, %?%, setup.ini, setup, ChBox

Самое интересное, что записывает нормально. А вот загружает пустой Checkbox

19 (изменено: InFlames, 2011-07-08 20:42:08)

Re: AHK: GUI прикрепляем к скрипту

Присвоить переменную элементу checkbox


CheckBoxVar=0 ; или 1. Если не определена, то чекбокс будет отмечен
Gui, Add, Checkbox, vCheckBoxVar checked%CheckBoxVar%, Элемент CheckBox

После выполнения

gui, submit

Этой переменной CheckBoxVar будет присвоено значение 0 или 1, в зависимости от состояние контрола.

Далее уже эту переменную записываете в INI.

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

20

Re: AHK: GUI прикрепляем к скрипту

Тоже приведу пример.

var := 1

GUI, Add, Checkbox, vMyCheckbox
GuiControl, , MyCheckbox, % var
GUI, Show

Насколько я понял, если переменная var примет значение 0, квадратик будет пустой; если 1 - отмеченный; если -1, то отмеченный серым цветом. Хотя, при -1 он у меня просто отмечен. 

AutoHotkey Help (ENG) пишет:

Checkbox: Param3 can be 0 to uncheck the button, 1 to check it, or -1 to give it a gray checkmark. Otherwise, Param3 is assumed to be the control's new caption/text. See Text below for how to override this behavior.

21

Re: AHK: GUI прикрепляем к скрипту

InFlames Спасибо. Все замечательно работает. А я ходил совсем рядом, но так и не хватило наверно практики, а может быть и ума
ypppu Пропиши Check3 и у тебя появится третий параметр - в квадратике серая галочка!

22 (изменено: mj, 2011-12-01 16:32:01)

Re: AHK: GUI прикрепляем к скрипту

Здравствуйте, прошу помощи - не могу прочитать значение чекбокса в ini файле.
Ни один из методов, приведенных здесь, не работает.
Что я делаю не так?

IniRead, MoveCheckVar, settings.ini, MoveSettings, enable
Gui, Add, CheckBox, vMoveCheck checked%MoveCheckVar% x6 y7 w190 h20, Move tables
Gui, Add, Button, x326 y247 w90 h20 , Save
Gui, Show, x821 y86 h280 w427,
Return

GuiClose:
ExitApp

ButtonSave:
    GuiControlGet, MoveCheckVar,, MoveCheck
    MsgBox, MoveCheckVar
    ;~ IniWrite, MoveCheckVar, settings.ini, MoveSettings, enable    
    Return

Выдает значение переменной MoveCheckVar=MoveCheckVar.
По моей задумке кнопка "Save" считывает положение чекбокса (0/1) и записывает его в необходимый раздел в ini-файле (значение будет использоваться далее в скрипте). Считать не получается, в чем ошибка?

23

Re: AHK: GUI прикрепляем к скрипту

IniRead, MoveCheckVar, settings.ini, MoveSettings, enable
Gui, Add, CheckBox, vMoveCheck checked%MoveCheckVar% x6 y7 w190 h20, Move tables
Gui, Add, Button, x326 y247 w90 h20 , Save
Gui, Show, x821 y86 h280 w427,
Return

GuiClose:
ExitApp

ButtonSave:
    GuiControlGet, MoveCheckVar,, MoveCheck
    ;MsgBox, %MoveCheckVar%
    IniWrite, %MoveCheckVar%, settings.ini, MoveSettings, enable    
    Return

24

Re: AHK: GUI прикрепляем к скрипту

ypppu, спасибо, не знаю как я недоглядел

У меня появился еще один вопрос, чтобы не создавать новую тему, спрошу здесь:

Мой скрипт сохраняет сочетания клавиш для разных функций в ini-файл, а при запуске берет настройки оттуда. Проблема такова: если записываешь сочетание, содержащее латинские буквы, то при запуске по умолчанию русская раскладка и сочетания отказываются отображаться в gui hotkey. При смене дефолтного языка системы на английский проблема исчезает. Подскажите, как лучше решить? Проверять раскладку при запуске и менять ее? Другого способа я не смог придумать. Если необходим код скрипта - предоставлю.

25

Re: AHK: GUI прикрепляем к скрипту

Это уже совсем другая тема. Создавайте её отдельно, описывайте подробно, прикладывайте код.