Startmenü und Taskleisten Einträge entfernen

  • Guten Morgen,

    ich bin verzweifelt auf der Suche nach einer Lösung meines Problems.

    Ich möchte gerne ein Programm von der Taskleiste und aus dem Startmenü entfernen.
    Dies soll per Script bei jedem Windows Start geprüft werden, ob das bestimmte Programm in der Taskleiste und Startmenü enthalten ist.

    Das entfernen aus den Ordnern unter: C:\Users\User\AppData\...\Internet Explorer\Quick Launch\User Pinned\TaskBar\ und dem fürs Startmenü funktioniert, aber die Verknüpfung bleibt trotzdem erhalten. Auch ein Abmelden oder Neustart löst das Problem nicht.

    Ich habe gelesen, dass es noch Einträge in der Registry gibt, aber leider kann ich diese nicht genau konvertieren, dass ich nur den genauen Wert entfernen kann.

    Kann mir eventuell jemand helfen?

    Viele Grüße :)

  • Im englischen Forum findet man einen entsprechenden Code. Leider funktionierte der nicht ohne Anpassung in einer deutschen Windows Installation. Unten findest du meine Anpassung, die wir bei uns erfolgreich verwenden. Eine Neuanmeldung ist nicht nötig, die sichtbaren Einträge in Taskbar und Startmenü verschwinden / erscheinen sofort und die zugehörigen Verknüpfungen werden gelöscht / erstellt.

    Spoiler anzeigen
    [autoit]


    #cs

    [/autoit] [autoit][/autoit] [autoit]

    Pfade für Verknüpfungen der gepinnten Programme:

    [/autoit] [autoit][/autoit] [autoit]

    Taskbar: "C:\Users\<User name>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\"
    Startmenu: "C:\Users\<User name>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\"

    [/autoit] [autoit][/autoit] [autoit]

    #ce

    [/autoit] [autoit][/autoit] [autoit]

    $myProg = "C:\test.exe" ; bitte ersetzen

    [/autoit] [autoit][/autoit] [autoit]

    $debug = pinitem($myProg,"task",True)
    If $debug = 1 Then
    consolewrite("ERFOLG: " & $myProg & " wurde zur Taskleiste hinzugefügt." & @CRLF)
    Else
    consolewrite("FEHLER: " & $myProg & " wurde NICHT zur Taskleiste hinzugefügt. (Error: " & $debug & " )" & @CRLF)
    EndIf
    MsgBox(0,"","wait")

    [/autoit] [autoit][/autoit] [autoit]

    $debug = pinitem($myProg,"task",False)
    If $debug = 1 Then
    consolewrite("ERFOLG: " & $myProg & " wurde aus der Taskleiste entfernt." & @CRLF)
    Else
    consolewrite("FEHLER: " & $myProg & " wurde NICHT aus der Taskleiste entfernt. (Error: " & $debug & " )" & @CRLF)
    EndIf
    MsgBox(0,"","wait")

    [/autoit] [autoit][/autoit] [autoit]

    $debug = pinitem($myProg,"start",True)
    If $debug = 1 Then
    consolewrite("ERFOLG: " & $myProg & " wurde zum Startmenü hinzugefügt." & @CRLF)
    Else
    consolewrite("FEHLER: " & $myProg & " wurde NICHT zum Startmenü hinzugefügt. (Error: " & $debug & " )" & @CRLF)
    EndIf
    MsgBox(0,"","wait")

    [/autoit] [autoit][/autoit] [autoit]

    $debug = pinitem($myProg,"start",False)
    If $debug = 1 Then
    consolewrite("ERFOLG: " & $myProg & " wurde aus dem Startmenü entfernt." & @CRLF)
    Else
    consolewrite("FEHLER: " & $myProg & " wurde NICHT aus dem Startmenü entfernt. (Error: " & $debug & " )" & @CRLF)
    EndIf
    MsgBox(0,"","wait")

    [/autoit] [autoit][/autoit] [autoit]

    Func pinitem($file, $loc = 'task', $pin=True)

    [/autoit] [autoit][/autoit] [autoit]

    If @OSBuild < 7600 Then Return SetError(1,0,-1) ; nur Windows 7 und neuer
    If Not FileExists($file) Then Return SetError(2,0,-2) ; Datei existiert nicht

    [/autoit] [autoit][/autoit] [autoit]

    Local $sFolder = StringRegExpReplace($file, "(^.*\\)(.*)", "$1")
    Local $sFile = StringRegExpReplace($file, "^.*\\", '')
    Local $sAction = ""

    [/autoit] [autoit][/autoit] [autoit]

    Switch $loc
    Case 'task'
    If $pin = True Then $sAction = "An Tas&kleiste anheften"
    If $pin = False Then $sAction = "Von Tas&kleiste lösen"
    Case 'start'
    If $pin = True Then $sAction = "An Startmenü an&heften"
    If $pin = False Then $sAction = "Vo&m Startmenü lösen"
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    If $sAction = "" Then Return SetError(3,0,-3) ; ungültige Werte für $loc oder $pin

    [/autoit] [autoit][/autoit] [autoit]

    $ObjShell = ObjCreate("Shell.Application")
    $ObjFolder = $ObjShell.Namespace($sFolder)
    $ObjFolderItem = $ObjFolder.ParseName($sFile)

    [/autoit] [autoit][/autoit] [autoit]

    For $Val In $ObjFolderItem.Verbs()
    If $Val() = $sAction Then
    $Val.DoIt()
    Return 1
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Return SetError(4,0,-4) ; Programm war schon pinned bzw. unpinned
    EndFunc

    [/autoit]

    EDIT: Fehler beim "Starmenü lösen" sollte behoben sein...

    3 Mal editiert, zuletzt von misterspeed (8. November 2014 um 12:19)

  • Hallo misterspeed,

    vielen Dank für deine Unterstützung. Ich werde dies einmal testen und mich natürlich nochmal melden, mittels Feedback.
    Ich muss auf den ersten Blick schonmal sagen, das es wirklich sehr gut aussieht.

    Vielen Dank nochmal.