Тема: AHK:Как назначить сочетание клавиш на одну кнопку?
Подскажите я не совсем разобрался в этой программе.
Скажем у меня есть сочетание клавиш Alt+Ctrl+F и я хочу чтоб это все происходило при нажатии "G".
Как можно это сделать?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите я не совсем разобрался в этой программе.
Скажем у меня есть сочетание клавиш Alt+Ctrl+F и я хочу чтоб это все происходило при нажатии "G".
Как можно это сделать?
vk0x47::!^vk0x46
Виртуальные key-коды можно найти здесь - http://msdn.microsoft.com/en-us/library … s.85).aspx
P.S.: Если нужно, чтобы еще и G посылалась, то следует добавить ~ перед запускаемой клавишей.
Спасибо! но такая загвоздка.
Сделал так
VK0x45::VK0x10^VK0x43,
Сочетание клавиш
Shift+Ctrl+C
Но в программе не происходит нужного действия.
! = Alt
+ = Shift
^ = Ctrl
Если нужно сделать физический зажим и отжим, то тогда так:
#InstallKeybdHook
#NoEnv
vk0x45::
{
Send {vk0xA0 Down}{vk0x11 Down}{vk0x43 Down}
sleep, 50 ; Здесь можно указать время в миллисекундах на сколько подождать перед выполнением дальше кода
Send {vk0xA0 Up}{vk0x11 Up}{vk0x43 Up}
}
Return
Или так:
#InstallKeybdHook
#NoEnv
vk0x45::Send {vk0xA0 Down}{vk0x11 Down}{vk0x43 Down}{vk0xA0 Up}{vk0x11 Up}{vk0x43 Up}
Return
В теории должно работать, на практике не проверял.
Пасибо огромное! Божественная программа! А можете еще подсказать? Как можно сделать чтоб для каждый программы уникальные хоткеи назначить.
Как можно сделать чтоб для каждый программы уникальные хоткеи назначить.
Это как?
Если нужно, чтобы в ПРОГЕ1 с кнопки G выполнялось ДЕЙСТВИЕ1, а в ПРОГЕ2 с кнопки G выполнялось ДЕЙСТВИЕ2, то можно сделать, например, так:
#InstallKeybdHook
#NoEnv
vk0x45::
IfWinActive, ПРОГА1
{
Send {vk0xA0 Down}{vk0x11 Down}{vk0x43 Down}
sleep, 50 ; Здесь можно указать время в миллисекундах на сколько подождать перед выполнением дальше кода
Send {vk0xA0 Up}{vk0x11 Up}{vk0x43 Up}
}
IfWinActive, ПРОГА2
{
Send ^+{vk0x1B}
}
Return
IfWinActive - если активно окно (название).
Если можете разъясните пожалуйста на пальцах ото, я в этом не селен.
Вот что у меня получилось.
#InstallKeybdHook
#NoEnv
IfWinActive, 3ds Max 2014
{
TAb::MouseClick, Left,
CapsLock::MouseClick, Right,
#NoEnv ------ Shift+Ctrl+C Фаска
VK0x45::+^VK0x43
}
IfWinActive, Firefox
{
#NoEnv ------ Muse прокрутка мыши
VK0x51::WheelUp
VK0x41::MButton
VK0x5A::Wheeldown
}
Return
Но все равно все хоткеи срабатывают и 3ds Max и Firefox. А мне хотелось бы разделить и будет скажем фотошоп.
#IfWinActive, 3ds Max 2014
Tab::MouseClick
CapsLock::MouseClick, Right
vk45::+^vk43
#IfWinActive, Firefox
vk51::WheelUp
vk41::MButton
vk5A::Wheeldown
#IfWinActive
#IfWinActive, Firefox
Должно быть точное название программы?
Я видел, но я не смог разобраться как нужно формировать код.
Такого параметра как "название программы" нет.
Есть заголовок окна, класс окна, имя процесса или полный путь к процессу окна http://ahkscript.org/docs/misc/WinTitle.htm#ahk_exe
Например параметр WinTitle для окна блокнота, может выглядеть как один из этих вариантов:
Безымянный — Блокнот ahk_class Notepad ahk_exe notepad.exe
Безымянный — Блокнот ahk_class Notepad ahk_exe C:\Windows\System32\notepad.exe
Безымянный — Блокнот
Безымянный — Блокнот ahk_class Notepad
ahk_class Notepad
ahk_exe notepad.exe
Например если задать его как только заголовок "Firefox", то возможно совпадение с окном например проводника, в котором открыта папка Firefox. Теперь разобрались?
И так как заголовок окна часто меняется, то лучше задавать как класс и ехе:
ahk_class Notepad ahk_exe notepad.exe
Я не пойму почему все равно эти хоткеи срабатывают везде.
PS. Кажется разобрался..
По сути то всё просто, т.е. очень просто Вот пример
;-----BEGIN--Для SIMS 3
#If vGameKey && WinActive("The Sims™ 3")
SetTitleMatchMode, 2
LShift & ESC::
Send {F5}
return
RShift & Enter::
Tab::
Send {n}
Enter::
MouseClick, right, 20, 910
MouseMove, 620, 475
Sleep, 700
MouseClick, WheelUp, , , 6
return
#IfWinActive
;-----END--Для SIMS 3
Те между кодом
#If vGameKey && WinActive("The Sims™ 3")
SetTitleMatchMode, 2
и кодом
#IfWinActive
пишем нужные клавиши/сочетания, действия и т.д.
Переменная vGameKey позволяет динамически отключать эти действия, вот ёё код
GameKeyOnOff:
if (!vGameKey)
{
msgbox 1,Switching Game Keys,Игровые клавиши = OFF `n `nВКЛючить игровые клавиши? ,10
IfMsgBox, Cancel
return
else
vGameKey := true
}
else
{
msgbox 1,Switching Game Keys,Игровые клавиши = ON `n `nВЫКЛючить игровые клавиши?,10
IfMsgBox, Cancel
return
else
vGameKey := false
}
return
Можеш её убрать из конструкции #If WinActive и получим код
;-----BEGIN--Для SIMS 3
#If WinActive("The Sims™ 3")
SetTitleMatchMode, 2
; Действия при активном окне приложения
#IfWinActive
;-----END--Для SIMS 3
SetTitleMatchMode, MatchMode
MatchMode = 1 Заголовок окна должен начинаться со значения, заданного в WinTitle
MatchMode = 2 Заголовок окна должен содержать значение, заданное в WinTitle
MatchMode = 3 Заголовок окна должен совпадать со значением, заданным в WinTitle
Думаю я дал полный ответ на все вопросы.
Indomito, Спасибо вроде разобрался)! Только один еще вопрос, а можно как-то кнопку задействовать там где символы (~`ё) в списке Virtual-Key Codes, я ее не нашел.
Вот скрипт и для кнопок, и для WinTitle (так сказать).
serzh82saratov, пасибо за подсказки. Черт офигенская программа, почему о ней все молчат.
serzh82saratov "о птичках"
Это вроде бы твоё произведение
#Persistent
OnExit, Exit
ToolTip
hHookKeybd := DllCall("SetWindowsHookEx"
, Int, WH_KEYBOARD_LL := 13
, Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
, Ptr, DllCall("GetModuleHandle", UInt, 0, "Ptr")
, UInt, 0, "Ptr")
Return
^#ESC::
Exit:
DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
ToolTip
ExitApp
LowLevelKeyboardProc(nCode, wParam, lParam)
{
Critical
SetFormat, Integer, H
ToolTip, % wParam . "| vkCode: " . NumGet(lParam+0, 0, "UInt") . " scCode: " . NumGet(lParam+0, 4, "UInt")
. " Extended: " . NumGet(lParam+0, 8, "UInt") & 1 . " Time: " . NumGet(lParam+0, 12, "UInt")
Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
}
Правда я внёс не значительные правки.
1. Мне нужно, что бы она не оставалась резидентной
2. Я её хочу использовать как подпрограмму функцию, т.е. что бы она возвращала коды нажатия
Все мои попытки потерпели фиаско, но мне нужна именно она и именно в такой реализации.
Помоги мне, если можешь, а то я замучался.
serzh82saratov, пасибо за подсказки. Черт офигенская программа, почему о ней все молчат.
ей все пользуются, просто надо немного поискать по форуму
Все мои попытки потерпели фиаско, но мне нужна именно она и именно в такой реализации.
Помоги мне, если можешь, а то я замучался.
В коде AhkSpy есть даже ссылка на тему для обсуждления этого (несформулированного) вопроса:
; _________________________________________________ Hotkey Functions _________________________________________________
; http://forum.script-coding.com/viewtopic.php?pid=69765#p69765
А также на то, что авторство клавиатурного хука принадлежит не мне:
; http://forum.script-coding.com/viewtopic.php?id=6350
Hotkey_LowLevelKeyboardProc(nCode, wParam, lParam) {
Прочёл всё до конца и ничего не понял, т.е. запутался ))))
Мне то нужно просто vk и sc одной клавиши и один раз без модификаторов , но так что бы скрипт можно было выгрузить...
Там я просто запутался...
Сорри
Indomito
Видимо спойлер под названием "OffTop" и эта фраза
есть даже ссылка на тему для обсуждления этого (несформулированного) вопроса:
имеют большую степень прозрачности намёка на:
2. Запреты
2.1. Запрещаются оффтопики (сообщения не по теме ветки
Сергей... ок(уяснил намёк)
С уважением, Александр.
Я продолжу в этой теме?
Есть задача в стеке модификаторов Copy и Pasteтить.
в Махе не получается назначить хоткей на эту штуку.
Можно ли как-то скриптом AutoHotkey реализовать.
Я просто не знаю по какому принципу строки AutoHotkey нужно прописывать.(хотяб какойнить пример)
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться