Autohotkey kann ein Programm nicht öffnen, das Windows 10 als Hintergrundprozess auflistet

958
techturtle

Ich habe meinen NumLock-Schlüssel mithilfe von AutoHotKey neu zugeordnet, sodass der Rechner stattdessen mit dem folgenden Skript geöffnet wird:

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

Dies lief großartig durch Windows 7 (allerdings mit einer anderen "Run" -Linie aufgrund von Änderungen am App-Namen). Die IfWinExistZeile prüft, ob der Rechner bereits läuft. Wenn es ist, aktiviert es es; Wenn nicht, wird es gestartet. Dadurch wird verhindert, dass mehrere Kopien von Calculator ausgeführt werden, für den Fall, dass Sie ihn nicht zwischen den Verwendungszwecken schließen.

Bei Windows 10 ist mir aufgefallen, dass es nur zeitweise funktioniert. Beim ersten Start nach einem Neustart funktioniert alles wie gewohnt. Beim Schließen der Rechner-App wird sie jedoch manchmal in den Hintergrundprozessen gespeichert, anstatt wirklich zu beenden.

Autohotkey kann ein Programm nicht öffnen, das Windows 10 als Hintergrundprozess auflistet

Wenn ich das Skript aktiviere, IfWinExistwird es als lauffähig empfunden und aktiviert es (anscheinend), jedoch ohne sichtbaren Effekt, da es ein Hintergrundprozess ist. Wenn ich den Task-Manager öffne und den Prozess abschalte, kehrt die normale Funktion (für eine Weile) zurück.

Gibt es eine Möglichkeit, zu verhindern, dass Windows den Rechner als Hintergrundprozess verlässt, oder dass AutoHotKey zwischen Apps und Hintergrundprozessen unterscheidet?

3
Ich hatte ähnliche Probleme mit AutoHotKey in Windows 10. Ich habe ein grundlegendes Skript erstellt, mit dem meine Frau ihren Touchscreen ein- oder ausschalten kann. Das funktioniert zunächst sehr gut, aber nach ein paar Anwendungen wird es intermittierend. Ich hatte noch keine Chance herauszufinden warum, aber ich hatte nie ein Problem mit AutoHotKey in älteren Windows-Versionen. freginold vor 7 Jahren 0

4 Antworten auf die Frage

1
JJohnston2

Ich benutze meistens Windows 10 nicht. Es scheint, dass Sie entweder eine Möglichkeit benötigen, um zu erkennen, dass es sich um einen Hintergrundprozess handelt, und diesen dann entweder aktivieren (also nicht länger als Hintergrundprozess) oder einfach beenden und eine neue Kopie starten.

Wenn Sie nicht wirklich herausfinden wollen, wie Sie die "richtige" Methode aktivieren, könnten Sie als Nächstes WinActivateeine WinWaitActivemit einer Zeitüberschreitung folgen . Wenn ErrorLevel gesetzt ist, wurde es nicht richtig aktiviert (dh der Hintergrundprozess) und Sie könnten töten / erneut starten.

Sie können sich auch Ihre aktuelle Einstellung ansehen A_DetectHiddenWindowsund prüfen, ob diese Einstellung aktiviert ist. Ich vermute, diese Einstellung ist nicht aktiviert und standardmäßig deaktiviert. Sie können sehen, ob das Forcen DetectHiddenWindows, Oneine Verhaltensänderung bewirkt (raten nicht).

Sie können auch einen WinShowAfter- IfWinExistReturn-Befehl ausprobieren, dh vor der Aktivierung mit WinActivate. Ich bin mir nicht sicher, was Windows 10 hinter den Kulissen macht, aber es könnte nur ein verstecktes Fenster im Hintergrund sein. In diesem Fall können Sie es zeigen. Sie können auch ein Hilfsprogramm mit dem Namen Spy++oder Spyxxfinden, das alle Fenster nach Thread, Prozess oder Fenster mit einer Baumansicht anzeigt. Diese zeigt Ihnen an, ob ein Fenster ausgeblendet ist, wenn es als Hintergrundprozess ausgeführt wird.

1
Michael Askin

Das ist was ich benutze. Es ist nicht der schönste Code, aber es ist 100% zuverlässig für den Rechner unter Windows 10, sei es im Hintergrund oder nicht. Ich mag es, AlwaysOnTopbasierend auf meinem Workflow zu kennzeichnen. Entfernen Sie das einfach, wenn Sie es nicht möchten.

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.

Ich denke, diese Frage wird Ihnen helfen, Ihr Problem zu lösen. Es sieht so aus, als ob der Grund für die Ausführung als Hintergrundprozess für Updates gilt. Sie können dies deaktivieren, indem Sie zu Start -> Settings -> Privacy -> Background appsden anderen Fragen gehen.

Diese andere Frage war hilfreich, aber letztendlich nicht effektiv, da Calculator nicht in den `Background Apps'-Optionen enthalten ist und sie keine anderen Vorschläge außer" ein anderes Programm verwenden "hatten. techturtle vor 8 Jahren 1
Meine andere Idee ist, autohotkey irgendwie zu verwenden. Wenn der Taschenrechner geöffnet ist, wechselt er zu dem Apps-Bereich im Task-Manager. Möglicherweise können Sie Ihr Skript so ändern, dass der Hintergrundprozess des Rechners zuerst abgebrochen und anschließend erneut geöffnet wird. Nicht sicher, ob es möglich ist, zwischen einem Hintergrundprozess und einer aktiven Anwendung in Autohotkey zu unterscheiden. Tim G. vor 8 Jahren 0
Mein Rechner ist auch im Abschnitt mit den Hintergrundanwendungen enthalten. Ich kann es ein- und ausschalten. Tim G. vor 8 Jahren 0
Dieser Hintergrundprozess ist alles durcheinander. Auf meinem Hauptdesktop zu Hause ist er fast immer im Hintergrund. Auf meinem Laptop ist es selten im Hintergrund, aber man hat den Bereich "Hintergrund-Apps", während es bei keinem meiner anderen PCs der Fall ist. Ich dachte, vielleicht war es das Win10 Anniversary Update, weil der Laptop es hat, aber der Desktop nicht, aber ich habe gerade den Desktop hochgefahren und es nicht verstanden. techturtle vor 8 Jahren 1
Soweit AHK verwendet wurde, um zu überprüfen, ob der Hintergrundprozess ausgeführt wurde, war dies eine der Optionen, von denen ich hoffte, dass mir hier jemand sagen könnte. Ich konnte keinen Weg finden, zwischen Hintergrund oder nicht zu unterscheiden. Ich könnte wahrscheinlich alle Rechnerfenster töten, die er findet, und dann ein neues Fenster öffnen, aber ich würde es vorziehen, das nicht zu tun, weil # 1, wenn ich den Rechner häufig verwende, ich möchte, dass der Wert erhalten bleibt, und # 2 Wenn Sie es töten, wird es möglicherweise einfach in den Hintergrund geschoben, was das Problem letztendlich nicht lösen würde. techturtle vor 8 Jahren 0
Ein paar Windows-Updates später und die Rechneroption wurde in den Hintergrund-Apps auf beiden Computern angezeigt. Leider wird der Prozess trotz dieser Einstellung immer noch im Abschnitt "Hintergrundprozesse" des Task-Managers angezeigt. Es scheint also, dass die Suche nach einem Weg zur Unterscheidung zwischen aktiven Prozessen und Hintergrundprozessen die einzige Möglichkeit ist, dies zu beheben. Ich hatte aus diesen Gründen noch immer kein Glück ... techturtle vor 8 Jahren 1
0
MarkPhil

Das funktioniert für mich. Die einzige Sache ist, dass Sie daran denken müssen, den Rechner mit einer Tastenkombination statt mit einem Mausklick zu schließen (ich verwende Strg + Umschalt + W, da ich das für Browser gewohnt bin). WinClose scheint jedoch zu verhindern, dass der Rechner als Hintergrundprozess herumhängt.

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

Wenn Sie die Option, das Fenster mit einem Mausklick zu schließen, wirklich offen halten möchten, können Sie WinClose einrichten, wenn ein Klick in einem bestimmten Bereich des aktiven Fensters erkannt wird (wenn das aktive Fenster Calc ist). .