Hallo,
Du kannst dir doch die letzte Position merken und erst danach weiter machen!
Hallo,
Du kannst dir doch die letzte Position merken und erst danach weiter machen!
Hallo,
ja @ScriptFullPath gibt den kompletten Dateinamen mit Pfad zurück!
Poste bitte mal das Kix-Script bzw. die Zeile mit dem Aufruf!
Hallo,
ich habe vor einiger Zeit mal ein Testscript geschrieben, vllt. kannst Du damit ja was anfangen!
#include <GUIConstants.au3>
#Include <GuiListView.au3>
#Include <GuiStatusBar.au3>
#include <Date.au3>
Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
Local $objWINNTService, $objWMIService
Local $arSBPartsSize[2] = [200, -1]
Local $arSBPartsText[2] = ["Benutzer: 0 Gruppen: 0", ""]
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=d:\entwicklung\autoit3\myexamples\tools\nt userinfo\frmuserinfo.kxf
$FrmUserInfo = GUICreate("", 1001, 720, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS))
GUISetOnEvent($GUI_EVENT_CLOSE, "FrmUserInfoClose")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "FrmUserInfoMinimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "FrmUserInfoMaximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "FrmUserInfoRestore")
$LblServer = GUICtrlCreateLabel("Server:", 32, 38, 38, 17)
GUICtrlSetOnEvent(-1, "LblServerClick")
$IBServer = GUICtrlCreateInput(StringReplace(@LogonServer, "\", ""), 84, 36, 145, 21, BitOR($ES_UPPERCASE, $ES_AUTOHSCROLL))
GUICtrlSetOnEvent(-1, "IBServerChange")
$ButRead = GUICtrlCreateButton("&Lesen", 240, 34, 75, 26, 0)
GUICtrlSetOnEvent(-1, "ButReadClick")
$LVUsers = GUICtrlCreateListView("Benutzername|Vollständiger Name|Beschreibung|Letzte Anmeldung|Pw.-alter (t)|Mitglied von", 24, 96, 940, 300, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSendMsg($LVUsers, 0x101E, 0, 150)
GUICtrlSendMsg($LVUsers, 0x101E, 1, 150)
GUICtrlSendMsg($LVUsers, 0x101E, 2, 200)
GUICtrlSendMsg($LVUsers, 0x101E, 3, 100)
GUICtrlSendMsg($LVUsers, 0x101E, 4, 80)
GUICtrlSendMsg($LVUsers, 0x101E, 5, 250)
GUICtrlSetOnEvent(-1, "LVUsersClick")
GUICtrlSetState(-1, $GUI_DISABLE)
$LVGroups = GUICtrlCreateListView("Gruppe|Beschreibung|Mitglieder", 24, 432, 940, 200, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlSendMsg($LVGroups, 0x101E, 0, 150)
GUICtrlSendMsg($LVGroups, 0x101E, 1, 200)
GUICtrlSendMsg($LVGroups, 0x101E, 2, 590)
GUICtrlSetOnEvent(-1, "LVGroupsClick")
GUICtrlSetState(-1, $GUI_DISABLE)
$SBInfo = _GUICtrlStatusBar_Create($FrmUserInfo, $arSBPartsSize, $arSBPartsText)
[/autoit] [autoit][/autoit] [autoit]$objWINNTService = ObjGet("WinNT://" & GUICtrlRead($IBServer))
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($IBServer) & "\root\CIMV2")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GUICtrlListView_JustifyColumn($LVUsers, 3, 1)
_GUICtrlListView_JustifyColumn($LVUsers, 4, 1)
_GUICtrlStatusBar_SetText($SBInfo, "Benutzer: " & _GUICtrlListView_GetItemCount($LVUsers) & " Gruppen: " & _GUICtrlListView_GetItemCount($LVGroups), 0)
[/autoit] [autoit][/autoit] [autoit]Dim $B_DESCENDING_USERS[_GUICtrlListView_GetColumnCount($LVUsers) ]
Dim $B_DESCENDING_GROUPS[_GUICtrlListView_GetColumnCount($LVGroups) ]
;Register WM_NOTIFY events
GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")
While 1
$strTitle = "Benutzer-/Gruppenverwaltung - " & GUICtrlRead($IBServer)
If WinGetTitle($FrmUserInfo) <> $strTitle Then WinSetTitle($FrmUserInfo, "", $strTitle)
[/autoit] [autoit][/autoit] [autoit]Sleep(100)
WEnd
Func ButReadClick()
GUICtrlSetState($LVUsers, $GUI_DISABLE)
GUICtrlSetState($LVGroups, $GUI_DISABLE)
_GUICtrlListView_DeleteAllItems($LVUsers)
_GUICtrlListView_DeleteAllItems($LVGroups)
_GUICtrlStatusBar_SetText($SBInfo, "Benutzer: " & _GUICtrlListView_GetItemCount($LVUsers) & " Gruppen: " & _GUICtrlListView_GetItemCount($LVGroups), 0)
_GUICtrlStatusBar_SetText($SBInfo, "Daten werden eingelesen! Bitte warten...", 1)
For $objWINNT In $objWINNTService
$strName = $objWINNT.name
ConsoleWrite($objWINNT & @LF)
Switch $objWINNT.Class
Case "user"
$Line = _GetUserInfo(GUICtrlRead($IBServer), $strName, "|")
GUICtrlCreateListViewItem($Line, $LVUsers)
Case "group"
$Line = _GetGroupInfo(GUICtrlRead($IBServer), $strName, "|")
GUICtrlCreateListViewItem($Line, $LVGroups)
EndSwitch
_GUICtrlStatusBar_SetText($SBInfo, "Benutzer: " & _GUICtrlListView_GetItemCount($LVUsers) & " Gruppen: " & _GUICtrlListView_GetItemCount($LVGroups), 0)
Next
_GUICtrlStatusBar_SetText($SBInfo, "", 1)
GUICtrlSetState($LVUsers, $GUI_ENABLE)
GUICtrlSetState($LVGroups, $GUI_ENABLE)
EndFunc ;==>ButReadClick
Func FrmUserInfoClose()
Exit
EndFunc ;==>FrmUserInfoClose
Func FrmUserInfoMaximize()
_GUICtrlStatusBar_Resize($SBInfo)
EndFunc ;==>FrmUserInfoMaximize
Func FrmUserInfoMinimize()
_GUICtrlStatusBar_Resize($SBInfo)
EndFunc ;==>FrmUserInfoMinimize
Func FrmUserInfoRestore()
_GUICtrlStatusBar_Resize($SBInfo)
EndFunc ;==>FrmUserInfoRestore
Func IBServerChange()
_GUICtrlListView_DeleteAllItems($LVUsers)
$objWINNTService = ObjGet("WinNT://" & GUICtrlRead($IBServer))
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($IBServer) & "\root\CIMV2")
EndFunc ;==>IBServerChange
Func LblServerClick()
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>LblServerClick
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func LVGroupsClick()
_GUICtrlStatusBar_SetText($SBInfo, "Daten werden sortiert! Bitte warten...", 1)
_GUICtrlListView_SimpleSort($LVGroups, $B_DESCENDING_GROUPS, GUICtrlGetState($LVGroups))
_GUICtrlStatusBar_SetText($SBInfo, "", 1)
EndFunc ;==>LVGroupsClick
Func LVUsersClick()
_GUICtrlStatusBar_SetText($SBInfo, "Daten werden sortiert! Bitte warten...", 1)
_GUICtrlListView_SimpleSort($LVUsers, $B_DESCENDING_USERS, GUICtrlGetState($LVUsers))
_GUICtrlStatusBar_SetText($SBInfo, "", 1)
EndFunc ;==>LVUsersClick
Func _GetUserInfo($strComputer, $strUserID, $strSep = ";")
$strInfos = ""
$OEvent = ObjEvent("AutoIt.Error", "nothing") ; Bei Fehler weitermachen, entspricht "On Error Resume Next"
$objWINNTUserID = ObjGet("WinNT://" & $strComputer & "/" & $strUserID & ",user")
;~ $colItemsUserID = $objWMIService.ExecQuery ("SELECT * FROM Win32_UserAccount where name ='" & $strUserID & "'", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
;~ If IsObj($colItemsUserID) Then
;~ For $colItemUserID In $colItemsUserID
;~ If $colItemUserID.Disabled = 0 Then
;~ $strInfos &= "J"
;~ Else
;~ $strInfos &= "N"
;~ EndIf
;~ $strInfos &= $strSep
;~ Next
;~ Else
;~ $strInfos &= $strSep
;~ EndIf
$strInfos &= $objWINNTUserID.name
$strInfos &= $strSep
$strInfos &= $objWINNTUserID.fullname
$strInfos &= $strSep
$strInfos &= $objWINNTUserID.description
$strInfos &= $strSep
If $objWINNTUserID.lastlogin Then $strInfos &= WMIDateStringToDate($objWINNTUserID.lastlogin)
$strInfos &= $strSep
If $objWINNTUserID.PasswordAge Then $strInfos &= _DateDiff("D", _DateAdd('s', -$objWINNTUserID.PasswordAge, _NowCalc()), _NowCalc())
$strInfos &= $strSep
For $group In $objWINNTUserID.Groups
$strInfos &= $group.name & ","
Next
Return StringTrimRight($strInfos, 1)
EndFunc ;==>_GetUserInfo
Func _GetGroupInfo($strComputer, $strGroupID, $strSep = ";")
$strInfos = ""
$OEvent = ObjEvent("AutoIt.Error", "nothing") ; Bei Fehler weitermachen, entspricht "On Error Resume Next"
$objWINNTGroupID = ObjGet("WinNT://" & $strComputer & "/" & $strGroupID & ",group")
$strInfos &= $objWINNTGroupID.name
$strInfos &= $strSep
$strInfos &= $objWINNTGroupID.description
$strInfos &= $strSep
For $Member In $objWINNTGroupID.Members
$strInfos &= $Member.name & ","
Next
Return StringTrimRight($strInfos, 1)
EndFunc ;==>_GetGroupInfo
Func nothing()
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>nothing
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func WMIDateStringToDate($strDate)
Return StringMid($strDate, 1, 4) & "/" & StringMid($strDate, 5, 2) & "/" & StringMid($strDate, 7, 2) & _
" " & StringMid($strDate, 9, 2) & ":" & StringMid($strDate, 11, 2) & ":" & StringMid($strDate, 13, 2)
EndFunc ;==>WMIDateStringToDate
; WM_NOTIFY event handler
Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
#forceref $hWndGUI, $MsgID, $wParam
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3)
Switch $wParam
Case $LVGroups
If $event = $NM_CLICK Then _GUICtrlListView_SetItemSelected($LVUsers, _GUICtrlListView_GetSelectedColumn($LVUsers), 1)
Case $LVUsers
If $event = $NM_CLICK Then _GUICtrlListView_SetItemSelected($LVGroups, _GUICtrlListView_GetSelectedColumn($LVGroups), 1)
EndSwitch
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFunc ;==>WM_Notify_Events
Aber #RequireAdmin erteilt doch keine Adminrechte, oder? Wenn das geht wäre es eine riesige Sicherheitslücke!
Hallo,
so funktioniert das nicht, RunAsSet hat nur Auswirkung auf die Befehle Run und RunWait. D.h. Scripte die Run und RunWait gestartet werden laufen unter den angebenen Rechten, deshalb wurde wahrscheinlich auch RunAsSet durch RunAs und RunAsWait ersetzt. Wenn Du andere Befehle wie in deinem Fall z.B. RegWrite mit Adminrechten ausführen willst musst Du das ganze Script mit Adminrechten neustarten.
Ich löse das Problem immer so:
If Not IsAdmin() Then
; Bis Version 3.2.10.0
;~ RunAsSet("administrator", "domain", "passwort")
;~ Run(@ScriptFullPath, @ScriptDir, @SW_HIDE)
;~ RunAsSet()
; AB Version 3.2.12.0
RunAs("administrator", "domain", "passwort", 0, @ScriptFullPath, @ScriptDir, @SW_HIDE)
Exit
EndIf
If FileExists("c:\programme\BGInfo\BGInfo.exe") Then Exit
If IsAdmin() Then
MsgBox(0, "", "Admin-Rechte erkannt.")
EndIf
DirCreate("c:\programme\BGInfo")
FileCopy("\\server\RemoteInst$\BGInfo\*.*", "C:\programme\bginfo\")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "BGInfo", "REG_SZ", "C:\Programme\BGInfo\Bginfo.exe C:\Programme\bginfo\PCinfo.bgi /taskbar")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Support", "Support Rufnr", "REG_SZ", "+49 (089) 110 112")
Hallo,
@Pee hat da mal was zur Verfügung gestellt -> RestrictControlRegExp-UDF - Fehleingaben direkt verhindern, Eingabentypen festlegen
Hallo,
BugFix das geht aber kürzer:
[autoit]WinWaitActive('Fenster', '', 10)
If Not WinActive('Fenster') Then Exit MsgBox(0,'', 'Fehlgeschlagen')
; ....
Das ist ein blödes Forum hier. Wo kann ich meinen Account löschen?
peethebee
Können wir nicht einfach die Accounts der anderen löschen? ![]()
Hallo,
Strings werden immer Zeichen für Zeichen verglichen, da die 8 größer ist als die 1 kommt es zu diesem Fehler!
Du must den String aus der Inputbox einfach in einen Integer konvertieren dann gehts:
$start_uhr= Int(InputBox("Startzeit eingeben", "Bitte geben Sie den Beginn ein" & @CR & "(z.B. 08 oder 15)"))
$start_min= Int(InputBox("Startzeit eingeben", "Bitte geben Sie die Beginn-Minute ein" & @CR & "(z.B. 02 oder 56)"))
$end_uhr= Int(InputBox("Endzeit eingeben", "Bitte geben Sie die End-Stunde ein"))
$end_min= Int(InputBox("Endzeit eingeben", "Bitte geben Sie die End-Minute ein"))
#comments-start
If ($start_uhr < 10) Then
$start_uhr = 0 & $start_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
EndIf
If ($start_min < 10) Then
$start_min = 0 & $start_min ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
EndIf
#comments-end
If ($start_uhr <= $end_uhr) Then
$dauer_uhr = $end_uhr - $start_uhr
ElseIf ($start_uhr > $end_uhr) Then
$dauer_uhr = (24 - $start_uhr) + $end_uhr
EndIf
If ($start_min > $end_min) Then
$dauer_min = 60 - ($start_min - $end_min)
$dauer_uhr = $dauer_uhr - 1
Else
$dauer_min = $end_min - $start_min
EndIf
If ($dauer_min < 10) Then
$dauer_min = 0 & $dauer_min ;Falls die Minuten kleiner als "10" sind, vorne mit einer "0" auffüllen
EndIf
If ($dauer_uhr < 10) Then
$dauer_uhr = 0 & $dauer_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
EndIf
MsgBox(0,"Ergebnis", "Beginn: " & $start_uhr & ":" & $start_min & @CR & "Ende: " & $end_uhr & ":" & $end_min & @CR & "Dauer: " & $dauer_uhr & ":" & $dauer_min)
[/autoit]Hallo,
am einfachsten über den DOS-Befehl time!
Hallo,
schau dir mal StringRight an!
übergib mal den Port als Zahl und nicht als String!
[autoit]$port = 21
[/autoit]
statt
$port = '21'
[/autoit]Hallo,
lass dir mal nach jedem Befehl den Wert von @error ausgeben und der Befehl zum löschen ist _FTPDelFile (einfach mal in die ftp.au3 schauen).
Hallo,
@JoEtHeKiLlEr auf diese Weise kann man Arrays nicht miteinander vergleichen!
Beim Spliten an @CRLF muss das Flag von StringSplit auf 1 gesetzt werden!
[autoit]#include <inet.au3>
$aRead = StringSplit(_INetGetSource("http://user.funpic.de/version.txt"),@CRLF,1)
MsgBox(0,"","Insgesamte Zeilen in der Datei: "&$aRead[0]) ; Wieviele Zeilen in der Datei insgesamt sind
MsgBox(0,"",$aRead[5]) ;Zeile 5
MsgBox(0,"",$aRead[2]) ;Zeile 2
;....
Hallo,
ja mit ControlSend!
Dafür muss man die Zeile 10 entsprechend anpassen, um z.B. nur Infos über den Nachrichtendienst abzufragen muss das so aussehen:
; Erstellt von AutoIt Scriptomatic
$wbemFlagReturnImmediately=0x10
$wbemFlagForwardOnly=0x20
$colItems=""
$strComputer="localhost"
$Output=""
$Output&="Computer: " &$strComputer & @CRLF
$Output&="==========================================" & @CRLF
$objWMIService=ObjGet("winmgmts:\\" &$strComputer &"\root\CIMV2")
$colItems=$objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE DisplayName='Nachrichtendienst'", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$Output&="AcceptPause: " &$objItem.AcceptPause & @CRLF
$Output&="AcceptStop: " &$objItem.AcceptStop & @CRLF
$Output&="Caption: " &$objItem.Caption & @CRLF
$Output&="CheckPoint: " &$objItem.CheckPoint & @CRLF
$Output&="CreationClassName: " &$objItem.CreationClassName & @CRLF
$Output&="Description: " &$objItem.Description & @CRLF
$Output&="DesktopInteract: " &$objItem.DesktopInteract & @CRLF
$Output&="DisplayName: " &$objItem.DisplayName & @CRLF
$Output&="ErrorControl: " &$objItem.ErrorControl & @CRLF
$Output&="ExitCode: " &$objItem.ExitCode & @CRLF
$Output&="InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output&="Name: " &$objItem.Name & @CRLF
$Output&="PathName: " &$objItem.PathName & @CRLF
$Output&="ProcessId: " &$objItem.ProcessId & @CRLF
$Output&="ServiceSpecificExitCode: " &$objItem.ServiceSpecificExitCode & @CRLF
$Output&="ServiceType: " &$objItem.ServiceType & @CRLF
$Output&="Started: " &$objItem.Started & @CRLF
$Output&="StartMode: " &$objItem.StartMode & @CRLF
$Output&="StartName: " &$objItem.StartName & @CRLF
$Output&="State: " &$objItem.State & @CRLF
$Output&="Status: " &$objItem.Status & @CRLF
$Output&="SystemCreationClassName: " &$objItem.SystemCreationClassName & @CRLF
$Output&="SystemName: " &$objItem.SystemName & @CRLF
$Output&="TagId: " &$objItem.TagId & @CRLF
$Output&="WaitHint: " &$objItem.WaitHint & @CRLF
If Msgbox(1, "WMI-Ausgabe", $Output)=2 then ExitLoop
$Output=""
Next
Else
Msgbox(0, "WMI-Ausgabe","Keine WMI-Objekte gefunden für Klasse: " & "Win32_Service")
Endif
Func WMIDateStringToDate($dtmDate)
Return (StringMid($dtmDate, 5, 2) &"/" &StringMid($dtmDate, 7, 2) &"/" &StringLeft($dtmDate, 4) & " " &StringMid($dtmDate, 9, 2) &":" &StringMid($dtmDate, 11, 2) &":" &StringMid($dtmDate,13, 2))
EndFunc