Momentan bau ich mir ein NAS zu Hause auf und hatte das Problem, daß man sich immer von Windows abmelden muß, damit man sich als anderer User auf dem Server einloggen kann. Google hat mir dann über die Konsole 'net use' vorgeschlagen, was auch ging, aber IMO auch recht umständlich. Also überlegt wie ich das noch einfacher machen kann und hab dann mal C# angeworfen. Ok, auf eine schnelle Lösung bin ich als Nicht-Programmierer nicht gekommen und hab mir dann mit PureBasic eine Alternative gesucht. Aber auch da waren einige Ungereimheiten. Nach kurzer Überlegung hab ich mich dank c't an AutoIt erinnert und wieder Google gefragt. Ja und siehe da, ich hab jetzt mein kleines Programm, was mir auf die Schnelle die Arbeit abnimmt und den eingeloggten User wieder 'killt'. So kann ich mich recht schnell als anderer User wieder anmelden um zum Bsp. die Rechte zu überprüfen.
Ich hab natürlich auch hier nach (Teil)Lösungen gesucht und bin auch fündig geworden. Daher stell ich mal meinen Code hier mit rein und wer will, kann mir ja noch ein paar Tipps geben, was man noch optimieren kann, oder was auf jedenfall noch mit rein muß.
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
;Funktion von 'gtaspider' http://www.AutoIt.de
Func check_online()
;By GtaSpider
Local $stdBuffer, $sreBuffer
$Pid = Run(@ComSpec & ' /c net view', '', @SW_HIDE, 2 + 4)
While Not @error
$stdBuffer &= StdoutRead($Pid)
WEnd
$sreBuffer = StringRegExp ($stdBuffer, "\\\\([a-zA-Z0-9-]*)", 3)
$usre = UBound($sreBuffer)
ReDim $sreBuffer[$usre+1]
_ArrayPush($sreBuffer,$usre,1)
ProcessClose($Pid)
Return $sreBuffer
EndFunc ;==>check_online
;Erstellte GUI mit Koda Form-Designer
#Region ### START Koda GUI section ### Form=form_home.kxf
$form_home = GUICreate("KillNetworkUser", 341, 167, -1, -1)
GUISetIcon("icon.ico")
$label_showMessage = GUICtrlCreateLabel("Select PC", 20, 119, 301, 20, $SS_CENTER, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
$button_kill = GUICtrlCreateButton("Kill Now!", 182, 25, 136, 51, $WS_GROUP)
GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
$button_exit = GUICtrlCreateButton("Exit", 252, 81, 66, 26, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
$button_info = GUICtrlCreateButton("Info", 182, 81, 66, 26, $WS_GROUP)
$Group1 = GUICtrlCreateGroup("", 5, 1, 331, 161)
$listbox_pc = GUICtrlCreateList("", 21, 24, 150, 84)
#EndRegion ### END Koda GUI section ###
$info = "KillNetworkUser " & Chr(10) & "" & Chr(10) & " by Ophthalamia"
[/autoit][autoit][/autoit][autoit];Funktion aufrufen und Werte ins Array schreiben
$pcs = check_online()
For $i = 1 To $pcs[0]
GUICtrlSetData($listbox_pc, $pcs[$i])
Next
;Hauptprogramm
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $button_info
MsgBox(8192, "Information", $info, 10)
Case $button_exit
Exit
Case $button_kill
$pcname = GUICtrlRead($listbox_pc) ;übergeben ausgewählten Wert ins Listview
$val = RunWait(@ComSpec & " /c " & "net use \\" & $pcname & " /delete", "", @SW_HIDE) ;Hide-Aufruf vom CMD mit net use ...
; Rückgabewert 0 = gekillt
; Rückgabewert 2 = nicht geloggt
if $pcname = "" Then ;Nichts ausgewählt
GUICtrlSetData($label_showMessage, "No PC selected!")
Else
If $val = 0 Then ;Kill User
GUICtrlSetData($label_showMessage, "User is killed from " & $pcname)
Else ;Niemand eingeloggt
GUICtrlSetData($label_showMessage, "Nobody is logged on " & $pcname)
EndIf
EndIf
EndSwitch
WEnd
Mir gefällt AutoIt bisher wirklich gut und ich werde mich auf jedenfall weiter damit beschäftigen. Auch hoffe ich, daß ich meinen Großen dafür begeistern kann und er sich 'endlich' auch mal anderen Sachen als nur spielen widmet. Er ist jetzt 12 und das ist ja schon fast zu spät dafür.
Gruss Ophthalamia