1 (изменено: Strongest, 2013-07-13 14:33:45)

Тема: AHK: HotKey как работает?

HotKey
Пожалуйста, помогите разбираться, как работает эта команда!
Этот финальный аккорд большой программы, сижу уже 3 день не как не могу понять, как же она работает, все перечитал, все перепробовал, не чего не получается!
Задача кода такова, что бы через элемент управление Gui HotKey объявлялась горячая клавиша HotKey, %MyHotKey% с возможностью последующего изменения ее же.
Я думаю из кодов приведенных ниже цель и задача понятна.
Пробовал в основном 2 варианта (см. ниже).
1:
В первом варианте горячая клавиша работает только «по умолчанию» то есть, комбинация, которая обвялена в элементе Gui HotKey при старте скрипта, изменить с помощью этого элемента управления у меня не вышло.
2:
Во втором варианте у меня вышло немного иначе, у меня получилось что я якобы могу изменять горячею клавишу, но при этом и предыдущая комбинация не переставала работать, то есть, изменяя поочередно горячую клавишу в элементе управления Gui HotKey ^A, ^B, ^C, ^D в результате все эти клавиши ссылаются на одну и туже метку.
Уже нет сил ломать голову! Сжальтесь ?

Вариант кода 1


;TestHotKey
Gui, Add, Hotkey, gHotKeySubMit vMyHotKey1, ^1
Gui, Add, Hotkey, gHotKeySubMit vMyHotKey2, ^2
Gui, 1:Add, Button, w120, Exit

GoSub HotKeySubMit

Hotkey, %MyHotKey1%, hKey1
Hotkey, %MyHotKey2%, hKey2

Gui SubMit, NoHide
Gui Show,, TestHotKey
return

hKey1:
SoundBeep 1000, 1000
return

hKey2:
SoundBeep 500, 500
return

HotKeySubMit:
Gui SubMit, NoHide
return

GuiClose:
ButtonExit:
ExitApp

Вариант кода 2


;TestHotKey
Gui, Add, Hotkey, gHotKeySubMit vMyHotKey1, ^1
Gui, Add, Hotkey, gHotKeySubMit vMyHotKey2, ^2
Gui, 1:Add, Button, w120, Exit

GoSub HotKeySubMit

Gui SubMit, NoHide
Gui Show,, TestHotKey
return

hKey1:
SoundBeep 1000, 1000
return

hKey2:
SoundBeep 500, 500
return

HotKeySubMit:
Gui SubMit, NoHide
Hotkey, %MyHotKey1%, hKey1
Hotkey, %MyHotKey2%, hKey2
return

GuiClose:
ButtonExit:
ExitApp

За ранее спасибо!

2

Re: AHK: HotKey как работает?

В подпрограмме метки перехода Gui SubMit не нужно, т. к.:

Each launch of the g-label also stores the hotkey in control's associated output variable (if any).

Чтобы предыдущая горячая клавиша перестала работать, её нужно отключить. Для этого её придётся сохранить в отдельную переменную.

;TestHotKey
Gui, Add, Hotkey, gHotKey1 vMyHotKey1, ^1
Gui, Add, Hotkey, gHotKey2 vMyHotKey2, ^2

Gui SubMit, NoHide

Hotkey, %MyHotKey1%, hKey1, On
Hotkey, %MyHotKey2%, hKey2, On

PrevKey1 := MyHotKey1, PrevKey2 := MyHotKey2

Gui Show,, TestHotKey
return

hKey1:
   SoundBeep 1000, 1000
   return

hKey2:
   SoundBeep 500, 500
   return

HotKey1:
HotKey2:
   n := SubStr(A_ThisLabel, 0)
   Hotkey, % PrevKey%n%, Off
   Hotkey, % MyHotKey%n%, hKey%n%, On UseErrorLevel
   if !ErrorLevel
      PrevKey%n% := MyHotKey%n%
   return

GuiClose:
ExitApp

Для лучшего понимания вышеприведённого кода советую покурить Help:
Hotkey command
Hotkey control

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Strongest, 2013-07-13 17:25:40)

Re: AHK: HotKey как работает?

Спасибо огромное! Обязательно почитаю, в моих же интересах! Мой проектик спасён

4 (изменено: Pr1mera, 2013-09-01 00:23:01)

Re: AHK: HotKey как работает?

Так.

Gui, Add, Hotkey, gHotKey1 vMyHotKey1, ^1
Gui, Add, Hotkey, gHotKey2 vMyHotKey2, ^2

По умолчанию заданы ^1 и ^2, тогда работает. А если по умолчанию у нас отсутствуют хоткеи(поле = "Нет"), то выбивает ошибку(Такой клавиши "" нет).
Как исправить? Заранее спасибо за ответ.

5

Re: AHK: HotKey как работает?

Какая ошибка?

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

6 (изменено: Pr1mera, 2013-09-01 00:57:10)

Re: AHK: HotKey как работает?

Как пример:

gosub, load
Gui, Add, Hotkey, x242 y130 w70 h20 vMyHotKey1 gHSave, %mhk1%
Gui, Show
return

Gui, Submit, NoHide

Hotkey, %MyHotKey1%, hkey1
PrevKey1 := MyHotKey1
return

HSave:
Gui, Submit, NoHide
if (%A_GuiControl% ~= "W|S|A|D")
{
    GuiControl,, %A_GuiControl%
    return
}
   n := SubStr(A_ThisLabel, 0)
   Hotkey, % PrevKey%n%, Off
   Hotkey, % MyHotKey%n%, hKey%n%, On UseErrorLevel
   if !ErrorLevel
   PrevKey%n% := MyHotKey%n%
return

Load:
IniRead, mhk1, %A_ScriptDir%\config.ini, HotKeys, mhk1
return

Так же отдельно имеется кнопка сохранения этого хоткея в ini
Пишет ошибку при запуске, что так как MyHotKey1 - пусто, то и хоткеем это "обозвать" он не может.

7

Re: AHK: HotKey как работает?

нету ошибки при запуске.

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

8

Re: AHK: HotKey как работает?

Кстати каким макаром ентот кусок кода выполняется???

return

Gui, Submit, NoHide

Hotkey, %MyHotKey1%, hkey1
PrevKey1 := MyHotKey1
return

HSave:

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

9 (изменено: Pr1mera, 2013-09-01 01:52:08)

Re: AHK: HotKey как работает?

return я лишний в примере написал, на деле его нет.

Вот:

gosub, load
Gui, Add, Hotkey, x242 y130 w70 h20 vMyHotKey1 gHSave, %mhk1%
Gui, Show

Gui, Submit, NoHide

Hotkey, %MyHotKey1%, hkey1
PrevKey1 := MyHotKey1
return

HSave:
Gui, Submit, NoHide
if (%A_GuiControl% ~= "W|S|A|D")
{
    GuiControl,, %A_GuiControl%
    return
}
   n := SubStr(A_ThisLabel, 0)
   Hotkey, % PrevKey%n%, Off
   Hotkey, % MyHotKey%n%, hKey%n%, On UseErrorLevel
   if !ErrorLevel
   PrevKey%n% := MyHotKey%n%
return

Load:
IniRead, mhk1, %A_ScriptDir%\config.ini, HotKeys, mhk1
return

При запуске ошибка.

10

Re: AHK: HotKey как работает?

Ну так вы ошибку читайте. И код старайтесь правильно выкладывать.

Error:  Target label does not exist

Где метка "hkey1"?

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

11

Re: AHK: HotKey как работает?

Добавьте произвольно эту метку. Ошибка даже не в этом. Пример - это вырезка из кода в 1к строк. Все перекапывать довольно долго. На деле она есть.

12

Re: AHK: HotKey как работает?

Добавьте произвольно эту метку.

Нет это вы добавьте или убавьте то что в коде для примера.
Тут ... понятно что команда Hotkey ругается на пустое %MyHotKey1%. Есть описание команды в справке. Параметр UseErrorLevel , и совсем свежее .

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

13

Re: AHK: HotKey как работает?

Уже пробовал UseErrorLevel. При изменении хоткея все равно ругается на отсутствие ранеустановленой переменной %MyHotKey1%: Nonexistning hotkey

14

Re: AHK: HotKey как работает?

Вот весь скрипт: http://pastebin.com/apdcncNk
Чтобы уж наверняка.

15

Re: AHK: HotKey как работает?

Вот весь скрипт: http://pastebin.com/apdcncNk

почитайте

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

16

Re: AHK: HotKey как работает?

Создать новую тему с полным кодом? А не сильно это будет?

17

Re: AHK: HotKey как работает?

Уффф...

Для оформления ссылок используйте тег url.

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

18

Re: AHK: HotKey как работает?

Hotkey, % PrevKey%n%, Off UseErrorLevel

Так хоткеи вообще работать отказываются. Просто ноль эффекта.

19

Re: AHK: HotKey как работает?

Pr1mera пишет:

Вот весь скрипт: http://pastebin.com/apdcncNk
Чтобы уж наверняка.

Ну так как весь ваш скрипт я так и не смогу увидеть, ибо оформить по правилам форума вы отказываетесь, то увы я не ясновидящий. То что я вам предложил у меня (по аналогии предложеного вами) работает.

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

20

Re: AHK: HotKey как работает?

Я не отказывался. http://pastebin.com/apdcncNk

21

Re: AHK: HotKey как работает?

Где ошибка?


gosub, load
Gui, Add, Hotkey, x242 y130 w70 h20 vMyHotKey1 gHSave, %mhk1%
Gui, Show

Gui, Submit, NoHide

Hotkey, %MyHotKey1%, , UseErrorLevel
PrevKey1 := MyHotKey1
return

HSave:
Gui, Submit, NoHide
if (%A_GuiControl% ~= "W|S|A|D")
{
    GuiControl,, %A_GuiControl%
    return
}
   n := SubStr(A_ThisLabel, 0)
   Hotkey, % PrevKey%n%, , Off UseErrorLevel
   Hotkey, % MyHotKey%n%, hKey%n%, On UseErrorLevel
   if !ErrorLevel
   PrevKey%n% := MyHotKey%n%
return

Load:
IniRead, mhk1, %A_ScriptDir%\config.ini, HotKeys, mhk1
return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: HotKey как работает?

Я не отказывался

Лучше бы я неспрашивал.

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

23

Re: AHK: HotKey как работает?

Ошибки нет, как и работы самого хоткея. Выбрал я клавишу, по нажатию на неё должно что-то происходить. Но ничего нет. Разумеется, в коде выше отсутствует направление на метку. Но даже если и добавить - все равно ничего не происходит.

24

Re: AHK: HotKey как работает?

Но ничего нет.

Это НЕХ вмешался. У меня неправильный ПК, и всё работает:


gosub, load
Gui, Add, Hotkey, x242 y130 w70 h20 vMyHotKey gHSave, %mhk1%
Gui, Show

Gui, Submit, NoHide

Hotkey, %MyHotKey%, Hotkey, UseErrorLevel
PrevKey := MyHotKey
return

HSave:
    Gui, Submit, NoHide
    if (MyHotKey ~= "W|S|A|D")
    {
        GuiControl,, %A_GuiControl%
        return
    } 
    Hotkey, % PrevKey , Hotkey, Off UseErrorLevel
    Hotkey, % MyHotKey , Hotkey, On UseErrorLevel
    if !ErrorLevel
        PrevKey%n% := MyHotKey
return

Hotkey:
    MsgBox % A_ThisHotkey
    return
    
Load:
    IniRead, mhk1, %A_ScriptDir%\config.ini, HotKeys, mhk1
    return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: HotKey как работает?

Зачем тебе буковка "е"

n := SubStr(A_ThisLabel, 0)

?

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

26

Re: AHK: HotKey как работает?

Да, так в правду работает. Но у меня такой хоткей не один, а 63. Это под каждый надо писать отдельный HSave ?

27

Re: AHK: HotKey как работает?

Это под каждый надо писать отдельный HSave ?

Не надо.
Надо перечитать 25 пост, сделать вывод.
Ну и хотя бы чутка сократить строки (хотя бы с 250 по 375) применив Loop и A_Index.

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

28

Re: AHK: HotKey как работает?

Ничего не понимаю теперь. Совсем запутался.
n := SubStr(A_ThisLabel, 0)
Считывает последний символ, разве нет?
Как тогда сделать маской для всех 63 хоткеев? Сдаюсь...вынос мозга.

29

Re: AHK: HotKey как работает?

Наверное извлекать числа из A_GuiControl.

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

30

Re: AHK: HotKey как работает?

помогите пжл со скриптом, на alt+esc нажатием клавиши win.

31

Re: AHK: HotKey как работает?

yaroooslav000
Думаете ваш вопрос понятен?

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

32

Re: AHK: HotKey как работает?

нужно клавишу win. left настроить (написать скрипт) вместо alt+esc ( делает активным другое выполняющееся приложение (бывшее активным непосредственно перед текущим))

33 (изменено: serzh82saratov, 2013-09-10 17:43:23)

Re: AHK: HotKey как работает?

#Left::!Esc

А причём тут команда HotKey?

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

34

Re: AHK: HotKey как работает?

хорошая работа, спб!