Fenster "Benutzerkontensteuerung" per Autoit ausfüllen

  • Hallo,
    ich versuche bei Windows7 einen Prozess zu automatisieren (mounten einer VHD) bei dem höhere Rechte erforderlich sind (ausführen von diskpart).
    Leider funkt mir immer die Benutzerkontensteuerung dazwischen.
    Ich will die auch nicht abstellen, aber ich bekomme autoit nicht dazu da einen Benutzernamen einzugeben, so das man nur noch das Passwort eingeben muß...
    Warum geht das nicht ?

    [autoit]


    while 1
    sleep(3000)
    WinWait("Benutzerkontensteuerung")

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

    fill()

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

    WEnd

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

    Func FILL()
    WinActivate("Benutzerkontensteuerung")
    Send("Admin")
    Send("{TAB}")
    EndFunc

    [/autoit]

    Gruß
    Wolke

  • Wenn man als Administrator angemeldet ist, sollte es für das Ausführen von Diskpart genügen, den Promt zu deaktivieren.
    Du kannst das durch Ändern des folgenden Schlüssels in der Registry vornehmen.

    UAC Promt ausschalten:

    Code
    Windows Registry Editor Version 5.00
    
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
    "ConsentPromptBehaviorAdmin"=dword:00000000


    UAC Promt einschalten:

    Code
    Windows Registry Editor Version 5.00
    
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
    "ConsentPromptBehaviorAdmin"=dword:00000005


    Entweder beides jeweils in eine Textdatei kopieren und als *.reg abspeichern (durch doppelklick auf die Datei dann jeweilige Aktion ausführen) oder in AutoIt folgenden Code benutzen:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    Opt("GUIOnEventMode", 1)

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

    GUICreate("UAC Steuerung", 285, 75)
    GUISetOnEvent(-3, "_Exit")
    GUICtrlCreateButton("UAC Promt ausschalten", 10, 10, 130)
    GUICtrlSetOnEvent(-1, "_UACOff")
    GUICtrlCreateButton("UAC Promt einschalten", 145, 10, 130)
    GUICtrlSetOnEvent(-1, "_UACon")
    GUICtrlCreateButton("Beenden", 10, 40, 265)
    GUICtrlSetOnEvent(-1, "_Exit")

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

    GUISetState()

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

    While Sleep(1000)
    WEnd

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

    Func _UACOff()
    $bUACOff = RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", "ConsentPromptBehaviorAdmin", "REG_DWORD", "00000000")
    Switch $bUACOff
    Case 1
    MsgBox(48, "Erfolg!", "UAC Promt wurde deaktiviert!")
    Case Else
    MsgBox(16, "Fehler!", "Zugriff auf Registry fehlgeschlagen!")
    EndSwitch
    EndFunc ;==>_UACOff

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

    Func _UACon()
    $bUACOff = RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", "ConsentPromptBehaviorAdmin", "REG_DWORD", "00000005")
    Switch $bUACOff
    Case 1
    MsgBox(48, "Erfolg!", "UAC Promt wurde aktiviert!")
    Case Else
    MsgBox(16, "Fehler!", "Zugriff auf Registry fehlgeschlagen!")
    EndSwitch
    EndFunc ;==>_UACon

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    Zum Testen kannst du dieses Skript nach Deaktivierung des Promts einfach nochmals starten und es sollte keine Rückfrage mehr kommen.

    Sollte das nicht genügen, mußt du noch den Wert "EnableLUA" im selben Schlüssel von 1 auf 0 stellen, aber dann ist meines Wissens nach ein Neustart erforderlich...
    Weitere Einstellungen findest du in diesem Artikel

    Sanfte Grüße :D

  • wolkenloser: das einfachste wäre du fügst an den Anfang deines Scripts ein #RequireAdmin ein
    dann muss der User dein Programm direkt als Admin starten und die Adminrechte werden an alle Prozesse die du dann startest weiter vererbt
    das bedeutet diskpart wird direkt als admin ausgeführt und es muss nicht nochmal die UAC bestätigt werden

    mfg