1 (изменено: Dworkin, 2013-04-08 17:36:09)

Тема: AHK: Любой Hotkey, который могу задать в окне GUI

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

Вот скрипт:

#UseHook
Hotkey := {"DelayShoot":"vk58"} 

Gui, Add, Edit, x6 y47 w40 h20 vInShootValue, 300
Gui, Add, Text, x46 y47 w140 h20 , Время зажатия стрельбы
Gui, Add, Edit, x6 y77 w40 h20 vUnShootValue, 150
Gui, Add, Text, x46 y77 w140 h20 , Время между зажатиями
Gui, Add, Hotkey, x6 y107 w40 h30 , 
Gui, Add, Text, x46 y107 w160 h30 , Горячая клавиша`, которую надо зажать для стрельбы
Gui, Add, CheckBox, x6 y7 w170 h30 gCheckBox vDelayShoot, On / Off Стрельбу на эту клавишу
; Generated using SmartGUI Creator 4.0
Gui, Show, x131 y91 h377 w477, New GUI Window
Return

GuiClose:
ExitApp

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

DelayShoot:
    GuiControlGet InShootValue
    GuiControlGet UnShootValue

While GetKeyState("vk58", "P")
{
   send {vk11 down}
   sleep, %InShootValue%
   send {vk11 up}
   sleep, %UnShootValue%
}
return

Решил создать скрипт в котором в окне GUI я выставляю свои значение. Время зажатой клавиши  и время паузы между этими зажатиями. С этим я справился.

В данном скрипте для активации я ставлю галочку, затем чтобы выполнялось нажатие определенных клавиш я зажимаю X(vk58).
Хотел бы чтобы в начале в GUI hotkey я нажимал любую клавишу, которая бы исполнила роль горячей клавиши, которая выполняла бы определенный действия. То есть вместо X я выбрал бы любую другую, которая будет мне удобно и мог бы поменять ее в любой момент.
Спасибо)

2 (изменено: serzh82saratov, 2013-04-08 04:02:16)

Re: AHK: Любой Hotkey, который могу задать в окне GUI

На скорую руку, для одиночных клавиш:



#UseHook
Hotkey := {"DelayShoot":"vk58"} 

Gui, Add, CheckBox, gCheckBox vDelayShoot, On / Off Стрельбу на эту клавишу 
Gui, Add, Edit, gEdit vInShootValue, 300
Gui, Add, Text, , Время зажатия стрельбы
Gui, Add, Edit, gEdit vUnShootValue, 150
Gui, Add, Text, , Время между зажатиями
Gui, Add, Hotkey, Limit128 gHotkey vHotkeykey w250, vk58
Gui, Add, Text, , Горячая клавиша, `nкоторую надо зажать для стрельбы
Gui, Show, , New GUI Window
Return

Hotkey:  
    Hotkey, % Hotkey["DelayShoot"], DelayShoot, Off UseErrorLevel
    Hotkey.Remove("DelayShoot") , Hotkey.Insert("DelayShoot", Hotkeykey)
    GuiControl, , DelayShoot, 0   
return

CheckBox:
    GuiControlGet, %A_GuiControl%   
    Hotkey, % Hotkey[A_GuiControl], %A_GuiControl%, % %A_GuiControl% = 1 ? "On" : "Off"
    return
    
Edit:
    GuiControlGet UnShootValue
    GuiControlGet InShootValue
    return
    
DelayShoot:   
    While GetKeyState(A_ThisHotkey, "P")
    {
        send {vk11 down}
        sleep, %InShootValue%
        send {vk11 up}
        sleep, %UnShootValue%
    }
    return

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

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

3 (изменено: Dworkin, 2013-04-08 17:37:57)

Re: AHK: Любой Hotkey, который могу задать в окне GUI

Дело в том что мне надо чтобы код был примерно такого вида.
Спасибо за ответ, но он не работает правильно. Может я пошел не тем путем, не знаю.

Запускаю скрипт, ставлю галочку, зажимаю X все нормально. Далее к окне GUI hotkey я нажимаю другую любую клавишу, снимается галочка, я опять ставлю галочку и тут у меня выдает ошибку
http://i52.fastpic.ru/big/2013/0408/48/0b487035d3ba1bca6d15e3e478780a48.png
Далее проверяю кнопку, которую я задал - не работает. Нажимаю X тоже не работает.

Конечный алгоритм...не уверен что вы имеет ввиду...
В конечном итоге я хотел бы задавать любую клавишу, то есть например мне не удобно зажимать клавишу F в игре чтобы выполнялась часть скрипта нажатия определенных клавиш и чтобы не лезть опять в код и изменять его во время игры, я просто сворачиваю игру, нажимаю в окне скрипта клавишу например E(любую другую), разворачиваю игру и теперь при зажатой E у меня выполняется часть скрипта нажатия определенных клавиш, если опять не удобно, я выполняю те же самые действия что и раньше.

4 (изменено: serzh82saratov, 2013-04-08 13:41:27)

Re: AHK: Любой Hotkey, который могу задать в окне GUI

но он не работает правильно.

И не должен
Ошибка из-за несоответствия имени кнопки языку ввода. Попробуйте сначала установить для окна английскую и проверьте. Или попробуйте на цифровых кнопках, всё будет работать. Обходить все несуразности работы "GUI Hotkey" долго и того не стоит. Могу только предложить вариант построения работы на этой билиотеке.

Конечный алгоритм...не уверен что вы имеет ввиду...

Описать желаемое более подробно. Добавлять ли в код ещё функции, или нужна только одна кнопка. Написать нужно ли сохранять последний Hotkey для последующего старта скрипта и.т.п.

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

5 (изменено: serzh82saratov, 2013-04-08 15:27:42)

Re: AHK: Любой Hotkey, который могу задать в окне GUI

Тоже на скорую руку с запоминанием всех введённых данных. Для одного действия, но любых кнопок



/*
[Hotkey]
DelayShoot=^!+#NumpadAdd
[Set]
CheckBox=1
InShootValue=302 
UnShootValue=153  
*/ 
#UseHook 
#Include HotkeyUserFunc.ahk   

IniRead, Stat, %A_ScriptFullPath%, Set, CheckBox  
Gui, Add, CheckBox, x10 gCheckBox vDelayShoot Checked%Stat%, On / Off Стрельбу на эту клавишу 
IniRead, Stat, %A_ScriptFullPath%, Set, InShootValue 
Gui, Add, Edit, x10 w40 Center Number Limit3 gEdit vInShootValue, %Stat%
Gui, Add, Text, yp x+10, Время зажатия стрельбы
IniRead, Stat, %A_ScriptFullPath%, Set, UnShootValue 
Gui, Add, Edit, x10 w40 Center Number Limit3 gEdit vUnShootValue, %Stat%
Gui, Add, Text, yp x+10, Время между зажатиями 
Gui, Add, Edit, x10 w250 Center ReadOnly gHotkey HWNDvMyHotkey, % HF_Read("DelayShoot","Hotkey",A_ScriptFullPath) 
HF_HotkeyUserFunc("vMyHotkey")
Gui, Add, Text, Center gFocusText vFocusText, Горячая клавиша, `nкоторую надо зажать для стрельбы
Gui, Show, , New GUI Window
Gosub, CheckBox
    
Edit:
    GuiControlGet UnShootValue
    GuiControlGet InShootValue 
    IniWrite, %UnShootValue%, %A_ScriptFullPath%, Set, UnShootValue 
    IniWrite, %InShootValue%, %A_ScriptFullPath%, Set, InShootValue 
    Return
    
Hotkey:  
    Hotkey, %key%, DelayShoot, Off UseErrorLevel
    IniWrite, %MyHotkey%, %A_ScriptFullPath%, Hotkey, DelayShoot 

CheckBox:
    GuiControlGet, DelayShoot  
    IniRead, key, %A_ScriptFullPath%, Hotkey, DelayShoot, %A_Space%  
    Hotkey, %key%, DelayShoot, % (DelayShoot = 1) ? " UseErrorLevel On" : " UseErrorLevel Off" 
    IniWrite, %DelayShoot%, %A_ScriptFullPath%, Set, CheckBox 
    return
    
DelayShoot:   
    ToolTip % "Подпрограмма - " A_ThisLabel "`nКнопка - " HF_ReadVar(A_ThisHotkey) "`nInShootValue = " InShootValue "`nUnShootValue = " UnShootValue
    return


FocusText:
    GuiControl, Focus, FocusText 
    If DelayShoot
        GuiControl, , FocusText, Проверяй!
    Sleep 550
    GuiControl, , FocusText, Горячая клавиша, `nкоторую надо зажать для стрельбы
    Return

HotkeyUserFunc.ahk положить в папку скрипта.

Post's attachments

HotkeyUserFunc.ahk 7.7 kb, 9 downloads since 2013-04-08 

You don't have the permssions to download the attachments of this post.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: Dworkin, 2013-04-08 19:24:09)

Re: AHK: Любой Hotkey, который могу задать в окне GUI

serzh82saratov пишет:

но он не работает правильно.

И не должен
Ошибка из-за несоответствия имени кнопки языку ввода. Попробуйте сначала установить для окна английскую и проверьте. Или попробуйте на цифровых кнопках, всё будет работать. Обходить все несуразности работы "GUI Hotkey" долго и того не стоит. Могу только предложить вариант построения работы на этой билиотеке.

Конечный алгоритм...не уверен что вы имеет ввиду...

Описать желаемое более подробно. Добавлять ли в код ещё функции, или нужна только одна кнопка. Написать нужно ли сохранять последний Hotkey для последующего старта скрипта и.т.п.

На numpad'e работает, но это не удобно(

Вот скрипт, который работает с которым вы мне помогли, конечно я туда подобавлял и другие скрипты, но для примера решил эти выделить(AutoZoom и Autorun)

#UseHook
Hotkey := {"AutoZoom":"vk58","Autorun":"vk20"} 
    
Gui, Add, CheckBox, gCheckBox vAutoZoom , Auto zoom 
Gui, Add, CheckBox, gCheckBox vAutorun , Auto run
Gui, Show,, CheckBox
Return

GuiClose:
    ExitApp

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

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

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

7

Re: AHK: Любой Hotkey, который могу задать в окне GUI

Dworkin, исправьте заголовок темы - окончания не согласованы.
И большая просьба из всех сообщений убрать слово "стрельба".

8

Re: AHK: Любой Hotkey, который могу задать в окне GUI

ypppu
Полностью присоединяюсь.

конечно я туда подавлял и другие скрипты, но для примера решил эти выделить(AutoZoom и Autorun

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

Теперь сюда же я хотел бы добавить

Я же вам написал:

Обходить все несуразности работы "GUI Hotkey" долго и того не стоит. Могу только предложить вариант построения работы на этой билиотеке.

----------------------

я хотел бы добавить то что излагал выше

и добавить сюда все что я описал выше

Офигенное ТЗ. А то что из изложенного выше ничего не ясно, и об этом перед этим было написано, конечно не важно.
Нужно от начала до конца, заново, возможно другими словами... Так, как если что-то забыл, то потом никто не поможет... и.т.п.

На numpad'e работает, но это не удобно(

http://s019.radikal.ru/i606/1203/58/7b55e7d0f1c8.jpg   <- не удержался...
Ну а если несерьёзно, то кроме как кнопки numpad, другие действительно нетребуются
Или может просто стоит спросить почему неполучается назначить другие, и подробно рассказать что сделал с имеющимся кодом.

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

9 (изменено: serzh82saratov, 2013-04-08 19:48:15)

Re: AHK: Любой Hotkey, который могу задать в окне GUI

+ такой


#UseHook  
Gui, Add, CheckBox, x10 gCheckBox vDelayShoot, On / Off Стрельбу на эту клавишу  
Gui, Add, Edit, x10 w40 Center Number Limit4 gEdit vInShootValue, % InShootValue := 300 
Gui, Add, Text, yp x+10, Время зажатия стрельбы 
Gui, Add, Edit, x10 w40 Center Number Limit4 gEdit vUnShootValue, % UnShootValue := 150 
Gui, Add, Text, yp x+10, Время между зажатиями 
Gui, Add, Edit, x10 w250 Center ReadOnly gCheckBox HWNDvMyHotkey, X
Gui, Add, Text, Center, Горячая клавиша, `nкоторую надо зажать для стрельбы
HF_HotkeyUserFunc("vMyHotkey") , MyHotkey := "vk58"
Gui, Show, , New GUI Window  
Return 
    
CheckBox:
    Hotkey, %PrMyHotkey%, DelayShoot, UseErrorLevel Off
    PrMyHotkey := MyHotkey
    GuiControlGet, DelayShoot
    Hotkey, %MyHotkey%, DelayShoot, % (DelayShoot = 1) ? " UseErrorLevel On" : " UseErrorLevel Off"  
    return
    
Edit:
    GuiControlGet UnShootValue
    GuiControlGet InShootValue  
    Return 
    
DelayShoot:   
    ToolTip % "Подпрограмма - " A_ThisLabel "`nКнопка - " HF_ReadVar(A_ThisHotkey) "`nInShootValue = " InShootValue "`nUnShootValue = " UnShootValue
    return  
    
    


    

    
    
    
    ; --------------- Далее библиотека, которую по чудесным и необъянимым причинам нельзя загрузить директивой #Include  ----------------------------------------------
    
    


    

    
    
    
HF_HotkeyUserFunc(HF_Control)  { ;***
    Global
    Loop, Parse, HF_Control, |
        HF_Ceil := Ceil(%A_LoopField%) , HF_Control_%HF_Ceil% := SubStr(A_LoopField, 2)
    HF_ModButtons := {"vkA4":"Alt","vkA5":"Alt","vkA2":"Ctrl","vkA3":"Ctrl","vkA0":"Shift","vkA1":"Shift","vk5B":"Win","vk5C":"Win"}
    HF_PrefMod := {"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
    HF_Buttons := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|vk43|vk44|vk45|vk46|vk47|vk48|"
                . "vk49|vk4A|vk4B|vk4C|vk4D|vk4E|vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
    OnExit, HF_Exit
    SetBatchLines -1
    HF_PID := DllCall("GetCurrentProcessId")
    Return OnMessage(0x111, "HF_WaitControl")

    HF_Exit:
        DllCall("UnhookWindowsHookEx", UInt, HF_State)
        Send, {LButton Up}{LCtrl Up}{RCtrl Up}{LShift Up}{RShift Up}{LAlt Up}{RAlt Up}{LWin Up}{RWin Up}
        ExitApp
} ;**

HF_WaitControl( HF_Param, HF_Handle) { ;***
    Global 
    If HF_Control_%HF_Handle% <>
    {
        HF_ControlName := HF_Control_%HF_Handle% , HF_HWNDControl := HF_Handle
        If (HF_Param >> 16 = 0x100)        ;    EN_SETFOCUS
            HF_State := DllCall("SetWindowsHookEx", Int, WH_KEYBOARD_LL := 13, UInt, RegisterCallback("HF_Write", "Fast")
                        , UInt, DllCall("GetModuleHandle", UInt, 0), UInt, 0)   ,     HF_DelStr := "" 
        If (HF_Param >> 16 = 0x200)        ;    EN_KILLFOCUS
        {
            HF_UnHook()
            Return
        }
    }
    IfWinNotActive, ahk_pid %HF_PID%
        HF_UnHook()
} ;** 

HF_UnHook() { ;***
    Global 
    DllCall("UnhookWindowsHookEx", UInt, HF_State)
    HF_ModCtrl := HF_ModAlt := HF_ModShift := HF_ModWin := HF_PrefModCtrl := HF_PrefModAlt := HF_PrefModShift := HF_PrefModWin := HF_Prefix := HF_State := ""
    If HF_DelStr = 1
        GuiControl, , % HF_HWNDControl, % "Нет"
} ;**             

HF_Write(HF_nCode, HF_wParam, HF_lParam)  { ;***
    Global
    SetFormat, IntegerFast, H 
    HF_VkCode := "vk" SubStr( NumGet(HF_lParam+0), 3)
    HF_D := ((NumGet(HF_lParam+0, 8) & 1) <<8) | NumGet(HF_lParam+0, 4)
    HF_SCCode := "sc" SubStr((HF_D = 0x136 ? 0x36 : HF_D), 3)
    IF (HF_wParam = 0x100 || HF_wParam = 0x104)   ; WM_KEYDOWN = 0x100, WM_SYSKEYDOWN = 0x104
    {
        IF HF_IS_Mod := HF_ModButtons[HF_VkCode]
            GoTo, HF_PressMod
        GoTo, HF_Write
    }
    IF HF_IS_Mod := HF_ModButtons[HF_VkCode]
        GoTo, HF_PressMod_Up
    Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1

    HF_PressMod_Up:
        HF_Mod%HF_IS_Mod% := HF_PrefMod%HF_IS_Mod% := ""
        If (HF_Hotkey <> "")
            Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1
        GoTo, HF_Write

    HF_PressMod:
        If HF_Mod%HF_IS_Mod% <>
            Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1
        HF_Mod%HF_IS_Mod% := HF_IS_Mod "+" , HF_PrefMod%HF_IS_Mod% := HF_PrefMod[HF_IS_Mod] , HF_Hotkey := ""

    HF_Write:
        HF_IS_Mod <> "" ? (HF_KeyName := HF_Hotkey := HF_Prefix := "" , HF_DelStr := "1") : (HF_KeyName := GetKeyName(HF_VkCode HF_SCCode) , HF_DelStr := "" 
        , HF_Hotkey := (HF_Buttons ~= "\|" HF_VkCode "\|") ? HF_VkCode : HF_KeyName , HF_Prefix := HF_PrefModCtrl HF_PrefModAlt HF_PrefModShift HF_PrefModWin) 
        %HF_ControlName% := HF_Prefix HF_Hotkey
        GuiControl, , % HF_HWNDControl, % HF_ModCtrl HF_ModAlt HF_ModShift HF_ModWin HF_KeyName = "" ? "Нет" : HF_ModCtrl HF_ModAlt HF_ModShift HF_ModWin HF_KeyName
        Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1
} ;**

HF_CallNextHookEx(nCode, wp, lp) { ;***
   Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wp, UInt, lp)
} ;**
    ; -------------------------------------- Read -------------------------------------- 
HF_Read(Key, Section, Path) { ;***
    Global HF_DelStr := ""
    IniRead, Key, % Path, % Section, % Key, % A_Space 
    If Key =
        Return "Нет"
    RegExMatch(Rtrim(Key, "}"), "S)^([\^\!\+#]*)\{?(.*)", K)
    Return RegExReplace(RegExReplace(RegExReplace(RegExReplace( K1,"\+","Shift+"),"\!","Alt+"),"\^","Ctrl+"),"#","Win+")
        . (K2 ~= "^vk" ? GetKeyName(K2) : K2)
} ;**

HF_ReadVar(Key) { ;***
    RegExMatch(Rtrim(Key, "}"), "S)^([\^\!\+#]*)\{?(.*)", K)
    Return RegExReplace(RegExReplace(RegExReplace(RegExReplace( K1,"\+","Shift+"),"\!","Alt+"),"\^","Ctrl+"),"#","Win+")
        . (K2 ~= "^vk" ? GetKeyName(K2) : K2)
} ;**

HF_ReadToSend(Key, Section = "", Path = "") { ;*** 
    If (Section <> "")
        IniRead, Key, % Path, % Section, % Key, % A_Space 
    Return RegExReplace( Key, "S)\w+", "{$0}")
} ;**

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

10

Re: AHK: Любой Hotkey, который могу задать в окне GUI

ypppu пишет:

Dworkin, исправьте заголовок темы - окончания не согласованы.
И большая просьба из всех сообщений убрать слово "стрельба".

Исправил

serzh82saratov пишет:
+ такой


#UseHook  
Gui, Add, CheckBox, x10 gCheckBox vDelayShoot, On / Off Стрельбу на эту клавишу  
Gui, Add, Edit, x10 w40 Center Number Limit4 gEdit vInShootValue, % InShootValue := 300 
Gui, Add, Text, yp x+10, Время зажатия стрельбы 
Gui, Add, Edit, x10 w40 Center Number Limit4 gEdit vUnShootValue, % UnShootValue := 150 
Gui, Add, Text, yp x+10, Время между зажатиями 
Gui, Add, Edit, x10 w250 Center ReadOnly gCheckBox HWNDvMyHotkey, X
Gui, Add, Text, Center, Горячая клавиша, `nкоторую надо зажать для стрельбы
HF_HotkeyUserFunc("vMyHotkey") , MyHotkey := "vk58"
Gui, Show, , New GUI Window  
Return 
    
CheckBox:
    Hotkey, %PrMyHotkey%, DelayShoot, UseErrorLevel Off
    PrMyHotkey := MyHotkey
    GuiControlGet, DelayShoot
    Hotkey, %MyHotkey%, DelayShoot, % (DelayShoot = 1) ? " UseErrorLevel On" : " UseErrorLevel Off"  
    return
    
Edit:
    GuiControlGet UnShootValue
    GuiControlGet InShootValue  
    Return 
    
DelayShoot:   
    ToolTip % "Подпрограмма - " A_ThisLabel "`nКнопка - " HF_ReadVar(A_ThisHotkey) "`nInShootValue = " InShootValue "`nUnShootValue = " UnShootValue
    return  
    
    


    

    
    
    
    ; --------------- Далее библиотека, которую по чудесным и необъянимым причинам нельзя загрузить директивой #Include  ----------------------------------------------
    
    


    

    
    
    
HF_HotkeyUserFunc(HF_Control)  { ;***
    Global
    Loop, Parse, HF_Control, |
        HF_Ceil := Ceil(%A_LoopField%) , HF_Control_%HF_Ceil% := SubStr(A_LoopField, 2)
    HF_ModButtons := {"vkA4":"Alt","vkA5":"Alt","vkA2":"Ctrl","vkA3":"Ctrl","vkA0":"Shift","vkA1":"Shift","vk5B":"Win","vk5C":"Win"}
    HF_PrefMod := {"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
    HF_Buttons := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|vk43|vk44|vk45|vk46|vk47|vk48|"
                . "vk49|vk4A|vk4B|vk4C|vk4D|vk4E|vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
    OnExit, HF_Exit
    SetBatchLines -1
    HF_PID := DllCall("GetCurrentProcessId")
    Return OnMessage(0x111, "HF_WaitControl")

    HF_Exit:
        DllCall("UnhookWindowsHookEx", UInt, HF_State)
        Send, {LButton Up}{LCtrl Up}{RCtrl Up}{LShift Up}{RShift Up}{LAlt Up}{RAlt Up}{LWin Up}{RWin Up}
        ExitApp
} ;**

HF_WaitControl( HF_Param, HF_Handle) { ;***
    Global 
    If HF_Control_%HF_Handle% <>
    {
        HF_ControlName := HF_Control_%HF_Handle% , HF_HWNDControl := HF_Handle
        If (HF_Param >> 16 = 0x100)        ;    EN_SETFOCUS
            HF_State := DllCall("SetWindowsHookEx", Int, WH_KEYBOARD_LL := 13, UInt, RegisterCallback("HF_Write", "Fast")
                        , UInt, DllCall("GetModuleHandle", UInt, 0), UInt, 0)   ,     HF_DelStr := "" 
        If (HF_Param >> 16 = 0x200)        ;    EN_KILLFOCUS
        {
            HF_UnHook()
            Return
        }
    }
    IfWinNotActive, ahk_pid %HF_PID%
        HF_UnHook()
} ;** 

HF_UnHook() { ;***
    Global 
    DllCall("UnhookWindowsHookEx", UInt, HF_State)
    HF_ModCtrl := HF_ModAlt := HF_ModShift := HF_ModWin := HF_PrefModCtrl := HF_PrefModAlt := HF_PrefModShift := HF_PrefModWin := HF_Prefix := HF_State := ""
    If HF_DelStr = 1
        GuiControl, , % HF_HWNDControl, % "Нет"
} ;**             

HF_Write(HF_nCode, HF_wParam, HF_lParam)  { ;***
    Global
    SetFormat, IntegerFast, H 
    HF_VkCode := "vk" SubStr( NumGet(HF_lParam+0), 3)
    HF_D := ((NumGet(HF_lParam+0, 8) & 1) <<8) | NumGet(HF_lParam+0, 4)
    HF_SCCode := "sc" SubStr((HF_D = 0x136 ? 0x36 : HF_D), 3)
    IF (HF_wParam = 0x100 || HF_wParam = 0x104)   ; WM_KEYDOWN = 0x100, WM_SYSKEYDOWN = 0x104
    {
        IF HF_IS_Mod := HF_ModButtons[HF_VkCode]
            GoTo, HF_PressMod
        GoTo, HF_Write
    }
    IF HF_IS_Mod := HF_ModButtons[HF_VkCode]
        GoTo, HF_PressMod_Up
    Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1

    HF_PressMod_Up:
        HF_Mod%HF_IS_Mod% := HF_PrefMod%HF_IS_Mod% := ""
        If (HF_Hotkey <> "")
            Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1
        GoTo, HF_Write

    HF_PressMod:
        If HF_Mod%HF_IS_Mod% <>
            Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1
        HF_Mod%HF_IS_Mod% := HF_IS_Mod "+" , HF_PrefMod%HF_IS_Mod% := HF_PrefMod[HF_IS_Mod] , HF_Hotkey := ""

    HF_Write:
        HF_IS_Mod <> "" ? (HF_KeyName := HF_Hotkey := HF_Prefix := "" , HF_DelStr := "1") : (HF_KeyName := GetKeyName(HF_VkCode HF_SCCode) , HF_DelStr := "" 
        , HF_Hotkey := (HF_Buttons ~= "\|" HF_VkCode "\|") ? HF_VkCode : HF_KeyName , HF_Prefix := HF_PrefModCtrl HF_PrefModAlt HF_PrefModShift HF_PrefModWin) 
        %HF_ControlName% := HF_Prefix HF_Hotkey
        GuiControl, , % HF_HWNDControl, % HF_ModCtrl HF_ModAlt HF_ModShift HF_ModWin HF_KeyName = "" ? "Нет" : HF_ModCtrl HF_ModAlt HF_ModShift HF_ModWin HF_KeyName
        Return HF_nCode < 0 ? HF_CallNextHookEx(HF_nCode, HF_wParam, HF_lParam) : 1
} ;**

HF_CallNextHookEx(nCode, wp, lp) { ;***
   Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wp, UInt, lp)
} ;**
    ; -------------------------------------- Read -------------------------------------- 
HF_Read(Key, Section, Path) { ;***
    Global HF_DelStr := ""
    IniRead, Key, % Path, % Section, % Key, % A_Space 
    If Key =
        Return "Нет"
    RegExMatch(Rtrim(Key, "}"), "S)^([\^\!\+#]*)\{?(.*)", K)
    Return RegExReplace(RegExReplace(RegExReplace(RegExReplace( K1,"\+","Shift+"),"\!","Alt+"),"\^","Ctrl+"),"#","Win+")
        . (K2 ~= "^vk" ? GetKeyName(K2) : K2)
} ;**

HF_ReadVar(Key) { ;***
    RegExMatch(Rtrim(Key, "}"), "S)^([\^\!\+#]*)\{?(.*)", K)
    Return RegExReplace(RegExReplace(RegExReplace(RegExReplace( K1,"\+","Shift+"),"\!","Alt+"),"\^","Ctrl+"),"#","Win+")
        . (K2 ~= "^vk" ? GetKeyName(K2) : K2)
} ;**

HF_ReadToSend(Key, Section = "", Path = "") { ;*** 
    If (Section <> "")
        IniRead, Key, % Path, % Section, % Key, % A_Space 
    Return RegExReplace( Key, "S)\w+", "{$0}")
} ;**

Спасибо это то что нужно

Только нубский вопрос)

DelayShoot:  
While % GetKeyState("HF_ReadVar(A_ThisHotkey)", "P")
{
   send {vk11 down}
   Sleep, InShootValue
   send {vk11 up}
   sleep, UnShootValue
}
Return

Как сделать чтобы работало?

11

Re: AHK: Любой Hotkey, который могу задать в окне GUI

Только нубский вопрос)

Так

While GetKeyState(A_ThisHotkey, "P")

если кнопка без модификатора.

Для нуба, у вас маловато вопросов...

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

12

Re: AHK: Любой Hotkey, который могу задать в окне GUI

Все отлично работает. Спасибо И за библиотеку HotkeyUserFunc тоже спасибо)

13 (изменено: serzh82saratov, 2013-04-09 01:33:07)

Re: AHK: Любой Hotkey, который могу задать в окне GUI

Спасибо это то что нужно

Думаю, что это больше подойдёт:

+ открыть спойлер


#SingleInstance force  

HK_AutoZoom := "vk58" , HK_Autorun := "!vk20" , HK_Other3 := "F1"

Gui, Color, FF8C00
Gui, Add, Edit, x10 w40 Center Number Limit4 gEditSave vInShootValue, % InShootValue := 300 
Gui, Add, Text, yp+2 x+10, Время зажатия стрельбы 

Gui, Add, Edit, x10 w40 Center Number Limit4 gEditSave vUnShootValue, % UnShootValue := 150 
Gui, Add, Text, yp+2 x+10, Время между зажатиями 
Gui, Add, Text, yp+30 x10 vFocusText, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GuiControl, Focus, FocusText

Gui, Add, CheckBox, x10 y+10 gCheckBox vCheck_AutoZoom, % "   AutoZoom"
Gui, Add, Edit, x10 w250 Center ReadOnly -Background gSave HWNDvHK_AutoZoom vAutoZoom, % HF_ReadVar(Pr_HK_AutoZoom := HK_AutoZoom)

Gui, Add, CheckBox, x10 y+10 gCheckBox vCheck_Autorun, % "   Autorun"
Gui, Add, Edit, x10 w250 Center ReadOnly -Background gSave HWNDvHK_Autorun vAutorun, % HF_ReadVar(Pr_HK_Autorun := HK_Autorun)

Gui, Add, CheckBox, x10 y+10 gCheckBox vCheck_Other3, % "   Такой ещё другой"
Gui, Add, Edit, x10 w250 Center ReadOnly -Background gSave HWNDvHK_Other3 vOther3, % HF_ReadVar(Pr_HK_Other3 := HK_Other3)

HF_HotkeyUserFunc("vHK_AutoZoom|vHK_Autorun|vHK_Other3") 
Gui, Show,, MyHotkeys
Return 

CheckBox:
    GuiControlGet, %A_GuiControl%     
    GuiControl := Ltrim(A_GuiControl, "Check_") 
    Hotkey, % HK_%GuiControl%, P_%GuiControl%, % Check_%GuiControl% = 1 ? " UseErrorLevel On" : " UseErrorLevel Off"  
    Return
    
Save:
    Hotkey, % Pr_HK_%A_GuiControl%, P_%A_GuiControl%, UseErrorLevel Off  
    Pr_HK_%A_GuiControl% := HK_%A_GuiControl% 
    Hotkey, % HK_%A_GuiControl%, P_%A_GuiControl%, % Check_%A_GuiControl% = 1 ? " UseErrorLevel On" : " UseErrorLevel Off"  
    Return
    
EditSave:
    GuiControlGet, %A_GuiControl%   
    Return
    
    ; ---------------------------------------------- Подпрограммы ----------------------------------------------
    
P_AutoZoom:
    ToolTip % "Подпрограмма - " A_ThisLabel "`nКнопка - " HF_ReadVar(A_ThisHotkey) "`n`nInShootValue = " InShootValue "`nUnShootValue = " UnShootValue
    Return
    
P_Autorun:
    ToolTip % "Подпрограмма - " A_ThisLabel "`nКнопка - " HF_ReadVar(A_ThisHotkey) "`n`nInShootValue = " InShootValue "`nUnShootValue = " UnShootValue
    Return
    
P_Other3:
    ToolTip % "Подпрограмма - Такой ещё другой`nКнопка - " HF_ReadVar(A_ThisHotkey) "`n`nInShootValue = " InShootValue "`nUnShootValue = " UnShootValue
    Return

   !   СНИЗУ КОНЕЧНО-ЖЕ БИБЛИОТЕКА   !

1:32 09.04.2013
Улучшил производительность.

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