Hi Der_Doc,
das Skript hat mir so gut gefallen, daß ich erstmal einen Baustein meines
momentanen Projektes eingebastelt habe. Sei mir bitte nicht böse, daß ich
es etwas umgemodelt habe, so gefällt es mir einfach besser ![]()
_GetUser() liest (theoretisch) auch andere Computer ein, es muß halt nur
der Name übergeben werden ![]()
Gruß
ytwinky
Spoiler anzeigen
;~ Author: <Der_Doc>
;~ Name: <LoginAs.exe>
;~ AutoIt Version: 3.2.2.0 & aktuelle Beta
;~ Version: <1.1>
;~ Datum: 02.03.2007
;~ Ergänzungen: ytwinky, MD
#include <GUIConstants.au3>
Dim $Programm
GUICreate("Ausführen als..", 375, 140)
GUICtrlCreateLabel("Programm:", 45, 12)
GUICtrlCreateLabel("Benutzername:", 45, 42)
GUICtrlCreateLabel("Kennwort:", 45, 72)
GUICtrlCreateLabel("Domain:", 45, 102)
GUICtrlCreateIcon("shell32.dll", 194, 5, 60, 32,32)
$In_Programm=GUICtrlCreateInput(@ComSpec, 120, 10, 169, 21)
$Durchsuchen=GUICtrlCreateButton ("Durchsuchen", 290, 11, 80, 20)
$In_Domain=GUICtrlCreateCombo(@LogonDomain, 120, 100, 169, $CBS_DROPDOWNLIST+$CBS_AUTOHSCROLL)
GUICtrlSetData(-1, @ComputerName &'-Arbeitsgruppe|' &@LogonDomain &'-Domain', @LogonDomain)
$In_Benutzer=GUICtrlCreateCombo('Benutzer wählen', 120, 40, 169, 21, $CBS_DROPDOWNLIST+$CBS_AUTOHSCROLL)
GUICtrlSetData($In_Benutzer, _GetUsers(GUICtrlRead($In_Domain)))
$In_Kennwort=GUICtrlCreateInput('', 120, 70, 169, 21, $ES_PASSWORD)
$bt_Login=GUICtrlCreateButton("RunIt", 314, 100, 57, 21, $BS_DEFPUSHBUTTON)
GUICtrlSetFont(-1, 10, 800, 0)
$Copy=GUICtrlCreateLabel("© 2007 Der_Doc && ytwinky", 245, 127)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Durchsuchen
$Programm=FileOpenDialog("Programm-Auswahl", @ScriptDir &"\", "Anwendung (*.exe)", 1)
If $Programm<>"" And FileExists($Programm) Then GUICtrlSetData($In_Programm, $Programm)
Case $bt_Login
RunAsSet()
$Programm=GUICtrlRead($In_Programm)
If FileExists($Programm) Then
Select
Case GUICtrlRead($In_Benutzer)="Benutzer wählen"
Msgbox(32, "Fehler-PopUp", "Erst Benutzernamen eintragen", 2)
GUICtrlSetState($In_Benutzer, $GUI_FOCUS)
Case GUICtrlRead($In_Kennwort)=""
Msgbox(32, "Fehler-PopUp", "Erst Kennwort eintragen", 2)
GUICtrlSetState($In_Kennwort, $GUI_FOCUS)
Case Else
RunAsSet(GUICtrlRead($In_Benutzer), GUICtrlRead($In_Domain), GUICtrlRead($In_Kennwort))
Run($Programm)
RunAsSet()
Exit
EndSelect
Else
Msgbox(16, "Ooops..", "Das angegebene Programm " &$Programm &" gibt es nicht!")
EndIf
EndSwitch
Wend
Func _GetUsers($Domain="localhost")
Local $wbemFlagReturnImmediately=0x10, $wbemFlagForwardOnly=0x20, $colItems="", $s
Local $objWMIService=ObjGet("winmgmts:\\" &$Domain &"\root\CIMV2")
$colItems=$objWMIService.ExecQuery("Select * FROM Win32_UserAccount", "WQL", $wbemFlagReturnImmediately*$wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
If Not $objItem.Disabled Then $s&=$objItem.Name &"|"
Next
Else
Msgbox(0, "WMI-Ausgabe","Keine WMI-Objekte gefunden für Klasse: Win32_UserAccount")
Exit 12
EndIf
Return StringLeft($s, StringLen($s)-1)
EndFunc