Ahk сделать окно активным
Обновлено: 16.05.2024
[FAQ] ПО AutoHotKey
LButton - левая кнопка мыши
RButton - правая кнопка мыши
MButton - средняя кнопка мыши (или колесо)
WheelDown - поворот колеса мыши " вниз "
WheelUp - поворот колеса мыши " вверх "
Поддерживается только Windows 2000/XP :
XButton1 - четвертая кнопка мыши, боковая
XButton2 - пятая кнопка мыши, боковая
Space - пробел
Tab
Enter (или Return)
Escape (или Esc)
Backspace (или BS)
Delete (или Del)
Insert (или Ins)
Home
End
PgUp
PgDn
Up
Down
Left
Right
ScrollLock
CapsLock
NumLock
NumpadDiv - слэш "/"
NumpadMult - звездочка "*"
NumpadAdd - плюс "+"
NumpadSub - минус "-"
NumpadEnter - клавиша "Numpad-Enter"
Следующие названия клавиш используются, когда Numlock выключен:
NumpadDel
NumpadIns
NumpadClear - та же кнопка, что и Numpad5 на клавиатуре
NumpadUp
NumpadDown
NumpadLeft
NumpadRight
NumpadHome
NumpadEnd
NumpadPgUp
NumpadPgDn
Эти названия клавиш используются при включенном Numlock'e :
Numpad0
Numpad1
Numpad2
Numpad3
Numpad4
Numpad5
Numpad6
Numpad7
Numpad8
Numpad9
NumpadDot - " Numpad-точка "
С F1 по F24 - двенадцать или более функциональных клавиш, на большинстве клавиатур представлены в самом верхнем ряду.
AppsKey - клавиша, вызывающая контекстное меню файла/программы, как при правом клике мышкой.
LWin - левая клавиша "Windows"
RWin - правая клавиша "Windows"
Control (или Ctrl)
Alt
Shift
Примечание: в большинстве случаев работа со следующими шестью клавишами не поддерживается под Windows 95/98/Me . Используйте в этом случае вариант их записи, приведенный выше, вместо следующего:
LControl (или LCtrl) - левый "Сontrol"
RControl (или RCtrl) - правый "Сontrol"
LShift
RShift
LAlt - левый "Alt"
RAlt - правый "Alt". Примечание: если на вашей клавиатуре вместо клавиши RAlt сделана клавиша AltGr , вы можете использовать следующую запись данной клавиши: <^>! Также заметим, что клавишу AltGr можно записать как сочетание клавиш "LControl & RAlt::".
1:: ; например клавишей активации будет кнопка 1
Чтобы создать имитирование зажатия кнопки в течении несколько секунд нужно написать:
Sendplay, ; Вместо W можно вписать свою клавишу
Sleep, 10000 ; Время зажатии клавиши 1000 мсек /1 секунда
Sendplay, ; Отпустили клавишу
У нас получается небольшой анти афк бот:
WinActivate
A window title or other criteria identifying the target window. See WinTitle.
If present, this parameter must be a substring from a single text element of the target window (as revealed by the included Window Spy utility). Hidden text elements are detected if DetectHiddenText is ON.
Windows whose titles include this value will not be considered.
Windows whose text include this value will not be considered.
Remarks
When an inactive window becomes active, the operating system also makes it foremost (brings it to the top of the stack). This does not occur if the window is already active.
If the window is minimized and inactive, it is automatically restored prior to being activated. [v1.1.20+]: If WinTitle is the letter "A" and the other parameters are omitted, the active window is restored. [v1.1.28.02+]: The window is restored even if it was already active.
Six attempts will be made to activate the target window over the course of 60ms. If all six attempts fail, WinActivate automatically sends as a workaround for possible restrictions enforced by the operating system, and then makes a seventh attempt. Thus, it is usually unnecessary to follow WinActivate with WinWaitActive, WinActive() or IfWinNotActive.
In general, if more than one window matches, the topmost matching window (typically the one most recently used) will be activated. If the window is already active, it will be kept active rather than activating any other matching window beneath it. However, if the active window is moved to the bottom of the stack with WinSet Bottom, some other window may be activated even if the active window is a match.
WinActivateBottom activates the bottommost matching window (typically the one least recently used).
GroupActivate activates the next window that matches criteria specified by a window group.
[v1.1.20+]: If the active window is hidden and DetectHiddenWindows is turned off, it is never considered a match. Instead, a visible matching window is activated if one exists.
Window titles and text are case sensitive. Hidden windows are not detected unless DetectHiddenWindows has been turned on.
Known issue: If the script is running on a computer or server being accessed via remote desktop, WinActivate may hang if the remote desktop client is minimized. One workaround is to use commands which don't require window activation, such as ControlSend and ControlClick. Another possible workaround is to apply the following registry setting on the local/client computer:
WinActive()
Checks if the specified window is active and returns its unique ID (HWND).
Parameters
WinTitle A window title or other criteria identifying the target window. See WinTitle. WinText If present, this parameter must be a substring from a single text element of the target window (as revealed by the included Window Spy utility). Hidden text elements are detected if DetectHiddenText is ON. ExcludeTitle Windows whose titles include this value will not be considered. ExcludeText Windows whose text include this value will not be considered.Return Value
This function returns the unique ID (HWND) (as hexadecimal integer) of the active window if it matches the specified criteria, or 0 if it does not.
Since all non-zero numbers are seen as "true", the statement if WinActive(WinTitle) is true whenever WinTitle is active.
Remarks
If all parameters are omitted, the Last Found Window will be used.
If the active window is a qualified match, the Last Found Window will be updated to be the active window.
An easy way to retrieve the unique ID of the active window is with ActiveHwnd := WinExist("A") .
SetWinDelay does not apply to this function.
Window titles and text are case sensitive. Hidden windows are not detected unless DetectHiddenWindows has been turned on.
Related
Examples
Closes either Notepad or another window, depending on which of them was found by the WinActive functions above. Note that the space between an "ahk_" keyword and its criterion value can be omitted; this is especially useful when using variables, as shown by the second WinActive.
Ahk сделать окно активным
RainRa Posts: 8 Joined: 04 Mar 2021, 03:59 GitHub: RainRa
Ремап win+1, 2, 3. переключение между окнами Topic is solved
Пытаюсь реализовать скрипт копирующий поведение win+1 — выбирает приложение на панели задач внизу, если удерживать win и повторно нажимать, то можно переключаться между окнами приложения, что весьма удобно.
Я пытаюсь сделать на Lalt & S. Код ниже небрежный, но кое-как работает, но нет режима последовательно переключения по окнам при повторном нажатии S — как это реализовано в AltTab.
Если есть идеи или решения буду признателен
Я заметил, что для альт таб не так просто написать такой сценарий. Но в интернете есть решения, а по win+1 решений не нашел.
Вообще хотел бы отказаться от alt+tab в работе — случается путаница, например намного проще вызывать опера win+2 и так же через win+2 свернуть ее и фокус будет на предыдущее приложение. Только как это все грамотно переназначить.
Может кому пригодится — сценарий для запуска хрома, если он не запущен и переключения на него если запущен.
Ahk сделать окно активным
Активирует указанное окно (передаёт ему фокус).
WinActivate ( "title" [, "text" ] )
title | Заголовок/дескриптор/класс окна. См. заголовки и текст окон (расширенные). |
text | [необязательный] Текст окна. |
Успех: | Возвращает дескриптор окна. |
Ошибка: | Возвращает 0, если указанное окно не найдено или не может быть активировано. |
Можно использовать функцию WinActive () , чтобы узнать об успехе (или неудаче) функции WinActivate () . Если несколько окон соответствуют критерию, будет активировано самое недавнее активное окно. WinActivate () может работать со свёрнутыми окнами. Обратите внимание, что окна с атрибутом "Всегда поверх всех окон" по-прежнему будут отображаться поверх активированного окна.
@extended содержит дополнительную информацию о выполнении процесса активации (0 - окно не найдено, 1 - окно было активно, 2 - окно было неактивно).
; Запуск блокнота свёрнутым
Run ( 'notepad.exe' , '' , @SW_MINIMIZE )
WinActivate
A window title or other criteria identifying the target window. See WinTitle.
If present, this parameter must be a substring from a single text element of the target window (as revealed by the included Window Spy utility). Hidden text elements are detected if DetectHiddenText is ON.
Windows whose titles include this value will not be considered.
Windows whose text include this value will not be considered.
Remarks
If the window is minimized, it is automatically restored prior to being activated. In v1.1.20 and later, the window is restored even if it is already active.
Six attempts will be made to activate the target window over the course of 60ms. Thus, it is usually unnecessary to follow WinActivate with WinWaitActive or if !WinActive(. ).
If a matching window is already active, that window will be kept active rather than activating any other matching window beneath it. In general, if more than one window matches, the topmost (most recently used) will be activated. You can activate the bottommost (least recently used) via WinActivateBottom.
If the active window is hidden and DetectHiddenWindows is turned off, it is never considered a match. Instead, a visible matching window is activated if one exists.
Window titles and text are case sensitive. Hidden windows are not detected unless DetectHiddenWindows has been turned on.
Known issue: If the script is running on a computer or server being accessed via remote desktop, WinActivate may hang if the remote desktop client is minimized. One workaround is to use commands which don't require window activation, such as ControlSend and ControlClick. Another possible workaround is to apply the following registry setting on the local/client computer:
Ahk сделать окно активным
Петр, я в самый вверх добавил и при нажатии 6 у меня загорается красным цветом скрипт и нечего не происходит, не останавливается скрипт
6::pause, on
7::pause, off
WinActivate, ahk_class Chrome_WidgetWin_1
Нравится Показать список оценивших
suspend вместо pause
Нравится Показать список оценивших
Нравится Показать список оценивших
Петр, Как сделать чтобы при нажатии F2 постоянно окно становилось главным, в цикле, после нажатия 6 становился на паузу и 7 выходил из паузы скрипт
Нравится Показать список оценивших
Азат, какое окно? А что не так с командой WinActivate.
Нравится Показать список оценивших
Нравится Показать список оценивших
Петр, я запустил 2 bat файла в пк и в диспетчере задач у меня появились 2 процесса с названием, cmd.exe как завершить тот процесс который я хочу через ahk если они полностью по названию одинаковые?
Нравится Показать список оценивших
Нравится Показать список оценивших
Петр, я запустил, нечего не вывело
Нравится Показать список оценивших
Я проверил на процессе cmd.exe, id выводится.
Нравится Показать список оценивших
Нравится Показать список оценивших
Ahk сделать окно активным
Чужой компьютер
Просмотр темы 2 999
Вопросы по AHK
Влад, подскажи пожалуйста
Нравится Показать список оценивших
Максим, punto switcher в инете забей я ее сам качал
Нравится Показать список оценивших
Влад, так ее нужно качать или удалить?
Нравится Показать список оценивших
Влад, не нужно скачать или удалить?
Нравится Показать список оценивших
Влад, подскажи пожалуйста
Нравится Показать список оценивших
Влад, в Ютубе перерыл нечего не нашел
Нравится Показать список оценивших
Влад, подскажи пожалуйста
Нравится Показать список оценивших
Ребята, помогите столкнулся с такое броблемой как сделать так что-бы при нажантии ну допустим клавишы F1 АХК ставился на паузу и так-же выключался
Нравится Показать список оценивших
Как сделать чтоб работал ахк скрипт и я в этот момент еще мог писать свой текст в чат строку в КРМП?
Нравится Показать список оценивших
Нравится Показать список оценивших
Александр, Попробую. Отпишу
Нравится Показать список оценивших
Нравится Показать список оценивших
ребят, мне нужен ахк, что бы когда я нажимал клавиши ахк искал в чат логе сампа команду например /a /prison 20 20 uval или что то другое, то когда я нажимал клавиши она водилась у меня в чате.
Нравится Показать список оценивших
как сделать из AHK ( ППС (2) ) Превратить в блокнот? Или в текстовый документ? В свойствах его нельзя изменить. Подскажите. То есть как изменить тип файла?
Нравится Показать список оценивших
Даня,
Зажми шифт и нажми на этом файле правой кнопкой мыши и выбери - открыть с помощью блокнота
Нравится Показать список оценивших
Почему в сампе пишеться не как /me а по обычному
Нравится Показать список оценивших
Как привязать скрипт к игре/окну? что бы когда свернул ее-она не работала
Нравится Показать список оценивших
Нравится Показать список оценивших
Можно ли на ahk сделать такое: Есть скрипт,надо сделать переключатель,но так чтобы если скрипт включён,то звук один,а если при нажатии на эту же кнопку-звук выключения и выключение скрипта,скрипт обычного кликера куда хочу это добавить
F4::
Hotkey, LButton, Toggle
return
LButton::
Loop
<
SetMouseDelay 30
Click
If (GetKeyState("LButton","P")=0)
Break
>
Пользовательские шорткаты в 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
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
Remove_Splash:
SetTimer, Remove_Splash, Off
SplashImage, Off
Return
>
WinGetPos, EWD_OriginalPosX, EWD_OriginalPosY. ahk_id %EWD_MouseWin%
SetTimer, EWD_WatchMouse, 10
Return
EWD_WatchMouse:
EWD_Work = 1
GetKeyState, EWD_LButtonState, LButton, P
If EWD_LButtonState = U
SetTimer, EWD_WatchMouse, off
EWD_Work =
Return
>
GetKeyState, EWD_EscapeState, Escape, P
If EWD_EscapeState = D
SetTimer, EWD_WatchMouse, off
EWD_Work =
WinMove, ahk_id %EWD_MouseWin%,, %EWD_OriginalPosX%, %EWD_OriginalPosY%
Return
>
CoordMode, Mouse
MouseGetPos, EWD_MouseX, EWD_MouseY
WinGetPos, EWD_WinX, EWD_WinY. ahk_id %EWD_MouseWin%
SetWinDelay, -1
WinMove, ahk_id %EWD_MouseWin%,, EWD_WinX + EWD_MouseX - EWD_MouseStartX, EWD_WinY + EWD_MouseY - EWD_MouseStartY
EWD_MouseStartX := EWD_MouseX
EWD_MouseStartY := EWD_MouseY
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 < SWM_WinX+SWM_WinW/2)
SWM_ResizeTypeX=1
if (SWM_MouseStartY < SWM_WinY+SWM_WinH/2)
SWM_ResizeTypeY=1
SetTimer, SWM_WatchMouse_Resize, 10
return
SWM_WatchMouse_Move:
GetKeyState, SMW_LButtonState, LButton, P
if SMW_LButtonState = U
<
SetTimer, SWM_WatchMouse_Move, off
return
>
Gosub SWM_GetMouseAndWindowPos
SWM_WinX += %SWM_DeltaX%
SWM_WinY += %SWM_DeltaY%
SetWinDelay, -1
WinMove, ahk_id %SWM_MouseWin%,, %SWM_WinX%, %SWM_WinY%
return
SWM_WatchMouse_Resize:
GetKeyState, SMW_RButtonState, RButton, P
if SMW_RButtonState = U
<
SetTimer, SWM_WatchMouse_Resize, off
return
>
Gosub SWM_GetMouseAndWindowPos
if SWM_ResizeTypeX
<
SWM_WinX += %SWM_DeltaX%
SWM_WinW -= %SWM_DeltaX%
>
else
SWM_WinW += %SWM_DeltaX%
if SWM_ResizeTypeY
<
SWM_WinY += %SWM_DeltaY%
SWM_WinH -= %SWM_DeltaY%
>
else
SWM_WinH += %SWM_DeltaY%
SetWinDelay, -1
WinMove, ahk_id %SWM_MouseWin%,, %SWM_WinX%, %SWM_WinY%, %SWM_WinW%, %SWM_WinH%
return
SWM_GetMouseAndWindowPos:
CoordMode, Mouse
MouseGetPos, SWM_MouseX, SWM_MouseY
SWM_DeltaX = %SWM_MouseX%
SWM_DeltaX -= %SWM_MouseStartX%
SWM_DeltaY = %SWM_MouseY%
SWM_DeltaY -= %SWM_MouseStartY%
SWM_MouseStartX = %SWM_MouseX%
SWM_MouseStartY = %SWM_MouseY%
WinGetPos, SWM_WinX, SWM_WinY, SWM_WinW, SWM_WinH, ahk_id %SWM_MouseWin%
return
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
Поднимаемся на директорию вверх щелчком средней кнопкой мыши в проводнике
Изменяем прозрачность окна Ctrl+Shift+колесиком мыши
OnExit EXIT
^+WheelDown::
^+WheelUp::
Sleep 50
MouseGetPos cx, cy, Win_Id
WinGetClass Class, ahk_id %Win_Id%
If Class in Progman,Shell_TrayWnd
Return
IfEqual N%Win_Id%,, <
WinGet T, Transparent, ahk_id %Win_Id%
IfEqual T,, SetEnv T,255
List = %List%%Win_Id%,%T%,
N%Win_Id% = %T%
>
IfEqual A_ThisHotKey,^+WheelUp, EnvAdd N%Win_Id%,12
Else N%Win_Id% -= 12 ;Transparency changing step
IfGreater N%Win_Id%,255, SetEnv N%Win_Id%,255
IfLess N%Win_Id%,40, SetEnv N%Win_Id%,40
WinSet Transparent, % N%Win_Id%, ahk_id %Win_Id%
TrayTip,,% "Transparency: " N%Win_Id%
Return
EXIT:
Loop Parse, List, `,
If (A_Index & 1)
Else
Winset Transparent, %A_LoopField%, ahk_id %Id%
ExitApp
Закрываем окна в области панели задач Ctrl+средней кнопкой мыши
^MButton::
SetBatchLines, -1
CoordMode, Mouse, Screen
SetMouseDelay, -1
SetKeyDelay, -1
MouseGetPos, ClickX, ClickY, WindowUnderMouseID
WinActivate, ahk_id %WindowUnderMouseID%
;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
>
;Close taskbar program click
IfWinActive, ahk_class Shell_TrayWnd
<
MouseClick, Right, %ClickX%, %ClickY%
Sleep, 50
Send, c
WinWaitNotActive, ahk_class Shell_TrayWnd,, 0.5
If ErrorLevel =1
Send, !
Return
>
If GetKeyState("MButton", "P")
MouseClick, Middle, %ClickX%, %ClickY%,, Down
Else
MouseClick, Middle, %ClickX%, %ClickY%
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")
HKLnum:=DllCall("GetKeyboardLayoutList","uint",0,"uint",0)
VarSetCapacity( HKLlist, HKLnum*4, 0 )
DllCall("GetKeyboardLayoutList","uint",HKLnum,"uint",&HKLlist)
loop,%HKLnum%
< if( NumGet( HKLlist, (A_Index-1)*4 ) = HKL )
< HKL:=NumGet( HKLlist, mod(A_Index,HKLnum)*4 )
break
>
>
ControlGetFocus,ctl,A
SendMessage,0x50,0,HKL,%ctl%,A ;WM_INPUTLANGCHANGEREQUEST
;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 )
if( DllCall("Thread32First","uint",hProcessSnap, "uint",&thE ))
loop
if( NumGet( thE ) >= THREADENTRY32_th32OwnerProcessID + 4)
if( NumGet( thE, THREADENTRY32_th32OwnerProcessID ) = processID )
< th := NumGet( thE, THREADENTRY32_th32ThreadID )
IfEqual,ret,-1
ret:=th
list .= th "|"
>
NumPut( THREADENTRY32_SIZEOF, thE )
if( DllCall("Thread32Next","uint",hProcessSnap, "uint",&thE )=0)
break
>
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 (в том числе в полноэкранном режиме)
Space::
IfWinActive, ahk_class WMPTransition
PostMessage, 0x111, 32808, 0, , Windows Media Player
>
IfWinActive, ahk_class WMPlayerApp
PostMessage, 0x111, 32808, 0, , Windows Media Player
>
return
Читайте также: