sc коды клавиш autohotkey
Клавиатура
Примечание: названия буквенных и цифровых клавиш точно такие же, как и сами символы этих клавиш. То есть, клавиша «b» записывается как b, а клавиша «5» как 5.
Следующие названия клавиш используются, когда Numlock выключен:
Эти названия клавиш используются при включенном Numlock’e:
Клавиши расширенных функций Мультимедийных и Интернет-клавиатур:
Возможна запись VKnn, где nn является шестнадцатиричным виртуальным кодом клавиши. Несмотря на то, что этот редко используемый метод поддерживается всеми версиями программы, только с версии 1.0.38.02 и выше для некоторых типов горячих клавиш реализовано предотвращение отслеживания их функцией «keyboard hook» (обработчик клавиатурных прерываний). Например, следующая комбинация клавиш не использует обработчик клавиатурных прерываний (keyboard hook), и как следствие может быть запущена нажатием как клавиши Home, так и NumpadHome:
Джойстик
Несмотря на то, что следующие управляющие элементы джойстика не могут использоваться как горячие клавиши, их можно использовать при помощи команды GetKeyState:
JoyR: руль джойстика или 4-ая ось джойстика.
JoyU и JoyV: 5-ая и 6-ая оси джойстика.
JoyPOV: the point-of-view (hat) control (POV control, «шляпка» или «переключатель видов»; например, вид глазами игрока).
JoyName: название джойстика.
JoyButtons: количество кнопок, поддерживаемых джойстиком (не всегда точное).
JoyAxes: количество направлений, поддерживаемых джойстиком.
JoyInfo: генерирует строку, состоящую из нуля или более знаков, иллюстрирующих возможности джойстика: Z (имеется Z направление), R (имеется R направление), U (имеется U направление), V (имеется V направление), P (имеется POV control), D (POV control имеет ограниченное количество дискретных/промежуточных настроек), C (POV control передает непрерывные/точные данные). Пример строки: ZRUVPD.
Несколько джойстиков: если вы используете несколько джойстиков одновременно, то для более точной адресации команды используйте при записи номер джойстика перед именем клавиши джойстика. Например запись 2joy1 будет обозначать первую кнопку второго джойстика.
Примечание: если у вас возникли проблемы с определением скриптами вашего джойстика, вы можете попробовать изменить номер джойстика с 1 на что-нибудь другое, даже несмотря на то, что к компьютеру у вас подключен всего один. Неизвестно, по каким мистическим причинам, но иногда это вместе с использованием нашего тестового скрипта даёт положительный результат.
Использование джойстика как мыши: специальный скрипт превращает ваш джойстик в мышь (см. ссылку в оригинале статьи).
Дистанционные пульты управления
Специальные клавиши
Если ваши клавиатура или мышь имеют клавиши, не перечисленные выше, вы всё равно имеете возможность использовать их в качестве горячих клавиш, используя следующий метод:
Пользовательские шорткаты в Windows с помощью Autohotkey
По следам недавних и не столь недавних публикаций о шорткатах в Windows (1, 2) и Linux решил написать о том, как при помощи программы Autohotkey (Windows-only, инсталлятор, портабельная (zip) версия) можно задавать свои собственные клавиатурные сокращения для тех команд, для которых в системе по умолчанию никаких шорткатов не предусмотрено. Во многом свою роль здесь сыграло желание иметь в Винде те же шорткаты, что и на Маке, на котором я одно время много работал.
Autohotkey — не просто менеджер хоткеев, а поистине универсальный инструмент для манипулирования Windows, и реализация кастомных сокращений — отнюдь не единственная задача, которую она помогает решить (документация на английском, русском языке). Autohotkey использует свой собственный скриптовый язык, довольно простой, а для профессиональных программеров, как я подозреваю, и вовсе элементарный. На форуме программы опубликованы множество скриптов, написанных на языке AHK, в том числе целые приложения (пакетные переименователи, редакторы кода, инструменты для веб-разработки и т.д.).
Можно использовать шорткаты самых разных типов: обычные клавиатурные сокращения, сокращения, использующие мышь (кнопки и колесико), двойные щелчки и щелчки, комбинирующие разные кнопки мыши, двойные/тройные нажатия клавиш, модификаторы сами по себе (Ctrl, Alt и др.), кнопки джойстика и т.д. Кроме того, вы можете заставить шорткат работать только в определенных приложениях, и это открывает пространство для исправления «неправильных» по вашему мнению шорткатов в программах, где изменять их возможности нет (см. пример с Windows Media Player).
Я не включил сюда команды, которые могут выполнять и другие схожие программы (например, Hoekey, ограниченная по функциональности, но съедающая очень мало памяти — около 100-500 Кб, в отличие от Autohotkey, которая ест примерно 2-7 Мб). В том числе системные команды, позволяющие открывать по хоткею Панель управления, запускать текущий скринсейвер и т.д. Если что, соответствующие примеры могу выложить в отдельном топике. Незаменимый скрипт для смены раскладки и конвертирования текста из одной раскладки в другую написан нашим соотечественником wOxxOm с форума Autohotkey. Все скрипты работают и проверены на WinXP, хотя Autohotkey работает и под Вистой, гарантировать работоспособность всех примеров под ней не представляется возможным.
Далее приведены: сокращение, команда, ему присвоенная, и соответствующий код, который необходимо вставить в файл Autohotkey.ini. И, конечно, все шорткаты можно поменять на свой вкус. Просто измените часть скрипта до двойного двоеточия.
Очищаем корзину с помощью Shift+Alt+Backspace
+!Backspace:: FileRecycleEmpty
Закрываем любые окна с помощью Ctrl+Q (как на Linux)
$^q::
IfWinActive ahk_class WMPlayerApp
PostMessage, 0x10
else
WinClose, A
return
Минимизируем/максимизируем окна с Ctrl+Win+колесико мыши
^#WheelUp:: WinMaximize A
^#WheelDown:: WinRestore A
Win+Shift+C — копируем в буфер обмена путь к выделенному в проводнике файлу
#+c::
clipboard =
Send, ^c
ClipWait, 2
Sort, clipboard
Cворачиваем окна до строки заголовка нажатием тильды (`)
ws_MinHeight = 25
OnExit, ExitSub
return
`::
Sleep, 200
WinGet, ws_ID, ID, A
Loop, Parse, ws_IDList, |
<
IfEqual, A_LoopField, %ws_ID%
<
StringTrimRight, ws_Height, ws_Window%ws_ID%, 0
WinMove, ahk_id %ws_ID%. %ws_Height%
WinSet, AlwaysOnTop, off, A
StringReplace, ws_IDList, ws_IDList, |%ws_ID%
return
>
>
WinGetPos. ws_Height, A
WinSet, AlwaysOnTop, on, ahk_id %ws_ID%
ws_Window%ws_ID% = %ws_Height%
WinMove, ahk_id %ws_ID%. %ws_MinHeight%
ws_IDList = %ws_IDList%|%ws_ID%
return
ExitSub:
Loop, Parse, ws_IDList, |
<
if A_LoopField = ; First field in list is normally blank.
continue ; So skip it.
StringTrimRight, ws_Height, ws_Window%A_LoopField%, 0
WinMove, ahk_id %A_LoopField%. %ws_Height%
>
ExitApp
Передвигаем окна с зажатой клавишей Win (или любой другой)
#LButton::
CoordMode, Mouse
MouseGetPos, EWD_MouseStartX, EWD_MouseStartY, EWD_MouseWin
WinGetClass, EWD_Win_Class, ahk_id %EWD_MouseWin%
If EWD_Win_Class = ProgMan
Return
WinGet, State, MinMax, ahk_id %EWD_MouseWin%
If State = 1
<
SplashImage,, W160 H27 B1 FM8 WM400 CT000080,, Окно максимизировано,, Calibri
SetTimer, Remove_Splash, 600
Return
Remove_Splash:
SetTimer, Remove_Splash, Off
SplashImage, Off
Return
>
WinGetPos, EWD_OriginalPosX, EWD_OriginalPosY. ahk_id %EWD_MouseWin%
SetTimer, EWD_WatchMouse, 10
Return
Изменяем размер окон правой кнопкой мыши с зажатой клавишей Win
LWin & RButton::
CoordMode, Mouse ; Switch to screen/absolute coordinates.
MouseGetPos, SWM_MouseStartX, SWM_MouseStartY, SWM_MouseWin
WinGetPos, SWM_WinX, SWM_WinY, SWM_WinW, SWM_WinH, ahk_id %SWM_MouseWin%
WinGetClass, SWM_Win_Class, ahk_id %SWM_MouseWin%
If SWM_Win_Class = ProgMan
Return
WinGet, State, MinMax, ahk_id %SWM_MouseWin%
If State = 1
<
SplashImage,, W160 H26 B1 FM8 WM400 CT000080,, Окно максимизировано,, Calibri
SetTimer, Remove_Splash, 600
Return
>
GetKeyState, SMW_LCtrlState, LCtrl
if SMW_LCtrlState=D
<
WinClose, ahk_id %SWM_MouseWin%
return
>
SWM_ResizeTypeX=0
SWM_ResizeTypeY=0
if (SWM_MouseStartX
Alt+H — показываем/скрываем скрытые файлы в проводнике
!H::GoSub,CheckActiveWindow
CheckActiveWindow:
ID := WinExist(«A»)
WinGetClass,Class, ahk_id %ID%
WClasses := «CabinetWClass ExploreWClass»
IfInString, WClasses, %Class%
GoSub, Toggle_HiddenFiles_Display
Return
Toggle_HiddenFiles_Display:
RootKey = HKEY_CURRENT_USER
SubKey = Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
RegRead, HiddenFiles_Status, % RootKey, % SubKey, Hidden
if HiddenFiles_Status = 2
RegWrite, REG_DWORD, % RootKey, % SubKey, Hidden, 1
else
RegWrite, REG_DWORD, % RootKey, % SubKey, Hidden, 2
PostMessage, 0x111, 28931. ahk_id %ID%
Return
Поднимаемся на директорию вверх щелчком средней кнопкой мыши в проводнике
MButton::
MouseGetPos. hovercontrol
if hovercontrol = SysListView321
Send
else if hovercontrol = #327701
Send
Return
Создаем новую папку в проводнике двойным щелчком по любому пустому пространству внутри окна
#IfWinActive ahk_class CabinetWClass
EXIT:
Loop Parse, List, `,
If (A_Index & 1)
Else
Winset Transparent, %A_LoopField%, ahk_id %Id%
ExitApp
; WM_NCHITTEST
SendMessage, 0x84,, ( ClickY = 0x0400)
#define HTOBJECT 19
#define HTCLOSE 20
#define HTHELP 21
*/
;Close window with titlebar click
If WM_NCHITTEST_Result in 2,3,8,9,20,21
<
PostMessage, 0x112, 0xF060. ahk_id %WindowUnderMouseID% ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
Return
>
If GetKeyState(«MButton», «P»)
MouseClick, Middle, %ClickX%, %ClickY%,, Down
Else
MouseClick, Middle, %ClickX%, %ClickY%
Return
Изменяем вид папок в проводнике с помощью Win+цифровые клавиши
#1::PostMessage, 0x111, 28717. ahk_class CabinetWClass ; Эскизы
+#1::PostMessage, 0x111, 28719. ahk_class CabinetWClass ; Диафильм
#2::PostMessage, 0x111, 28718. ahk_class CabinetWClass ; Крупные значки
#3::PostMessage, 0x111, 28715. ahk_class CabinetWClass ; Список
#4::PostMessage, 0x111, 28716. ahk_class CabinetWClass ; Таблица
Изменяем системную громкость с помощью Win+колесико мыши
#WheelUp::
SoundSet +5
SoundSet, +5, wave
return
Scroll Lock — изменяем раскладку выделенного текста
Изменяем текущую раскладку нажатием правой Ctrl
$
LangSwitch( iKeyDownUp=0 )
<
static tickLast
IfEqual,iKeyDownUp,1
< tickLast=%A_TickCount%
return
>
IfEqual,iKeyDownUp,2
If( A_TickCount-tickLast>200 )
return
HKL:=DllCall(«GetKeyboardLayout», «uint»,GetThreadOfWindow(), «uint»)
;show traytip
LOCALE_SENGLANGUAGE=0x1001
LOCALE_SENGCOUNTRY=0x1002
VarSetCapacity( sKbd, 260, 0 )
VarSetCapacity( sCountry, 260, 0 )
DllCall(«GetLocaleInfo»,»uint»,HKL>>16,»uint»,LOCALE_SENGLANGUAGE, «str»,sKbd, «uint»,260)
DllCall(«GetLocaleInfo»,»uint»,HKL & 0xFFFF,»uint»,LOCALE_SENGCOUNTRY, «str»,sCountry, «uint»,260)
traytip,%sKbd%,%sCountry%
SetTimer,REMOVE_TOOLTIP,500 ;0.5 second
return
REMOVE_TOOLTIP:
SetTimer,REMOVE_TOOLTIP,off
traytip
return
>
;returns first thread for the ;sets optional to pipe | separated thread list for the GetProcessThreadOrList( processID, byRef list=»» )
<
;THREADENTRY32 <
THREADENTRY32_dwSize=0 ; DWORD
THREADENTRY32_cntUsage = 4 ;DWORD
THREADENTRY32_th32ThreadID = 8 ;DWORD
THREADENTRY32_th32OwnerProcessID = 12 ;DWORD
THREADENTRY32_tpBasePri = 16 ;LONG
THREADENTRY32_tpDeltaPri = 20 ;LONG
THREADENTRY32_dwFlags = 24 ;DWORD
THREADENTRY32_SIZEOF = 28
hProcessSnap := DllCall(«CreateToolhelp32Snapshot»,»uint»,TH32CS_SNAPTHREAD, «uint»,0)
ifEqual,hProcessSnap,-1, return
VarSetCapacity( thE, THREADENTRY32_SIZEOF, 0 )
NumPut( THREADENTRY32_SIZEOF, thE )
DllCall(«CloseHandle»,»uint»,hProcessSnap)
StringTrimRight,list,list,1
return ret
>
; Returns thread owning specified window handle
; default = Active window
GetThreadOfWindow( hWnd=0 )
<
IfEqual,hWnd,0
hWnd:=WinExist(«A»)
DllCall(«GetWindowThreadProcessId», «uint»,hWnd, «uintp»,id)
GetProcessThreadOrList( id, threads )
IfEqual,threads,
return 0
CB:=RegisterCallback(«GetThreadOfWindowCallBack»,»Fast»)
lRet=0
lParam:=hWnd
loop,parse,threads,|
< NumPut( hWnd, lParam )
DllCall(«EnumThreadWindows», «uint»,A_LoopField, «uint»,CB, «uint»,&lParam)
if( NumGet( lParam )=true )
< lRet:=A_LoopField
break
>
>
DllCall(«GlobalFree», «uint», CB)
return lRet
>
GetThreadOfWindowCallBack( hWnd, lParam )
<
IfNotEqual,hWnd,% NumGet( 0+lParam )
return true
NumPut( true, 0+lParam )
return 0
>
Ставим Windows Media Player на паузу с помощью клавиши Space (в том числе в полноэкранном режиме)
[FAQ] Autohotkey (горячие клавиши)
Сообщения : 49
Дата регистрации : 2012-02-27
Возраст : 26
Откуда : Волгоград