Autohotkey не удается открыть программу, Windows 10 списки в фоновом режиме

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

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

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

С Windows 10 я заметил, что он работает только с перерывами. В первый раз, когда я запускаю его после перезагрузки, все работает как обычно. Тем не менее, иногда при закрытии приложения калькулятора, он сохраняет его в фоновом режиме процессов, а не по-настоящему выхода.

enter image description here

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

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

25
задан techturtle
27.12.2022 13:33 Количество просмотров материала 3072
Распечатать страницу

4 ответа

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

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

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

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

1
отвечен JJohnston2 2022-12-28 21:21

это то, что я использую. Это не самый красивый код, но он на 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
    }
}
1
отвечен Michael Askin 2022-12-28 23:38

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

0
отвечен Tim G. 2022-12-29 01:55

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

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

#IfWinExist, Calculator
    NumLock::WinActivate
#IfWinExist

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

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

0
отвечен MarkPhil 2022-12-29 04:12

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх