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

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Не постоянная обработка клавиш

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

Post by Real 3L0 » 26 Oct 2017, 14:22

Решение подсказали там: http://forum.script-coding.com/viewtopi ... 61#p120461
Не использовать дублирование Alt, Ctrl и Shift

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

Post by Real 3L0 » 26 Oct 2017, 10:52

Интересно, почему это пометили как ответ?

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

Post by Real 3L0 » 24 Oct 2017, 15:45

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

Code: Select all

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 остаются нажатыми.
Повторное нажатие этой клавиши мышки - решает проблему.
Остальные комбинации (переключение раскладки и минимизация) всегда успешно работают.

Top