Autohotkey не может открыть программу, которую Windows 10 перечисляет как фоновый процесс

847
techturtle

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

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

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

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

Autohotkey не может открыть программу, которую Windows 10 перечисляет как фоновый процесс

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

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

3
У меня были похожие проблемы с AutoHotKey в Windows 10. Я сделал для своей жены базовый скрипт, чтобы включить или выключить ее сенсорный экран, и сначала он прекрасно работает, но после нескольких использований он становится прерывистым. У меня еще не было возможности выяснить, почему, но у меня никогда не было подобных проблем с AutoHotKey в старых версиях Windows. freginold 7 лет назад 0

4 ответа на вопрос

1
JJohnston2

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

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

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

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

1
Michael Askin

Это то, что я использую. Это не самый красивый код, но он на 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
Tim G.

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

Этот другой вопрос был полезен, но в конечном счете неэффективен, поскольку калькулятор не включен в параметры «Фоновые приложения», и у них не было других предложений, кроме как «использовать другую программу». techturtle 8 лет назад 1
Моя другая идея - использовать autohotkey как-то. Когда калькулятор открыт, он перемещается вверх в раздел приложений в диспетчере задач, да? Возможно, вы можете изменить свой скрипт, чтобы сначала убить фоновый процесс калькулятора, а затем снова открыть его. Не уверен, что в autohotkey можно отличить фоновый процесс от активного приложения. Tim G. 8 лет назад 0
Кроме того, мой калькулятор включен в раздел фоновых приложений. Я могу включить и выключить его. Tim G. 8 лет назад 0
Все эти фоновые процессы запутаны. На моем основном рабочем столе дома это почти всегда в фоновом режиме. На моем ноутбуке он редко работает в фоновом режиме, но у него есть раздел «фоновые приложения», в то время как на других моих компьютерах его нет. Я подумал, что это может быть Win10 Anniversary Update, потому что он есть на ноутбуке, а на рабочем столе - нет, но я просто поднял рабочий стол, но он его не получил. techturtle 8 лет назад 1
Что касается использования AHK для проверки того, запущен ли фоновый процесс, это один из вариантов, который, как я надеялся, кто-то может сказать мне здесь. Я не смог найти способ разграничить фон или нет. Возможно, я мог бы просто убить все найденные окна калькулятора, а затем открыть новое, но я бы предпочел этого не делать, потому что # 1, если я часто использую калькулятор, я хочу, чтобы значение сохранялось, и # 2 убийство может просто отодвинуть это на задний план, что в конечном итоге не решит проблему. techturtle 8 лет назад 0
Несколько обновлений Windows позже и опция калькулятора появилась в фоновых приложениях на обоих моих компьютерах. К сожалению, этот процесс по-прежнему отображается в разделе «Фоновые процессы» диспетчера задач, несмотря на этот параметр, поэтому представляется, что единственный способ исправить это - найти способ отличить активные процессы от фоновых процессов. Мне все еще не повезло на этих основаниях ... techturtle 8 лет назад 1
0
MarkPhil

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

#IfWinNotExist Calculator NumLock::Run, Calc.exe #IfWinNotExist  #IfWinExist, Calculator NumLock::WinActivate #IfWinExist  #IfWinActive, Calculator ^+w::WinClose #IfWinActive 

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