3

Я переназначил свой ключ NumLock, используя AutoHotKey, чтобы он вместо этого открыл калькулятор, используя следующий скрипт:

NUMLOCK::
IfWinExist Calculator
{
    WinActivate Calculator
}
else
{
    Run, % "calc"
    WinWait Calculator
    WinActivate
}

Это отлично работало в Windows 7 (хотя и с другой строкой запуска из-за изменения имени приложения). IfWinExist проверяет, запущен ли калькулятор. Если это так, он активирует его; если нет, он запускает его. Это поможет вам не запускать несколько копий калькулятора, если вы не закроете его между использованиями.

С Windows 10 я заметил, что он работает только с перебоями. При первом запуске после перезагрузки все работает как обычно. Однако иногда при закрытии приложения «Калькулятор» оно сохраняется в фоновых процессах, а не по-настоящему завершается.

Когда я активирую скрипт, IfWinExist обнаружит, что он работает, и (по-видимому) активирует его, но без видимого эффекта, так как это фоновый процесс. Если я открываю диспетчер задач и убиваю процесс, нормальная функция возвращается (на некоторое время).

Есть ли способ запретить Windows оставлять калькулятор в качестве фонового процесса или сделать так, чтобы AutoHotKey различал приложения и фоновые процессы?

4 ответа4

1

Я не использую Windows 10 большую часть времени. Похоже, вам либо нужен способ обнаружить, что это фоновый процесс, а затем либо активировать его (чтобы он больше не был фоновым процессом), либо просто убить его и запустить новую копию.

Если не считать того, как на самом деле определить, как активировать «правильный» способ, вы могли бы сделать WinActivate а затем WinWaitActive с таймаутом. Если ErrorLevel установлен, то он не активировался должным образом (т. Е. Фоновый процесс), и вы можете убить / перезапустить.

Вы также можете посмотреть текущую настройку A_DetectHiddenWindows и посмотреть, включена ли она - я думаю, она не включена и по умолчанию выключена. Вы могли видеть , вызывает ли изменение DetectHiddenWindows, On какие-либо изменения в поведении (не догадываясь).

Вы также можете попробовать WinShow после того, как IfWinExist вернет true, т. Е. Перед активацией с помощью WinActivate . Я не уверен, что Windows 10 делает за кулисами, но это может быть просто скрытое окно, которое присутствует на заднем плане, и в этом случае вы можете показать это. Вы также можете найти утилиту под названием Spy++ или Spyxx которая будет показывать вам все окна по потокам , процессам или окнам с древовидным представлением, которые будут показывать вам наличие скрытого окна при работе в качестве фонового процесса.

1

Это то, что я использую. Это не самый красивый код, но он на 100% надежен для калькулятора в Windows 10, будь то фоновый процесс или нет. Мне нравится отмечать это AlwaysOnTop на основе моего рабочего процесса; просто убери это, если не хочешь.

CalcOnTop = 0
;[Win+C] Calculator
*#c::
IfWinExist Calculator
{
    WinActivate Calculator
    WinWaitActive, Calculator, , 1
    if ErrorLevel
    {
        Process,WaitClose,calculator.exe,1
        CalcOnTop = 0
        Run calc.exe
        WinWait, Calculator, , 3
        if ErrorLevel
        {
            MsgBox, Error:  WinWait timed out. (3 seconds)
            return 
        }
        else
        {
            WinActivate Calculator
            Sleep 25
            WinSet, AlwaysOnTop, On, Calculator
            CalcOnTop = 1
            return
        }
        }
    if (CalcOnTop = 1)
        return
    else
    {
        WinSet, AlwaysOnTop, On, Calculator
        CalcOnTop = 1
        return
    }
}
else
{
    CalcOnTop = 0
    Run calc.exe
    WinWait, Calculator, , 3
    if ErrorLevel
    {
        MsgBox, Error:  WinWait timed out. (3 seconds)
        return 
    }
    else
    {
        WinActivate Calculator
        Sleep 25
        WinSet, AlwaysOnTop, On, Calculator
        CalcOnTop = 1
        return
    }
}
0

Я думаю, что этот вопрос поможет вам решить вашу проблему. Похоже, причина, по которой он запускается как фоновый процесс, для обновлений. Вы можете отключить это, перейдя в Start -> Settings -> Privacy -> Background apps как предлагает другой вопрос.

0

Это работает для меня. Единственное, что вы должны помнить, чтобы закрыть Калькулятор с помощью сочетания клавиш, а не с помощью щелчка мыши (я использую Ctrl+Shift+W, так как я привык использовать это для браузеров). Но WinClose, похоже, не позволяет калькулятору зависать как фоновый процесс.

#IfWinNotExist Calculator
    NumLock::Run, Calc.exe
#IfWinNotExist

#IfWinExist, Calculator
    NumLock::WinActivate
#IfWinExist

#IfWinActive, Calculator
    ^+w::WinClose
#IfWinActive

Если вы действительно хотите оставить открытой опцию закрытия окна щелчком мыши, я думаю, вы могли бы настроить что-либо для выполнения WinClose, если в определенной области активного окна обнаруживается щелчок (когда активным окном является Calc),

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .