1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. _mk_

Beiträge von _mk_

  • Durchschnitt errechnen

    • _mk_
    • 27. November 2012 um 13:21

    Warum die Textdatei nicht mittels ADO einlesen und auswerten?

    Spoiler anzeigen
    [autoit]


    AutoItSetOption('MustDeclareVars', 1)

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

    ; Konstanten bitte anpassen
    Const $DIRECTORY = 'C:\Dokumente und Einstellungen\Administrator\Desktop\cvsexample\'
    Const $TEXT_FILE = 'daten.txt'
    ; ---

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

    Const $REGKEY_PATH = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text'
    Dim $Buffer = ''

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

    If StringLower(RegRead($REGKEY_PATH, 'Format')) <> 'tabdelimited' Then
    $Buffer = RegRead($REGKEY_PATH, 'Format')
    RegWrite($REGKEY_PATH, 'Format', 'REG_SZ', 'TabDelimited')
    EndIf

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

    Dim $con = ObjCreate('ADODB.Connection')
    Dim $rs = ObjCreate('ADODB.RecordSet')

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

    $con.Provider = 'Microsoft.Jet.OLEDB.4.0'
    $con.ConnectionString = StringFormat( _
    'Data Source="%s";' & _
    'Extended Properties="text;HDR=NO";', _
    $DIRECTORY)
    $con.Open

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

    $rs.Open(StringFormat( _
    'SELECT F2, SUM(F1), COUNT(F2), AVG(F1) ' & _
    'FROM %s ' & _
    'GROUP BY F2', $TEXT_FILE), $con)

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

    ConsoleWrite(StringFormat('%-10s%-10s%-10s%s\n', 'Wert', 'Summe', 'Anzahl', 'Durschnitt'))
    While Not $rs.EOF
    ConsoleWrite(StringFormat('%-10s%-10s%-10s%s\n', _
    $rs.Fields(0).Value, $rs.Fields(1).Value, $rs.Fields(2).Value, $rs.Fields(3).Value))
    $rs.MoveNext()
    WEnd

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

    $rs.Close()
    $con.Close()

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

    If $Buffer <> '' Then
    RegWrite($REGKEY_PATH, 'Format', 'REG_SZ', $Buffer)
    EndIf

    [/autoit]
  • Alternativen zum Array

    • _mk_
    • 5. Oktober 2012 um 21:19

    Warum eigentlich nicht auch das RecordSet-Objekt (ADO) als Alternative zum Array nutzen?

    Spoiler anzeigen
    [autoit]

    AutoItSetOption('MustDeclareVars', 1)

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

    Dim Const $adInteger = 3
    Dim Const $adVarChar = 200
    Dim Const $adFilterNone = 0
    Dim Const $adSearchForward = 0
    Dim Const $adBookmarkFirst = 1
    Dim Const $adAffectCurrent = 1
    Dim Const $adPersistXML = 1
    Dim Const $adSaveCreateOverWrite = 2
    Dim Const $DefinedSize = 255

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

    Dim $err = ObjEvent('AutoIt.Error', '_ErrorHandler')
    Dim $rs = ObjCreate('ADODB.RecordSet')

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

    ; --- Aufbau der dynamischen Tabelle
    $rs.Fields.Append('ID', $adInteger)
    $rs.Fields.Append('Name', $adVarChar, $DefinedSize)
    $rs.Fields.Append('Vorname', $adVarChar, $DefinedSize)
    $rs.Fields.Append('Telefon', $adVarChar, $DefinedSize)

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

    $rs.Open()
    ; --- Tabelle befüllen
    $rs.AddNew()
    $rs('ID') = 1
    $rs('Name') = 'Dosenkohl'
    $rs('Vorname') = 'Hans'
    $rs('Telefon') = '099/999999'
    $rs.Update()

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

    $rs.AddNew()
    $rs('ID') = 2
    $rs('Name') = 'Wumpe'
    $rs('Vorname') = 'Klaus'
    $rs('Telefon') = '088/8888888'
    $rs.Update()

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

    $rs.AddNew()
    $rs('ID') = 3
    $rs('Name') = 'Dampf'
    $rs('Vorname') = 'Hans'
    $rs('Telefon') = '077/777777'
    $rs.Update()

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

    ConsoleWrite('Tabelle ausgeben' & @CRLF)
    _PrintTable()

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

    ; --- Tabelle sortieren
    $rs.Sort = 'Telefon'
    ConsoleWrite('Sortierte Tabelle ausgeben' & @CRLF)
    _PrintTable()

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

    ; --- Tabelle filtern
    $rs.Filter = 'Vorname = ''Hans'''
    ConsoleWrite('Gefilterte Tabelle ausgeben' & @CRLF)
    _PrintTable()

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

    ; --- Filterung entfernen
    $rs.Filter = $adFilterNone

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

    $rs.MoveFirst()
    ; --- Datensatz suchen
    $rs.Find('Vorname = ''Hans''')
    ConsoleWrite('Suchergebnis ausgeben' & @CRLF)
    If Not $rs.BOF And Not $rs.EOF Then
    While Not $rs.EOF
    ConsoleWrite(StringFormat('%s %s %s %s %s\n', _
    $rs('ID').Value, $rs('Name').Value, $rs('Vorname').Value, $rs('Telefon').Value))
    $rs.Find('Vorname = ''Hans''', 1)
    WEnd
    Else
    ConsoleWrite('Keine Übereinstimmung gefunden!' & @CRLF)
    EndIf
    ConsoleWrite(@CRLF)

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

    ; --- Einen Datensatz von der aktullen Position nach vorne springen
    $rs.Move(1, $adBookmarkFirst)
    If Not $rs.BOF And Not $rs.EOF Then
    ConsoleWrite('Der Datensatz ...' & @CRLF)
    ConsoleWrite(StringFormat('%s %s %s %s %s\n', _
    $rs('ID').Value, $rs('Name').Value, $rs('Vorname').Value, $rs('Telefon').Value))
    ConsoleWrite('... wird gelöscht!' & @CRLF)
    ; --- aktuellen Datensatz löschen
    $rs.Delete($adAffectCurrent)
    EndIf
    ConsoleWrite(@CRLF)
    _PrintTable()

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

    ; --- Tabelle persistent speichern
    Dim $stm = ObjCreate('ADODB.Stream')
    $rs.Save($stm, $adPersistXML)
    $stm.SaveToFile('c:\user.xml', $adSaveCreateOverWrite)

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

    ; --- Tabelle schliessen
    $rs.Close()
    $stm.Close()

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

    Func _PrintTable()
    $rs.MoveFirst()
    While Not $rs.EOF
    ConsoleWrite(StringFormat('%s %s %s %s %s\n', $rs('ID').Value, $rs('Name').Value, $rs('Vorname').Value, $rs('Telefon').Value))
    $rs.MoveNext()
    WEnd
    ConsoleWrite(@CRLF)
    EndFunc ;==>_PrintTable

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

    Func _ErrorHandler()
    ConsoleWrite(StringFormat('Fehlernr .....: %s\n', Hex($err.number, 8)))
    ConsoleWrite(StringFormat('Beschreibung .: %s\n', $err.description))
    ConsoleWrite(StringFormat('Skriptzeile ..: %s\n', $err.line))
    Return SetError(1)
    EndFunc ;==>_ErrorHandler

    [/autoit]
  • _AD_MoveObject verschiebt nicht

    • _mk_
    • 19. September 2012 um 07:37

    Du solltest einen Blick auf SelfADSI und MSDN: Active Directory Service Interfaces werfen.

    [autoit]


    ; TODO: Den ADsPfad an Deine Umgebung anpassen!
    Dim $User = ObjGet('LDAP://CN=Lemon,OU=Bier,DC=Becks,DC=local') ; As IADsUser
    ConsoleWrite(StringFormat('Ist der Benutzer %s deaktiviert? %s\n', _
    $User.CN, $User.AccountDisabled))

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

    ; Um ein Benutzer zu deaktivieren, wird die AccountDisabled-Eigenschaft auf TRUE gesetzt.
    $User.AccountDisabled = True
    ; Benutzer wird erst mit dem Aufruf von SetInfo() gesperrt!
    $User.SetInfo()

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

    ConsoleWrite(StringFormat('Ist der Benutzer %s deaktiviert? %s\n', _
    $User.CN, $User.AccountDisabled))

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

    ; Den "Relative Distinguished Name" zwischenspeichern,
    ; um später wieder Zugriff auf den Benutzer zu erhalten.
    Dim $RDN = $User.Name ; As String

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

    ConsoleWrite(StringFormat('Der Benutzer %s befindet sich in der Organisationseinheit %s.\n', _
    $User.CN, $User.Parent))

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

    ; TODO: Den ADsPfad an Deine Umgebung anpassen!
    Dim $Container = ObjGet('LDAP://OU=Users AD deaktiviert,DC=Becks,DC=local') ; As IADsContainer

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

    ; Den Benutzer in den Container verschieben. Die MoveHere-Methode kann auch zum Umbenennen
    ; von ADsObjekte verwendet werden.
    $Container.MoveHere($User.ADsPath, $RDN)

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

    $User = $Container.GetObject('user', $RDN)
    ConsoleWrite(StringFormat('Der Benutzer %s befindet sich in der Organisationseinheit %s.\n', _
    $User.CN, $User.Parent))

    [/autoit]
  • Active Directory (Domain): Anfragen ob User in der AD existiert

    • _mk_
    • 16. August 2012 um 08:17

    Surfy.

    Hier hast Du ...

    [autoit]


    Global $Err = ObjEvent('AutoIt.Error', '_ComErr')

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

    ; Anmeldename ohne Zusätze
    _UserAuthenticate('Test', '123')

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

    ; NETBIOS-Anmeldename
    _UserAuthenticate('domain\Test', '123')

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

    ; User Principal Name
    _UserAuthenticate('Test@domain.local', '123')

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

    Func _UserAuthenticate($Username, $Password) ; As Boolean
    Local Const $ADS_SECURE_AUTHENTICATION = 1
    Local $dso = ObjGet('LDAP:') ; As IADsOpenDSObject

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

    ConsoleWrite(StringFormat('Authentifiziere %s ...\n', $Username))
    Local $dse = $dso.OpenDSObject('LDAP://dc=domain,dc=local', _ ; As IADs
    $Username, $Password, $ADS_SECURE_AUTHENTICATION)

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

    If @error Then
    ConsoleWrite('Anmeldung fehlgeschlagen!' & @CRLF)
    Return False
    Else
    ConsoleWrite('Anmeldung erfolgreich!' & @CRLF)
    Return True
    EndIf
    EndFunc ;==>_UserAuthenticate

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

    Func _ComErr()
    ConsoleWrite(StringFormat('\tFehlernummer: %s\n', Hex($Err.Number, 8)))
    ConsoleWrite(StringFormat('\tBeschreibung: %s\n', $Err.Windescription))
    SetError(1)
    EndFunc ;==>_ComErr

    [/autoit]
  • .NET Funktionen in AutoIt Verwenden

    • _mk_
    • 18. Juli 2012 um 20:03

    edmann

    Ein Blick in die Registierungsdatenbank von Windows sollte hier helfen. Folgende Klassen kannst Du in AutoIt verwenden:

    System.Collections.ArrayList
    System.Collections.HashTable
    System.Collections.Queue
    System.Collections.Stack
    System.Collections.SortedList

    System.IO.MemoryStream
    System.IO.StringWriter

    System.Text.StringBuilder

    System.Random

  • Domainlogonscript

    • _mk_
    • 11. Juli 2012 um 10:04

    Ohne UDFs kannst Du die Gruppenzugehörigkeiten so abfragen ...

    [autoit]


    Dim $ADInfo = ObjCreate('ADSystemInfo')
    Dim $currentUser = ObjGet(StringFormat('LDAP://%s', $ADInfo.UserName))

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

    For $grp in $currentUser.Groups
    ConsoleWrite(StringFormat('%s (%s)\n', $grp.cn, $grp.description))
    Next

    [/autoit]
  • AD: Gruppen eines Benutzers in GUI darstellen

    • _mk_
    • 5. Juli 2012 um 14:25

    Du kannst auch, ohne die String-Operationen zu verwenden, die Common Name(cn)-Eigenschaft der Gruppe ausgeben.

    [autoit]

    Dim $grp = ObjGet('LDAP://cn=Agents,ou=Groups,dc=FBI,dc=Local')
    ConsoleWrite($grp.cn @crlf)

    [/autoit]
  • [Tutorial] Sauber Programmieren

    • _mk_
    • 11. Juni 2012 um 08:53
    Zitat von m-obi

    Was soll eigentlich bei vielen UDF's $g... heißen?

    g definiert den Sichtbarkeitbereich einer Variable und steht für global.

  • [Tutorial] Sauber Programmieren

    • _mk_
    • 6. Juni 2012 um 11:01

    Die ungarische Notation führt, wie man hier erkennen kann, oft zu Missverständnisse. Der Präfix p wird einmal als Pfad verwendet, dann als Pointer benutzt oder er markiert eine Variable als Funktionsparameter. Deshalb sollte man auch auf den Gebrauch der ungarischen Notation verzichten.

    Hinzu kommt das AutoIt ein schwach typisierte Sprache ist. Es gibt nur einen Datentypen, nämlich Variant. Dieser kann alle möglichen Arten von Daten aufnehmen. Während des Skriptablaufs kann dieselbe Variable unterschiedliche Datentypen speichern. Die Zuordnung der Variable zu den Subtypen(Fließkommazahl, Zeichenkette, Zeiger, etc.) findet nach dem aktuellen Inhalt statt.

    Dadurch kommen wir zu einem weiteren Problem: implizierte Typenkonvertierung, die viele "unschöne" Anweisungen zu läßt. Leider wird die implizierte Datentypenkonvertierung von vielen Programmierer verwendet, anstatt die Werte explizit mit einer Umwandlungsfunktion(Int(), String()) zu konvertieren. Wenn man aber die implizierte Konvertierung gebraucht, sollte man für die Zeichenkettenverkettung das käufmannische Und(&) statt des Pluszeichens verwenden.

    Beim dem Beispiel aus dem Tutorial, $IchBinEineVariable, handelt sich um die Pascal Case-Schreibweise.

  • [Tutorial] Sauber Programmieren

    • _mk_
    • 5. Juni 2012 um 07:11

    Dir ist ein kleiner Fehler unterlaufen: Du verwendest die Variable $hGUI ohne vorherige Deklaration. Die Deklaration einer Variable, Konstante oder einem Array kann mit dem Schlüsselwort Dim, Global, Local oder Const gesehen. Eine Deklarierung kann auch erzwungen werden, indem man AutoItSetOption('MustDeclareVars', 1) an dem Skriptanfang schreibt. Alle unbekannten Variablen führen dann zu einer Fehlermeldung.

    Die Konvention, jedes Wort im Variablennamen mit einen Großbuchstaben zu beginnt, heißt Pascal Case.

  • SQLite --> Update-Operationen funktionieren nicht...

    • _mk_
    • 9. Mai 2012 um 11:07

    Auf den ersten Blick solltest Du Deine SQL-Anweisung mit einen Semikolon abschließen, damit diese ausgeführt wird.

  • Alle Dateien auslesen

    • _mk_
    • 9. Mai 2012 um 10:11

    Warum nicht einfach die Scripting.FileSystemObject-Klasse aus der Microsoft Scripting Runtime-Komponete (scrrun.dll) verwenden?

    [autoit]

    #include <String.au3>
    AutoItSetOption('MustDeclareVars', 1)
    Global Const $FOLDER_PATH = 'c:\'
    If FileExists($FOLDER_PATH) Then
    ConsoleWrite(StringFormat('Inhalt von %s\n', $FOLDER_PATH))
    _listFolder($FOLDER_PATH)
    EndIf

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

    Func _listFolder($p_sFolderPath, $p_iLevel = 0)
    Local $oFSO = ObjCreate('Scripting.FileSystemObject')
    Local $oFolder = $oFSO.GetFolder($p_sFolderPath)
    Local $sMyTab = _StringRepeat(' ', $p_iLevel)
    For $oFile In $oFolder.Files
    ConsoleWrite(StringFormat('%i %s%s\n', $p_iLevel, $sMyTab, $oFile.Name))
    Next ; $oFile
    For $oSubFolder In $oFolder.SubFolders
    ConsoleWrite(StringFormat('%i %s%s\n', $p_iLevel, $sMyTab, $oSubFolder.Name))
    _listFolder($oSubFolder.Path, $p_iLevel + 1)
    Next ; $oSubFolder
    EndFunc ;==>_listFolder

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™