1 (изменено: BashkaMen, 2013-12-11 18:31:37)

Тема: AHK: запись клавиши в переменную

Можно ли сделать так чтоб при нажатии любой клавиши она добавилась в переменную
Например:
D::
Добавилось впеременную кнопка D, и далее мы используем её.

2 (изменено: Irbis, 2013-12-06 14:28:24)

Re: AHK: запись клавиши в переменную

Встроенная переменная A_ThisHotkey хранит название последнего хоткея или строки автозамены.

P.S.: Отредактируй название темы - АНК:

3

Re: AHK: запись клавиши в переменную

BashkaMen, повышайте грамотность, знаки препинания Вам помогут.

4

Re: AHK: запись клавиши в переменную

Типа так:

D:: 
MsgBox , вы нажали  %A_ThisHotkey%
Win10 x64

5

Re: AHK: запись клавиши в переменную

А можно несколько клавиш записать? Например при активации начать и при деактивации завершить, а пот при активации пишет то что было нажато.

6

Re: AHK: запись клавиши в переменную

BashkaMen, нельзя до тех пор, пока не исправите заголовок.

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

7

Re: AHK: запись клавиши в переменную

Плявилась идея:
1button :=%A_ThisHotkey%
2button :=%A_ThisHotkey%

8

Re: AHK: запись клавиши в переменную

Zanoza, в этом случае будеть показывать только "D"
А мне нужно что б Активация была с любой клавиши и оно сказало какую мы нажали. Впринцепи можно сделать так.
d:: msgbox, вы нажали d
s:: msgbox, вы нажали s
ну и так далее...

9

Re: AHK: запись клавиши в переменную

BashkaMen пишет:

Zanoza, в этом случае будеть показывать только "D"
<...>

Серьёзно?

s:: 
d::
   msgbox, вы нажали %A_ThisHotkey%
Return

10 (изменено: serzh82saratov, 2013-12-10 18:45:12)

Re: AHK: запись клавиши в переменную

Господа, ведь на форуме есть уже давно готовые наработки на эту тему:


SetBatchLines -1
SetFormat, IntegerFast, H
OnExit, Exit
hHookKeybd := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
Return
 
Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp

LowLevelKeyboardProc(nCode, wParam, lParam)
{
    Critical
    IF (wParam = 0x100 || wParam = 0x104)
        ToolTip % "вы нажали: " GetKeyName("vk" NumGet(lParam+0, 0, "UInt") "sc" NumGet(lParam+0, 4, "UInt"))
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
} 

или "попроще для новичка":


SetBatchLines -1
Buttons := "LAlt|RAlt|LCtrl|RCtrl|LShift|RShift|LWin|RWin|"
        . "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|"    
        . "vkC1|vkC2|vkDF|vkE1|vkE2|vkE6|vkE3|vkF0|vkF2|vkF3|vkF5|vkF6|vkF7|vkF8|vkF9|vkFE|vk2B|vk6C|"     
        . "AppsKey|Backspace|CapsLock|Del|Down|End|Enter|Esc|Home|Left|Pause|PgDn|PgUp|PrintScreen|Right|ScrollLock|"
        . "Space|Tab|Up|0|1|2|3|4|5|6|7|8|9|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|" 
        . "Break|Clear|CtrlBreak|Help|Insert|Numlock|Numpad0|Numpad1|Numpad2|Numpad3|Numpad4|Numpad5|Numpad6|Numpad7|Numpad8|Numpad9|"
        . "NumpadAdd|NumpadClear|NumpadDel|NumpadDiv|NumpadDot|NumpadDown|NumpadEnd|NumpadEnter|NumpadHome|NumpadIns|"
        . "NumpadLeft|NumpadMult|NumpadPgDn|NumpadPgUp|NumpadRight|NumpadSub|NumpadUp|Sleep|" 
        . "Browser_Back|Browser_Favorites|Browser_Forward|Browser_Home|Browser_Refresh|Browser_Search|Browser_Stop|Launch_App1|"
        . "Launch_App2|Launch_Mail|Launch_Media|MButton|Media_Next|Media_Play_Pause|Media_Prev|Media_Stop|"
        . "Volume_Down|Volume_Mute|Volume_Up|MEDIA_NEXT_TRACK|MEDIA_PREV_TRACK|LAUNCH_MEDIA_SELECT|"  
        . "WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2" 
 
Loop, Parse, Buttons, |  
    Hotkey, ~%A_LoopField%, Buttons, UseErrorLevel
return
 
Buttons: 
    ThisHotkey := SubStr(A_ThisHotkey, 2)
    ToolTip % "вы нажали: " InStr(ThisHotkey, "vk") ? GetKeyName(ThisHotkey) : ThisHotkey
    return

BashkaMen
Поправьте всё таки ещё раз заголовок

AHK: запись клавиши в переменую

на

AHK: Запись клавиши в переменную

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

11

Re: AHK: запись клавиши в переменную

serzh82saratov, без #Persistent скрипт, который не "для новичка", становится практически неуловимым.

12

Re: AHK: запись клавиши в переменную

Irbis мне фиолетово.

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

13

Re: AHK: запись клавиши в переменную

serzh82saratov пишет:

Irbis мне фиолетово.

В каком смысле? Irbis имел в виду, что без #Persistent скрипт завершится моментально, дойдя до первого Return.

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

14

Re: AHK: запись клавиши в переменную

serzh82saratov пишет:

Господа, ведь на форуме есть уже давно готовые наработки на эту тему:


SetBatchLines -1
SetFormat, IntegerFast, H
OnExit, Exit
hHookKeybd := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
      , Int, WH_KEYBOARD_LL := 13
      , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
      , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
      , UInt, 0, Ptr)
Return
 
Exit:
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
   ExitApp

LowLevelKeyboardProc(nCode, wParam, lParam)
{
    Critical
    IF (wParam = 0x100 || wParam = 0x104)
        ToolTip % "вы нажали: " GetKeyName("vk" NumGet(lParam+0, 0, "UInt") "sc" NumGet(lParam+0, 4, "UInt"))
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
} 

или "попроще для новичка":


SetBatchLines -1
Buttons := "LAlt|RAlt|LCtrl|RCtrl|LShift|RShift|LWin|RWin|"
        . "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|"    
        . "vkC1|vkC2|vkDF|vkE1|vkE2|vkE6|vkE3|vkF0|vkF2|vkF3|vkF5|vkF6|vkF7|vkF8|vkF9|vkFE|vk2B|vk6C|"     
        . "AppsKey|Backspace|CapsLock|Del|Down|End|Enter|Esc|Home|Left|Pause|PgDn|PgUp|PrintScreen|Right|ScrollLock|"
        . "Space|Tab|Up|0|1|2|3|4|5|6|7|8|9|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|" 
        . "Break|Clear|CtrlBreak|Help|Insert|Numlock|Numpad0|Numpad1|Numpad2|Numpad3|Numpad4|Numpad5|Numpad6|Numpad7|Numpad8|Numpad9|"
        . "NumpadAdd|NumpadClear|NumpadDel|NumpadDiv|NumpadDot|NumpadDown|NumpadEnd|NumpadEnter|NumpadHome|NumpadIns|"
        . "NumpadLeft|NumpadMult|NumpadPgDn|NumpadPgUp|NumpadRight|NumpadSub|NumpadUp|Sleep|" 
        . "Browser_Back|Browser_Favorites|Browser_Forward|Browser_Home|Browser_Refresh|Browser_Search|Browser_Stop|Launch_App1|"
        . "Launch_App2|Launch_Mail|Launch_Media|MButton|Media_Next|Media_Play_Pause|Media_Prev|Media_Stop|"
        . "Volume_Down|Volume_Mute|Volume_Up|MEDIA_NEXT_TRACK|MEDIA_PREV_TRACK|LAUNCH_MEDIA_SELECT|"  
        . "WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2" 
 
Loop, Parse, Buttons, |  
    Hotkey, ~%A_LoopField%, Buttons, UseErrorLevel
return
 
Buttons: 
    ThisHotkey := SubStr(A_ThisHotkey, 2)
    ToolTip % "вы нажали: " InStr(ThisHotkey, "vk") ? GetKeyName(ThisHotkey) : ThisHotkey
    return

сделал такой большой код, а он всё равно делает так как этот:
d::
s::
msgbox, %A_ThisHotkey%
return

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

15

Re: AHK: запись клавиши в переменную

teadrinker пишет:
serzh82saratov пишет:

Irbis мне фиолетово.

В каком смысле? Irbis имел в виду, что без #Persistent скрипт завершится моментально, дойдя до первого Return.

teadrinker
Пардон, времени небыло вчера расписать мысль.
Я то знаю что Persistent там необходим, но не попал он в мой огрызок кода, а скорее обрезалось

Esc::ExitApp

из твоей темы. Я про то, что новичёк должен спросить почему код незапустился, но так как в 90% случаев, все коды пишутся в вакуум, я сказал что мне фиолетово, запустится он или нет. Irbis в который раз спасибо, всё подметил как всегда, фраза ни в коем случае не в его адрес, а скорее в пустоту.

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