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

Читайте также: