Windows 10 Update-Meldungen deaktivieren

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

Windows 10 Update-Meldungen deaktivieren

01 Dec 2015, 05:27

Hallo Gemeinde,

ich habe nachfolgendes Script, das auch funktioniert.
(@OffTopic= Und ja es ist mir bekannt das sich die Problematik durch die Deinstallation von KB3035583 auch kurzfristig beheben lassen würde)
Allerdings wäre meine Frage, ob sich die Processe nicht in einem Abruf abfragen und ggf. beenden lassen würden, statt sie nacheinander abzufragen?

Code: Select all

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen


; ------------ Ueberpruefe ob gwx.exe gestartet ist und falls ja beende den Process -----------------


SetTitleMatchMode, 2
Process, Exist, gwx.exe
if !ErrorLevel = 0
{
    Process, Close, gwx.exe ; gwx.exe wird geschlossen, falls es gestartet ist
}


; ------------ Ueberpruefe ob GWXUX.exe gestartet ist und falls ja beende den Process -----------------


SetTitleMatchMode, 2
Process, Exist, GWXUX.exe
if !ErrorLevel = 0
{
    Process, Close, GWXUX.exe ; GWXUX.exe wird geschlossen, falls es gestartet ist
}


; ------------ Ueberpruefe ob GWXUXWorker.exe gestartet ist und falls ja beende den Process -----------------


SetTitleMatchMode, 2
Process, Exist, GWXUXWorker.exe
if !ErrorLevel = 0
{
    Process, Close, GWXUXWorker.exe ; GWXUXWorker.exe wird geschlossen, falls es gestartet ist
}


; ------------ Ueberpruefe ob GWXConfigManager.exe gestartet ist und falls ja beende den Process -----------------


SetTitleMatchMode, 2
Process, Exist, GWXConfigManager.exe
if !ErrorLevel = 0
{
    Process, Close, GWXConfigManager.exe ; GWXConfigManager.exe wird geschlossen, falls es gestartet ist
}


; -------------------- warte 300 Sekunden Also 5 Minuten -----------------------------
Sleep, 300000  ; 300 sekunden
Greetings Best-Code-in-Use
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

01 Dec 2015, 05:37

Moin!

Es sind ja unterschiedliche Prozesse, deshalb kann man nicht alle mit einer Abfrage checken und beenden. Du könntest Dir allerdings eine Prozessnamensliste / ein Prozessnamensarray anlegen und das in einer Schleife abarbeiten. Es sieht dann kürzer aus. Für das Beenden der Prozesse kannst Du auch direkt die beim Check in ErrorLevel zurückgegebene PID nutzen.

Wenn Du nur mit der Process-Anweisung arbeitest, brauchst Du außerdem SetTitleMatchMode nicht.
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

01 Dec 2015, 05:43

@ just me
Danke für Deine schnelle Antwort, also dann zum Beispiel So:

Code: Select all

; ------------ Ueberpruefe ob GWXUX.exe gestartet ist und falls ja beende den Process -----------------

Process, Exist, GWXUX.exe
if !ErrorLevel = 0
{
    Process, Close, GWXUX.exe ; GWXUX.exe wird geschlossen, falls es gestartet ist
}
Greetings Best-Code-in-Use
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

... SetTitleMatchMode

01 Dec 2015, 05:47

SetTitleMatchMode - macht ja eh keinen Sinne, denn:

1: Der Titel eines Fensters muss mit dem angegebenen Fenstertitel beginnen, um eine Übereinstimmung zu sein.
2: Der Titel eines Fensters kann den angegebenen Fenstertitel an beliebiger Stelle enthalten, um eine Übereinstimmung zu sein.
3: Der Titel eines Fensters muss genau mit dem angegebenen Fenstertitel übereinstimmen, um eine Übereinstimmung zu sein.

Und ich habe ja kein Fenster, sondern es geht ja um einen Prozess, denke ich mal...
Greetings Best-Code-in-Use
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: Windows 10 Update-Meldungen deaktivieren

01 Dec 2015, 05:52

Ungetestetes Beispiel:

Code: Select all

#NoTrayIcon
#NoEnv
#SingleInstance Force
#Persistent

global MyArray := ["gwx", "GWXUX", "GWXUXWorker", "GWXConfigManager"]

SetTimer, CheckProcess, 300000
return

CheckProcess:
    loop % MyArray.MaxIndex()
        Process, Close, % MyArray[A_Index] ".exe"
return
Process, Exist brauchst du nicht. Wenn Process, Close was findet, schließt es das Programm und wenn nicht, dann nicht.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

01 Dec 2015, 05:57

Oder z.B. so:

Code: Select all

ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"

; ------------ Ueberpruefe ob Windows Update Prozesse gestartet ist und falls ja beende sie -----------------

Loop, Parse, ProcessNames, |
{
   Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
}
Edit: Zu spät!
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

...Danke

01 Dec 2015, 06:10

@jNizM
Danke...

@Just Me
Deine Variante funktioniert perfekt.

Ich habe über die Aufgabenplanung den Prozess gwu.exe und dann auch gwux.exe gestartet (So macht es ja Mcrosoft auch).
Beide werden mit Deinem Script zuverlässig beendet.

Der Übersicht halber hier nun nochmals das ganze Script, denn das dürfte wohl auch andere User interessieren:

Code: Select all

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance Force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
#Persistent


ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"
 
; ------------ Ueberpruefe ob Windows 10 Update Prozesse gestartet sind und falls ja beende sie -----------------
 
Loop, Parse, ProcessNames, |
{
   Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
}
Last edited by Best-Code-in-Use on 01 Dec 2015, 07:55, edited 1 time in total.
Greetings Best-Code-in-Use
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

...Warteschleife

01 Dec 2015, 06:16

...eine Frage drängt sich noch auf:
Wäre es hier nicht zweckmäßig eine zeitlich begrenzte Warteschleife einzubauen, da das Script ja ansonsten ununterbrochen die Prozesse durchsuchen würde?
Greetings Best-Code-in-Use
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

mit 5 Minuten Wartezeit dazwischen

01 Dec 2015, 07:14

Ich gehe mal davon aus, das es so korrekt ist.
Denn ich möchte das das Script 5 Minuten Pause einlegt, bevor es wieder durchläuft.

Code: Select all

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance Force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
#Persistent


ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"
 
; ------------ Ueberpruefe ob Windows 10 Update Prozesse gestartet sind und falls ja beende sie -----------------
 
Loop, Parse, ProcessNames, |
{
   Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
   ; -------------------- warte 300 Sekunden Also 5 Minuten -----------------------------
   Sleep, 300000  ; 300 Sekunden - also 5 Minuten
}
Last edited by Best-Code-in-Use on 19 Mar 2016, 05:05, edited 1 time in total.
Greetings Best-Code-in-Use
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

01 Dec 2015, 07:23

Nö! Schau Dir mal jNizMs Vorschlag mit SetTimer an. Alternative kannst Du auch noch eine äußere Schleife darumlegen:

Code: Select all

Loop   ; endlose äußere Schleife
   Loop, Parse, ...   ; innere Schleife
   {
      ...
   }
   Sleep, 30000   ; vor nächster Ausführung warten
}
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

Na dann, es sieht gut aus

01 Dec 2015, 07:52

Hallo just me,

vielen Dank für Deine ausführliche Hilfe. Ja, meine Idee funktionierte auch nicht.

Eine geschweifte Klammer hat wohl bei Deinem Script gefehlt, hier nun das korrigierte und vollständige Script.
Ich habe die Funktionalität inkl. der Wartezeit getestet, funktioniert Alles einwandfrei.

Code: Select all

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance Force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
#Persistent


ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"
 
; ------------ Ueberpruefe ob Windows 10 Update Prozesse gestartet sind und falls ja beende sie -----------------
 

Loop   ; endlose aeussere Schleife
{
   Loop, Parse, ProcessNames, |   ; innere Schleife
   {
      Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
   }
   Sleep, 30000   ; 300 Sekunden - 5 Minuten warten bis zum naechsten Durchlauf
}
Greetings Best-Code-in-Use
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: Windows 10 Update-Meldungen deaktivieren

01 Dec 2015, 08:24

Bei solchen Aufgaben würde ich persönlich den SetTimer gebenüber einem Sleep im Loop bevorzugen.
Oftmals sorgt das Sleep dafür (was ich bei mir festgestellt habe), dass das Script zum Beispiel gegenüber einem Rechtsklick auf das Icon unempfänglich macht (bzw. hängt / schwer zugänglich).
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

02 Dec 2015, 03:39

Ich auch! ;)
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

SetTimer statt Loop

02 Dec 2015, 06:17

@jNizM @just me

Vielen Dank für Eure Hilfe, das sehe ich mir an.
Allerdings wird das Autohotkey Symbol ja ausgeblendet und daher nicht angezeigt. Aber ich beschäftige mich nochmals mit der SetTimer Funktion!

Okay, habe es mir gerade angesehen... (https://ragnar-f.github.io/docs/commands/SetTimer.htm)
Na ja, da es so funktioniert, würde ich es so lassen wollen. Da sich mir das Label (https://ragnar-f.github.io/docs/misc/Labels.htm) in diesem Fall nicht erschließt...
Greetings Best-Code-in-Use
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

02 Dec 2015, 06:36

Falls Du auf Timer umsteigen willst, brauchst Du die Direktive #Persistent, damit das Skript geladen bleibt. Dem Timer-Label kannst Du einen freigewählten Namen geben:

Code: Select all

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance Force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
#Persistent ; Wichtig!!!
 
ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"
SetTimer, CloseUpdWindows, 300000 ; alle 300 Sekunden den Timer aufrufen
; Damit der Timer gleich beim Start des Skripts ausgeführt wird, lassen wir das Skript durchlaufen
; Anderenfalls sollte hier ein Return stehen.

CloseUpdWindows:
Loop, Parse, ProcessNames, |
{
   Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
}
Return
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

Label verstanden

02 Dec 2015, 07:13

Ahh, Danke für die Erhellung...
Okay, im Prinzip kann man hier also einen eigenen Namen vergeben, der das Ganze dann genau definiert und die nachfolgenden Aktionen beinhaltet.

Das Script funktioniert übrigens einwandfrei, ich habe es soeben getestet, vielen Dank...
Greetings Best-Code-in-Use
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

5 Minuten sind zu lange...

16 Jan 2016, 05:09

Hallo Gemeinde,

leider wird die Einblendung für das Windows 10 Update immer nerviger...
Gibt es eine Möglichkeit 2 Timer laufen zu lassen? Allerdings müsste sich der erste Timer nach 5 Minuten selbst beenden und mit einer Frequenz von 20 Sekunden laufen.
Und dann eben den 2. Timer starten, der dann mit einer Frequenz von 5 Minuten läuft...

Allerdings habe ich nicht wirklich etwas gefunden, wie ich das kombinieren kann. (Gut man könnte es über die Aufgabenplanung erledigen und mit 2 Scripten arbeiten, aber das finde ich wieder zu kompliziert als einfache Lösung für alle Gestressten...)

Code: Select all

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance Force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
#Persistent ; Wichtig!!!
 
ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"
SetTimer, CloseUpdWindows, 20000 ; alle 20 Sekunden den Timer aufrufen
; Damit der Timer gleich beim Start des Skripts ausgeführt wird, lassen wir das Skript durchlaufen
; Anderenfalls sollte hier ein Return stehen.
 
CloseUpdWindows:
Loop, Parse, ProcessNames, |
{
   Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
}
Return
Für eine Idee wäre ich wie immer dankbar :-)
Greetings Best-Code-in-Use
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

16 Jan 2016, 06:03

Wieso erstellst du nicht ein 2. Label über dem ersten?
z.B. CloseUpWindow2
Darauf könntest du dann einen 2. Timer legen.
Andernfalls könntest du auch mit der WinAPI arbeiten die ein bisschen code ausführt immer wenn sich ein Fenster öffnet.
Recommends AHK Studio
Best-Code-in-Use
Posts: 184
Joined: 01 Dec 2015, 05:13
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

16 Jan 2016, 11:38

@nnnik

WinAPI entfällt, da Microsoft perfiderweise immer mal neue Fenster einblendet...

Code: Select all

#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#NoEnv ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind, beschleunigt die Laufzeit
#SingleInstance Force ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
#Persistent ; Wichtig!!!
 
ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"
SetTimer, CloseUpdWindows1, 20000 ; alle 20 Sekunden den Timer aufrufen
; Damit der Timer gleich beim Start des Skripts ausgeführt wird, lassen wir das Skript durchlaufen
; Anderenfalls sollte hier ein Return stehen.
 
CloseUpdWindows1:
Loop, Parse, ProcessNames, |
{
   Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
}
Return

ProcessNames := "gwx.exe|GWXUX.exe|GWXUXWorker.exe|GWXConfigManager.exe"
SetTimer, CloseUpdWindows2, 300000 ; alle 300 Sekunden den Timer aufrufen
; Damit der Timer gleich beim Start des Skripts ausgeführt wird, lassen wir das Skript durchlaufen
; Anderenfalls sollte hier ein Return stehen.
 
CloseUpdWindows2:
Loop, Parse, ProcessNames, |
{
   Process, Exist, %A_LoopField%
   if (ErrorLevel <> 0)
   {
      Process, Close, %ErrorLevel%
   }
}
Return
Der erste Timer soll alle 20 Sekunden aufgerufen werden, Okay.
Aber wie kann ich nun dafür sorgen das CloseUpdWindows1 nur 5 Minuten läuft und anschließend CloseUpdWindows2 aufgerufen wird???
Dieser soll dann in einer Endlosschleife laufen und alle 5 Minuten aufgerufen werden.
Greetings Best-Code-in-Use
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Windows 10 Update-Meldungen deaktivieren

17 Jan 2016, 01:32

Moin,

Deine beiden Timer sollen offenbar dasselbe tun. Dann braucht es aber nur Einen. Die Aufrufperiode kann man jederzeit ändern (siehe SetTimer).

In Deinem letzten Versuch wird der Abschnitt mit dem zweiten Timer nie erreicht (siehe automatischer Ausführungsbereich).

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: gero and 25 guests