1

Тема: AHK: Не постоянная обработка клавиш

Приветствую.
Win10Pro. Есть мышка с набором программируемых клавиш. Повесил на одну клавишу: если она нажата - шлёт "Alt+Shift+x"
В AHK написал следующий скрипт (скомпилирован в exe):


Hotkey, CapsLock, CapsLock, On
Hotkey, !+m, MinimizeWindow, On
Hotkey, !+x, CloseAppOrInApp, On
Hotkey, ^F1, Debug, On
return

Debug:
	proc := WinGetActiveProcessName()
	MsgBox,,, _%proc%_
return

CapsLock:
	SendInput {Alt Down}{Shift Down}{Shift Up}{Alt Up}
return

MinimizeWindow:
	WinMinimize, A
return

CloseAppOrInApp:
	
	proc := WinGetActiveProcessName()
	
	if (proc = "HxOutlook.exe")
	{
		;SendInput {Delete}
		SendInput {vk2Esc153 Down}{vk2Esc153 Up}
	}
	else if (proc = "chrome.exe") or (proc = "MicrosoftEdge.exe")
	{
		;{LCtrl Down}{w Down}{w Up}{LCtrl Up}
		SendInput {vkA2sc01D Down}{vk57sc011 Down}{vk57sc011 Up}{vkA2sc01D Up}
	}
	else
	{
		SendInput {LAlt Down}{F4 Down}{F4 Up}{LAlt Up}
	}
return

WinGetActiveProcessName() {
    WinGet name, ProcessName, A
    if (name = "ApplicationFrameHost.exe") {
        ControlGet hwnd, Hwnd,, Windows.UI.Core.CoreWindow1, A
        if hwnd {
            WinGet name, ProcessName, ahk_id %hwnd%
        }
    }
    return name
}

Скрипт делает:
* если активно приложение почты - нажимаем Del - удаляем письмо;
* если активен браузер - нажимаем Ctrl+w - закрываем вкладку;
* в остальных случаях - Alt+F4

Проблема в том, что иногда эта комбинация выполняет нужный результат, но потом происходит что-то мне не понятное: больше всего похоже на то, что Alt или Shift остаются нажатыми. С соответствующими этому последствиями: обыкновенный клик мышкой приводит к выделению объектов или другим действиям, а клавиатура не реагирует на нажатия.
Повторное нажатие этой клавиши мышки или нажатие Alt или Shift - решает проблему.
Остальные комбинации (переключение раскладки и минимизация) всегда успешно работают.
Пробовал всякие разные варианты (поэтому такой код), но пока безрезультатно. Повторю - баг плавающий.

2

Re: AHK: Не постоянная обработка клавиш

Дело в интерференции нажатия Alt, Shift от мыши и от скрипта. Простые варианты:
1) "Alt+Shift+x" → "Win+F1" ; любая комбинация без участия Alt и Ctrl
2) Hotkey, !+x → Hotkey, !+x Up ; срабатывание по отпусканию позволит избежать пересечения нажатий
И вообще:

; SendInput {vkA2sc01D Down}{vk57sc011 Down}{vk57sc011 Up}{vkA2sc01D Up} ; ↓
Send ^{vk57} ; = 
Send % "^" Format("{vk{:x}}", GetKeyVK("W"))
; SendInput {LAlt Down}{F4 Down}{F4 Up}{LAlt Up} ; ↓ 
Send !{F4}

3 (изменено: prikhodko.al, 2017-10-26 19:46:23)

Re: AHK: Не постоянная обработка клавиш

stealzy пишет:

Hotkey, !+x Up ; срабатывание по отпусканию позволит избежать пересечения нажатий

А как это запрограммировать? Указанный синтаксис не поддерживается же.

UPD: Хм, поддерживается. Но не помогло.

4

Re: AHK: Не постоянная обработка клавиш

stealzy пишет:

1) "Alt+Shift+x" → "Win+F1" ; любая комбинация без участия Alt и Ctrl

Остановился на таком варианте:


Hotkey, CapsLock, CapsLock, On
Hotkey, Tab & m Up, MinimizeWindow, On
Hotkey, Tab & x Up, CloseAppOrInApp, On
Hotkey, ^F1, Debug, On
Tab::Tab

5

Re: AHK: Не постоянная обработка клавиш

Я бы ставил это в вину кривому софту мышки. Например у logitech просто чудовищно кривой софт для программирования клавиш.
Если ваш софт позволяет задать произвольный vk-код, то все еще удобнее - берете любой незанятый vk код, список занятых тут.