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. autoBert

Beiträge von autoBert

  • Differenz zwischen 2 Datumswerten - ABER - Ergebnis gesucht in: Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden

    • autoBert
    • 27. Oktober 2018 um 14:57
    Zitat von kilo

    aber das Problem sind tatsächlich die Tage. Monate und Jahre lassen sich ja problemlos über _"DateDiff" bestimmen.

    Die "_DateDiff" - Funktion gibt auch die Tagesanzahl korrekt wieder (3405) - aber mir ist keine Formel bekannt, um sie korrekt in Jahre und Monate umzurechnen.

    mein Ansatz war und ist von der größten Einheit (Jahre) bis zur kleinsten Einheit (Sekunden) jeweils die Differenz zu ermitteln und diese mit _DateAdd zum Startdatum zu addieren. Da ich die endgültige Lösung erst danach hinei editiert habe und mitlerweile noch einmal für die Ausgabe angepasst habe, noch einnmal das Skript:

    Code
     #include <Date.au3>
    
    Global $sOrder = 'YMDhns', $sResult
    
    Global $bDebug = True ;False        ;zu Verständniszwecken können Debug Ausgaben angezeigt werden
    
    Global $dtEnd = "2018/10/26 19:03:43"
    Global $dtStart = "2009/06/30 14:05:16"
    
    For $i = 1 To StringLen($sOrder)
        $sTyp = StringMid($sOrder, $i, 1)
        $iRes = _Diff_NewStart($dtStart, $dtEnd, $sTyp)
        ;If $iRes < 10 Then $iRes = '0' & $iRes
        $sResult &= $iRes
        Switch $i
            Case 1, 2
                $sResult &= '/'
            Case 3
                $sResult &= ' '
            Case 4, 5
                $sResult &= ':'
        EndSwitch
    Next
    
    MsgBox(64, 'Differenz', $sResult)
    
    Func _Diff_NewStart($dt1, $dt2, $sTyp)
        Local $iResult = _DateDiff($sTyp, $dt1, $dt2)
        $dtStart = _DateAdd($sTyp, $iResult, $dt1)
        If $bDebug Then ConsoleWrite($sTyp & ': ' & $iResult & @TAB & 'Neu: ' & $dtStart & @CRLF)
        Return $iResult
    EndFunc   ;==>_Diff_NewStart
    Alles anzeigen

    obige Skript liefert mit deinen Orginaldaten: 9/3/26 4:58:27

    wenn ich die Uhr-Zeiten vertausche: 9/3/25 19:1:33. Die Ergebnisse sind Jahre/Monate/Tage Stunden:Minuten:Sekunden formatiert.

    Man kann also daran erkennen, daß die Macher der Date.au3 alles was nötig ist bereits berücksichtigt haben. Und falls du nicht die letzten Millisekunden bei der Berechnung herausquetschen musst/willst ist diese Art zu lösen die Bequemste.

  • Differenz zwischen 2 Datumswerten - ABER - Ergebnis gesucht in: Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden

    • autoBert
    • 27. Oktober 2018 um 12:31

    Ich würde alles den Funktionen _DateDiff + _DateAdd überlassen. Hier der angefangene Ansatz:

    Code
    #include <Date.au3>
    
    Global $bDebug = True ;False        ;zu Verständniszwecken können Debug Ausgaben angezeigt werden
    
    Global $dtEnd = "2018/10/26 19:03:43"
    Global $dtStart = "2009/06/30 14:05:16"
    
    $iYear = _Years($dtStart, $dtEnd)
    $iMonth = _Month($dtStart, $dtEnd)
    
    Func _Years($dt1, $dt2)
        Local $iYear = _DateDiff('Y', $dt1, $dt2)
        $dtStart = _DateAdd('Y', $iYear, $dt1)
        If $bDebug Then ConsoleWrite('_Years: ' & $iYear & @TAB & $dtStart & @CRLF)
        Return $iYear
    EndFunc
    
    Func _Month($dt1, $dt2)
        Local $iMonth = _DateDiff('M', $dt1, $dt2)
        $dtStart = _DateAdd('M', $iMonth, $dt1)
        If $bDebug Then ConsoleWrite('_Month: ' & $iMonth & @TAB & $dtStart & @CRLF)
        Return $iYear
    EndFunc
    Alles anzeigen

    da dies eine C & P (mit Search + Replace) Lösung wird ist sie leicht zu vervollständigen und du must dir keine Gedanken um Schaltjahre machen. Bei dieser Methode wird jeweils die ganzzahlige Differenz (in Jahren/Monaten/Tagen usw.) ermittelt und danach in der jeweiligen Einheit zum ältereren Datum addiert.

    Basierend auf diesem Ansatz hier eine kürzere Lösung:

    Code
    #include <Date.au3>
    
    Global $sOrder = 'YMDhns', $sResult
    
    Global $bDebug = True ;False        ;zu Verständniszwecken können Debug Ausgaben angezeigt werden
    
    Global $dtEnd = "2018/10/26 19:03:43"
    Global $dtStart = "2009/06/30 14:05:16"
    
    For $i = 1 To StringLen($sOrder)
        $sTyp = StringMid($sOrder, $i, 1)
        $iRes = _Diff_NewStart($dtStart, $dtEnd, $sTyp)
        $sResult &= $iRes & $sTyp & ' '
    Next
    
    ConsoleWrite(@CRLF & $sResult & @CRLF)
    
    Func _Diff_NewStart($dt1, $dt2, $sTyp)
        Local $iResult = _DateDiff($sTyp, $dt1, $dt2)
        $dtStart = _DateAdd($sTyp, $iResult, $dt1)
        If $bDebug Then ConsoleWrite($sTyp & ': ' & $iResult & @TAB & 'Neu: ' & $dtStart & @CRLF)
        Return $iResult
    EndFunc   ;==>_Diff_NewStart
    Alles anzeigen
  • COM error 80020009

    • autoBert
    • 23. Oktober 2018 um 18:03

    Ich würde es dahingehend interpretieren, daß die Website es nicht wünscht mit sinnlosen/falschen Anfragen belästigt zu werden.

  • Local, Const oder Static?

    • autoBert
    • 19. Oktober 2018 um 14:27
    Zitat von alpines

    ch würde hier die Variante nehmen die sich schöner liest. Wenn der Wert sich nicht verändert: Local Const $I_SHORT_LOOP = 3000 / $iShortSleep.

    Du kannst es auch als Local Static deklarieren, und es wäre wohl "schneller", aber der Geschwindigkeitsschub ist infinitesimal klein.

    Da sich mir der Gedanke aufgrängt, daß die Variablen (*_Loop) innerhalb einer/mehrer Funktion(en) als Endbedingung eines Loop's benutzt werden sollen, kann ich keinen Nutzen einer Local Static Deklaration erkennen. Bei Benutzung in mehreren Funktionen würde ich sie allerdings einmalig Global Const deklarieren.

  • _Excel_RangeSort - Sortierproblem

    • autoBert
    • 19. Oktober 2018 um 14:09

    Das Beispiel 1 in der Hilfe zu macht genau was du erreichen möchtest. Deine Sort-Zeile sollte also so aussehen:

    Code
    _Excel_RangeSort($oWorkbook, Default, "A1:D" & $oBook.Worksheets(1).UsedRange.Rows.Count), "A:A")

    vielleicht geht auch:

    Code
    _Excel_RangeSort($oWorkbook, Default, Default, "A:A")
  • SQL DELETE Befehl funktioniert nicht

    • autoBert
    • 17. Oktober 2018 um 13:44
    Zitat von ValleAIT

    autoBert

    Nachdem ich die Zeile eingefügt habe, erhalte ich den Fehlercode 1

    wie vermutet:

    Zitat von autoBert

    Mir ist bisher nicht bekannt, daß man ADO-DB und SQLite mischen könnte. Füge daher ... ein. Es sollte eine Fehlermeldung kommen, da die DB nicht für SQLite geöffnet wurde.

    Um welchen DB-Typ (MySQL, SQLite etc.) dreht sich dein Problem denn überhaupt?

  • SQL DELETE Befehl funktioniert nicht

    • autoBert
    • 17. Oktober 2018 um 11:21

    Mir ist bisher nicht bekannt, daß man ADO-DB und SQLite mischen könnte. Füge daher:

    Code
    If @error Then MsgBox(64, 'SQLite', 'Fehler: ' & @error)

    nach der Zeile (_SQLite_Exec ...) ein. Es sollte eine Fehlermeldung kommen, da die DB nicht für SQLite geöffnet wurde.

    Sollte es sich um eine SQLite-DB handeln empfehle ich _SQLite_* Funktionen zu arbeiten. Ansonsten suche dir einne passende UDF aus dieser Liste.

    mfg (auto)Bert

  • _StringBetween, Zeilen durchnummerieren

    • autoBert
    • 14. Oktober 2018 um 11:58

    Falls ich dein Problem (alle Dateipfade aus XML auslesen) richtig verstanden habe. würde ich so abändern:

    C
    #include <Array.au3>
    #include <File.au3>
    #include <String.au3>
    
    Global $Ini = @ScriptDir & "\myBackup.ini"    ;Pfad anpassen
    
    _KeePass($Ini)
    
    Func _KeePass($sFilepath = @UserProfileDir & "\mybackuprestore\mybackup.ini")
        Local Const $sXMLpath = @ScriptDir & "\KeePass.config.xml" ;Pfad anpassen
        Local $sFileRead, $sNewString
        Local $hFileOpen = FileOpen($sFilepath, $FO_READ)
        If $hFileOpen = -1 Then
            MsgBox($MB_SYSTEMMODAL, "", "Fehler beim lesen des Files.")
    
        Else
            $sFileRead = FileRead($hFileOpen)
    
            FileClose($hFileOpen)
        EndIf
        Local $BetweenArray = _StringBetween($sFileRead, "[KeePass]", "[Lizenzvereinbarung]")
        If Not @error Then
            ; Inhalt zwischen [KeePass] und [Lizenzvereinbarung ersetzen.
    
            $sNewString = StringReplace($sFileRead, $BetweenArray[0], @CRLF & "")
        EndIf
        FileDelete($Ini)
    
        Local $WriteIni = FileWrite($Ini, $sNewString)    ;in eine MS conforme INI-Datei sollte man so nich schreiben
    
        If FileExists($sXMLpath) Then
            ;        IniWrite($Ini, "Quellen", "39", @AppDataDir & '\KeePass')
            IniWrite($Ini, "Quellen", "39", @ScriptDir & '\KeePass')
        Else
            IniWrite($Ini, "Quellen", "39", "")
        EndIf
    
        Local $hFileOpen = FileOpen($sXMLpath, $FO_READ)
        If $hFileOpen = -1 Then
            MsgBox($MB_SYSTEMMODAL, "", "Fehler beim lesen des Files.")
            Return False
        EndIf
        Local $sFileRead = FileRead($hFileOpen)
        FileClose($hFileOpen)
        Local $BetweenArray = _StringBetween($sFileRead, "<Path>", "</Path>")    ;optionaler Parametr nicht nötig da Start und End unterschiedlich
        $aArrayUnique = _ArrayUnique($BetweenArray) ; Use default parameters to create a unique array of the first column.
        _ArraySort($aArrayUnique)        ;eigentlch unnötig
        ;_ArrayDisplay($aArrayUnique, "$aArray first column") ; Display the unique array.
        For $i = 1 To $aArrayUnique[0]
            MsgBox(64, 'Zeile ' & $i, $aArrayUnique[$i])
        Next
    EndFunc   ;==>_KeePass
    Alles anzeigen

    die Dateipfade mußt du nochmal prüfen und evtl. anpassen, denn ich verteile Daten von Tetsjripten ungern auf verschiedene Verzeichnisse.

  • [gelöst] "Desktop-Link" unter Win10

    • autoBert
    • 3. Oktober 2018 um 14:04
    Zitat von entsel

    Mit dem Link willst Du mir aber nicht sagen, ich solle auf einem fremden Rechner !!! nicht unbedingt notwendige Einstellungen verändern!??

    Notwendig wären diese schon. Würde ich a deiner Stelle trotzdem nicht machen.

    Zitat von entsel

    Der Besitzer (Ehepartner des Users) würde sich schön bedanken, würde er plötzlich andere Einstellungen auf seinem Rechner vorfinden!

    Zurecht, du kannst sie aber dahin beinflussen:

    • sich in Win 10 einzulesen
    • bzw. einen Kurs z.B.: VHS zu besuchen
  • [gelöst] "Desktop-Link" unter Win10

    • autoBert
    • 1. Oktober 2018 um 16:09

    Manuell eine Verknüpfung einer Exe auf dem Desktop erzeugen funktionniert mit dem Windows-Explorer über Rechtsklick -> Senden an.

  • Windows 10 Lizenz vorhanden?

    • autoBert
    • 27. September 2018 um 10:26
    Zitat von mep

    autoBert Ab Office 2010 kann die Lizenznummer meines Wissens nach nicht mehr ausgelesen werden. Zumindest hab ich bisher noch keine Lösung gefunden

    Schade, unter 8.1 bis Win10 Home 1609 bekam ich im Info-Center noch die Benachrichtigung, daß sowohl OS als auch MS-Office 2013 durch Hersteller aktiviert sind und die Registrieungsschlüssel im Bios abgelegt haben. Seit einer Neuinstallation von Win 10 1803 Home und MS-Office klappt dies nicht mehr und nach ca. 3 Monaten deinstalliert mir dann MS mein MS-Office. Neuinstallation von Office klappt zwar, es nervt aber.

  • Zeilen tauschen und hinzufügen

    • autoBert
    • 22. September 2018 um 22:37
    Zitat von AutoMit

    Welchen Debugger gibt es in der "nicht Standardinstallation" ?

    schau mal ins Wiki FAQ 1.5 + 1.6

    hab aber keinen davon getestet, 1.1 bis 1.4 kann ich für die Fehlersuche empfehlen.

  • Problem mit WinGetState

    • autoBert
    • 22. September 2018 um 21:43

    Also ich bekomme bei meinem Skript immer 1 Fenster zu viel heraus, auf der Suche warum habe ich es nochmal abgehandelt:

    AutoIt
    #include <array.au3>
    #include <File.au3>
    $List = WinList
    $Count = 0
    Local $List = WinList()
    For $i = $List[0][0] to 1 Step -1
        $getState = WinGetState($List[$i][1])
        If Not (BitAND($getState, 2) And $List[$i][0] <> "") Then
            _ArrayDelete($List ,$i)
        Else
            $List[$i][0] &= ' State:' & $getState
        EndIf
    Next
    $List[0][0] = UBound($List) - 1
    _FileWriteFromArray('Winlist.txt',$List)
    Alles anzeigen

    die Datei hat folgenden Inhalt:

    Code
    5|
    C:\Users\hB\AutoIt.MyAu3s\Test\a.au3 - SciTE [6 of 7] State:15|0x000C0298
    GlassWire State:7|0x0006034C
    Problem mit WinGetState - Hilfe & Unterstützung - AutoIt.de - Das deutschsprachige Forum. - Mozilla Firefox State:39|0x000705E6
    Administrator: C:\Windows\SYSTEM32\cmd.exe State:7|0x000302F0
    Program Manager State:7|0x001E06C4
    für deinen Zweck:
    AutoIt
    #include <array.au3>
    #include <File.au3>
    $List = WinList
    $Count = 0
    Local $List = WinList()
    For $i = $List[0][0] to 1 Step -1
        $getState = WinGetState($List[$i][1])
        If Not (BitAND($getState, 2) And $List[$i][0] <> "") Or BitAND($getState, 16) Then
            _ArrayDelete($List ,$i)
        Else
            $List[$i][0] &= ' State:' & $getState
        EndIf
    Next
    $List[0][0] = UBound($List) - 1
    _FileWriteFromArray('Winlist.txt',$List)
    Alles anzeigen

    in beiden Löungen mußt du noch den Program Manager abziehen.

  • Problem mit WinGetState

    • autoBert
    • 22. September 2018 um 20:14

    Du hast beim Umsetzen des Beispiels aus der Hilfe etwas überlesen, veruch es eimal so:

    Code
    $List = WinList
    $Count = 0
    Local $List = WinList()
    For $i = 1 To $List[0][0]
        $getState = WinGetState($List[$i][1])
        If BitAND($getState, 2) And $List[$i][0] <> "" Then $Count = $Count + 1
    Next
    MsgBox(0, "", $Count)
  • PID Process ID überwachen

    • autoBert
    • 21. September 2018 um 12:12

    AdlibRegister könnte das Zauberwort sein, aber solange wir nicht wissen was du vor hast ist dies auch nur :Glaskugel:

  • Mit IE.au3 auf bereits geöffnete Instanz zugreifen

    • autoBert
    • 20. September 2018 um 22:17

    Schau dir dazu _IEAttach in der Hilfe an, ist genau was du brauchst. Teste auch die Beispiele dazu. Zum Verständnis sollte das 5. am besten geeignet sein. Vorher ein paar IE-Instanzen per Hand starten und danach das Beispiel. Wie du mit RegEX nur an bestimmte kommst zeigt dir Beispiel 4, dazu solltest du auch über:

    • Window Titles and Text (Basic)
    • Window Titles and Text (Advanced)

    Bescheid wissen, denn es gilt auch bei _IEAttach sinngemäß.

    Aber warum rufst du den IE nicht direkt aus deinem Skript auf?

  • _WinAPI_ThemeSetProgress

    • autoBert
    • 20. September 2018 um 17:22
    Code
    +>17:17:02 Starting AutoIt3Wrapper v.18.708.1148.0 SciTE v.4.1.0.0   Keyboard:00000407  OS:WIN_10/  CPU:X64 OS:X64  Environment(Language:0407)  CodePage:0  utf8.auto.check:4
    +>         SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE   UserDir => C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper   SCITE_USERHOME => C:\Users\hB\AppData\Local\AutoIt v3\SciTE 
    >Running AU3Check (3.3.14.5)  from:C:\Program Files (x86)\AutoIt3  input:C:\Users\hB\Autoit.Downloadedau3s\Oscar\WinAPI_ThemeSetProgress_Example.au3
    +>17:17:04 AU3Check ended.rc:0
    >Running:(3.3.14.5):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\hB\Autoit.Downloadedau3s\Oscar\WinAPI_ThemeSetProgress_Example.au3"    
    --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop

    10001__WinAPI_ThemeSetProgress-Example.jpg

  • Happy Birtday Gunfood

    • autoBert
    • 19. September 2018 um 12:51

    möge die heutige after-work Party magisch werden, von mir die besten Wünsche und :party: :theke:

  • kann _ReplaceStringInFile komplexe Suchen durchführen ala StringRegExp(Replace) ?

    • autoBert
    • 19. September 2018 um 12:14
    Zitat von alpines

    Du verwendest eine UDF die du nicht verlinkst oder hochlädst,

    wieso? Ist doch eine Standard-UDF und wie man der Hilfe entehmen kann sind RegEx Ersetzungen nicht möglich:

    Zitat

    _ReplaceStringInFile

    Replaces substrings in a file

    #include <File.au3>

    _ReplaceStringInFile ( $sFilePath, $sSearchString, $sReplaceString [, $iCaseSensitive = 0 [, $iOccurance = 1]] )

    Parameters

    $sFilePath Full path of file to replace substrings.
    The string to evaluate.
    The replacement string.
    [optional] Flag to indicate if the operations should be case sensitive.
    $STR_NOCASESENSE (0) = not case sensitive, using the user's locale (default)
    $STR_CASESENSE (1) = case sensitive
    $STR_NOCASESENSEBASIC (2) = not case sensitive, using a basic/faster comparison
    Constants are defined in StringConstants.au3
    [optional] 0 - Only the first occurrence is replaced or 1 - all occurrences are replaced (default)
  • Windows 10 Lizenz vorhanden?

    • autoBert
    • 18. September 2018 um 10:56

    Und wie erfahre ich, auf diesem Weg, die Lizenznummer von meinem lokalen Office Paket (Office 2013)?

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™