[Only registered and activated users can see links. Click Here To Register...]
Download
[Only registered and activated users can see links. Click Here To Register...]
Source
Download
[Only registered and activated users can see links. Click Here To Register...]
Source
Imports Microsoft.Win32
Imports System.Security.Principal
Public Class WAK
Private Const CurVer As String = "Software\Microsoft\Windows\CurrentVersion"
' Eine saubere Datenstruktur für die Registry-Zuweisungen
Private Class RegistryTweak
Public Property CheckBox As CheckBox
Public Property SubKey As String
Public Property ValueName As String
Public Property AdminRequired As Boolean
Public Sub New(cb As CheckBox, subKey As String, valueName As String, Optional adminReq As Boolean = False)
Me.CheckBox = cb
Me.SubKey = subKey
Me.ValueName = valueName
Me.AdminRequired = adminReq
End Sub
End Class
Private Tweaks As New List(Of RegistryTweak)()
Private Sub WAK_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitializeTweakList()
CheckAdminStatus()
End Sub
''' <summary>
''' Ordnet jede Checkbox genau einmal ihren Registry-Werten zu.
''' </summary>
Private Sub InitializeTweakList()
Tweaks.Add(New RegistryTweak(cb1, CurVer & "Explorer\Advanced", "ShowSyncProviderNotifications"))
Tweaks.Add(New RegistryTweak(cb2, CurVer & "ContentDeliveryManager", "RotatingLockScreenOverlayEnabled"))
Tweaks.Add(New RegistryTweak(cb2, CurVer & "ContentDeliveryManager", "SubscribedContent-338387Enabled"))
Tweaks.Add(New RegistryTweak(cb3, CurVer & "ContentDeliveryManager", "SubscribedContent-338393Enabled"))
Tweaks.Add(New RegistryTweak(cb3, CurVer & "ContentDeliveryManager", "SubscribedContent-353694Enabled"))
Tweaks.Add(New RegistryTweak(cb3, CurVer & "ContentDeliveryManager", "SubscribedContent-353696Enabled"))
Tweaks.Add(New RegistryTweak(cb4, CurVer & "ContentDeliveryManager", "SubscribedContent-338389Enabled"))
Tweaks.Add(New RegistryTweak(cb5, CurVer & "UserProfileEngagement", "ScoobeSystemSettingEnabled"))
Tweaks.Add(New RegistryTweak(cb6, CurVer & "ContentDeliveryManager", "SubscribedContent-310093Enabled"))
Tweaks.Add(New RegistryTweak(cb7, CurVer & "AdvertisingInfo", "Enabled"))
Tweaks.Add(New RegistryTweak(cb8, CurVer & "Privacy", "TailoredExperiencesWithDiagnosticDataEnabled" ))
Tweaks.Add(New RegistryTweak(cb9, CurVer & "Explorer\Advanced", "Start_IrisRecommendations"))
Tweaks.Add(New RegistryTweak(cb10, CurVer & "Notifications\Settings\Windows.ActionCenter.Smart OptOut", "Enabled"))
' Diese benötigen Admin-Rechte
Tweaks.Add(New RegistryTweak(cb11, "Software\Policies\Microsoft\Windows\Explorer" , "DisableSearchBoxSuggestions", True))
Tweaks.Add(New RegistryTweak(cb11, CurVer & "Search", "BingSearchEnabled", True))
Tweaks.Add(New RegistryTweak(cb12, "Software\Policies\Microsoft\Edge", "WebWidgetAllowed", True))
' Event-Handler dynamisch für ALLE Checkboxen registrieren
For Each tweak In Tweaks
AddHandler tweak.CheckBox.CheckedChanged, AddressOf CheckBox_CheckedChanged
Next
End Sub
''' <summary>
''' Deaktiviert Checkboxen, wenn Admin-Rechte fehlen.
''' </summary>
Private Sub CheckAdminStatus()
Dim isAdmin As Boolean = IsRunningAsAdministrator()
For Each tweak In Tweaks
If tweak.AdminRequired AndAlso Not isAdmin Then
tweak.CheckBox.Enabled = False
End If
Next
End Sub
''' <summary>
''' Ein einziger zentraler Handler für alle Checkboxen.
''' </summary>
Private Sub CheckBox_CheckedChanged(sender As Object, e As EventArgs)
Dim targetBox As CheckBox = CType(sender, CheckBox)
' Wir reagieren nur, wenn der Haken gesetzt wurde (wie in deinem Originalcode)
If targetBox.Checked Then
ApplyTweaksForBox(targetBox)
End If
End Sub
''' <summary>
''' Schreibt gezielt nur die Registry-Werte der angeklickten Checkbox.
''' </summary>
Private Sub ApplyTweaksForBox(cb As CheckBox)
Try
' Finde alle Registry-Einträge, die mit dieser Checkbox verknüpft sind
Dim matchingTweaks = Tweaks.Where(Function(t) t.CheckBox Is cb)
For Each tweak In matchingTweaks
' RegistryKey erstellen/öffnen und Wert auf 1 setzen
Using key As RegistryKey = Registry.CurrentUser.CreateSubKey(tweak.SubKey, True)
If key IsNot Nothing Then
key.SetValue(tweak.ValueName, 1, RegistryValueKind.DWord)
End If
End Using
Next
MessageBox.Show($"Tweak für {cb.Name} erfolgreich angewendet!", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show($"Fehler beim Schreiben der Registry für {cb.Name}: {ex.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Public Shared Function IsRunningAsAdministrator() As Boolean
Return New WindowsPrincipal(WindowsIdentity.GetCurrent()).IsI nRole(WindowsBuiltInRole.Administrator)
End Function
End Class
Imports System.Security.Principal
Public Class WAK
Private Const CurVer As String = "Software\Microsoft\Windows\CurrentVersion"
' Eine saubere Datenstruktur für die Registry-Zuweisungen
Private Class RegistryTweak
Public Property CheckBox As CheckBox
Public Property SubKey As String
Public Property ValueName As String
Public Property AdminRequired As Boolean
Public Sub New(cb As CheckBox, subKey As String, valueName As String, Optional adminReq As Boolean = False)
Me.CheckBox = cb
Me.SubKey = subKey
Me.ValueName = valueName
Me.AdminRequired = adminReq
End Sub
End Class
Private Tweaks As New List(Of RegistryTweak)()
Private Sub WAK_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitializeTweakList()
CheckAdminStatus()
End Sub
''' <summary>
''' Ordnet jede Checkbox genau einmal ihren Registry-Werten zu.
''' </summary>
Private Sub InitializeTweakList()
Tweaks.Add(New RegistryTweak(cb1, CurVer & "Explorer\Advanced", "ShowSyncProviderNotifications"))
Tweaks.Add(New RegistryTweak(cb2, CurVer & "ContentDeliveryManager", "RotatingLockScreenOverlayEnabled"))
Tweaks.Add(New RegistryTweak(cb2, CurVer & "ContentDeliveryManager", "SubscribedContent-338387Enabled"))
Tweaks.Add(New RegistryTweak(cb3, CurVer & "ContentDeliveryManager", "SubscribedContent-338393Enabled"))
Tweaks.Add(New RegistryTweak(cb3, CurVer & "ContentDeliveryManager", "SubscribedContent-353694Enabled"))
Tweaks.Add(New RegistryTweak(cb3, CurVer & "ContentDeliveryManager", "SubscribedContent-353696Enabled"))
Tweaks.Add(New RegistryTweak(cb4, CurVer & "ContentDeliveryManager", "SubscribedContent-338389Enabled"))
Tweaks.Add(New RegistryTweak(cb5, CurVer & "UserProfileEngagement", "ScoobeSystemSettingEnabled"))
Tweaks.Add(New RegistryTweak(cb6, CurVer & "ContentDeliveryManager", "SubscribedContent-310093Enabled"))
Tweaks.Add(New RegistryTweak(cb7, CurVer & "AdvertisingInfo", "Enabled"))
Tweaks.Add(New RegistryTweak(cb8, CurVer & "Privacy", "TailoredExperiencesWithDiagnosticDataEnabled" ))
Tweaks.Add(New RegistryTweak(cb9, CurVer & "Explorer\Advanced", "Start_IrisRecommendations"))
Tweaks.Add(New RegistryTweak(cb10, CurVer & "Notifications\Settings\Windows.ActionCenter.Smart OptOut", "Enabled"))
' Diese benötigen Admin-Rechte
Tweaks.Add(New RegistryTweak(cb11, "Software\Policies\Microsoft\Windows\Explorer" , "DisableSearchBoxSuggestions", True))
Tweaks.Add(New RegistryTweak(cb11, CurVer & "Search", "BingSearchEnabled", True))
Tweaks.Add(New RegistryTweak(cb12, "Software\Policies\Microsoft\Edge", "WebWidgetAllowed", True))
' Event-Handler dynamisch für ALLE Checkboxen registrieren
For Each tweak In Tweaks
AddHandler tweak.CheckBox.CheckedChanged, AddressOf CheckBox_CheckedChanged
Next
End Sub
''' <summary>
''' Deaktiviert Checkboxen, wenn Admin-Rechte fehlen.
''' </summary>
Private Sub CheckAdminStatus()
Dim isAdmin As Boolean = IsRunningAsAdministrator()
For Each tweak In Tweaks
If tweak.AdminRequired AndAlso Not isAdmin Then
tweak.CheckBox.Enabled = False
End If
Next
End Sub
''' <summary>
''' Ein einziger zentraler Handler für alle Checkboxen.
''' </summary>
Private Sub CheckBox_CheckedChanged(sender As Object, e As EventArgs)
Dim targetBox As CheckBox = CType(sender, CheckBox)
' Wir reagieren nur, wenn der Haken gesetzt wurde (wie in deinem Originalcode)
If targetBox.Checked Then
ApplyTweaksForBox(targetBox)
End If
End Sub
''' <summary>
''' Schreibt gezielt nur die Registry-Werte der angeklickten Checkbox.
''' </summary>
Private Sub ApplyTweaksForBox(cb As CheckBox)
Try
' Finde alle Registry-Einträge, die mit dieser Checkbox verknüpft sind
Dim matchingTweaks = Tweaks.Where(Function(t) t.CheckBox Is cb)
For Each tweak In matchingTweaks
' RegistryKey erstellen/öffnen und Wert auf 1 setzen
Using key As RegistryKey = Registry.CurrentUser.CreateSubKey(tweak.SubKey, True)
If key IsNot Nothing Then
key.SetValue(tweak.ValueName, 1, RegistryValueKind.DWord)
End If
End Using
Next
MessageBox.Show($"Tweak für {cb.Name} erfolgreich angewendet!", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show($"Fehler beim Schreiben der Registry für {cb.Name}: {ex.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Public Shared Function IsRunningAsAdministrator() As Boolean
Return New WindowsPrincipal(WindowsIdentity.GetCurrent()).IsI nRole(WindowsBuiltInRole.Administrator)
End Function
End Class