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

Beiträge von BugFix

  • Robocopy in Func

    • BugFix
    • 20. April 2022 um 12:30
    Zitat von hpb

    Ich denke d.h. Script wurde fehlerfrei ausgeführt.

    Dazu solltest du nach dem Aufruf von Run eine Fehlerpfüfung einfügen:

    If @error Then ConsoleWrite('FEHLER')

    Funktioniert die Sicherung, wenn du sie in einem CMD-Window ausführst? - Evtl. Admin-Window?

    Auch wenn es erst mal dämlich klingt: Rufst du die Funktion copy auch auf? - Ist mir schonmal passiert: Funktion erstellt aber nicht aufgerufen. :D

    Probiere mal mit RunWait, damit du evtl. Meldungen im Fenster mitbekommst.

  • kompilierte EXE schließt sich plötzlich

    • BugFix
    • 20. April 2022 um 09:47
    Zitat von Code4Fun

    Wie kann man so einem Problem auf die Spur kommen?

    - zeilenweise Resultate in ein Log schreiben

    - Skript nicht kompilieren, sondern als Parameter mit der AutoIt3.exe aufrufen

  • Robocopy in Func

    • BugFix
    • 20. April 2022 um 09:45
    Zitat von hpb

    Für eine Lösung wäre ich dankbar.

    Dann zeig doch mal deine Funktion, meine Glaskugel ist gerade defekt. :Glaskugel:

  • Nur Files mit einem bestimmten Attrib kopieren

    • BugFix
    • 19. April 2022 um 15:56
    Zitat von hpb

    Funktioniert leider nicht - kopiert den Ordner trotzdem.

    Nein, dann hast du es falsch genutzt:

    AutoIt
    $sAttrib = 'adc'
    _NeedCopy($sAttrib) ; --> COPY
    $sAttrib = 'a'
    _NeedCopy($sAttrib) ; --> COPY
    $sAttrib = 'ad'
    _NeedCopy($sAttrib) ; --> COPY
    $sAttrib = 'adoc'
    _NeedCopy($sAttrib) ; --> NOT COPY
    
    
    Func _NeedCopy($sAttrib)
        If Not StringRegExp($sAttrib, '(?i)[ADOC]{4}') Then
            ConsoleWrite('COPY' & @CRLF)
        Else
            ConsoleWrite('NOT COPY' & @CRLF)
        EndIf
    EndFunc
    Alles anzeigen
  • Nur Files mit einem bestimmten Attrib kopieren

    • BugFix
    • 19. April 2022 um 13:28

    Da FileGetAttrib keine Werte doppelt ausgibt spielt die Reihenfolge keine Rolle und somit wäre eine RegEx-Lösung:

    AutoIt
    If Not StringRegExp(FileGetAttrib ($sPath), '(?i)[ADOC]{4}') Then ConsoleWrite('COPY' & @CRLF)
  • Nachricht an anderes Programm

    • BugFix
    • 19. April 2022 um 11:28
    Zitat von Silvermoon1

    Leider bekomme ich keine Reaktion von der GDI.exe, obwohl es den Handle erkennt.

    Ich nehme an, du wartest auf dieses Event:

    $Input1 = GUICtrlCreateInput(" ", 102, 5,100, 30)

    GUICtrlSetOnEvent(-1, "Meldung")

    ControlSetText($hWnd,"","[CLASS:Edit; INSTANCE:1]", $Text) kann m.W. kein synchrones Event auslösen. Es setzt einfach nur den Inhalt. Du müsstest schon zusätzlich eine Msg für das Control absenden.

    EDIT:

    Probier mal so

    AutoIt
    #include <SendMessage.au3>
    #include <WindowsConstants.au3>
    #include <WinAPIDlg.au3>
    
    $sClassW = '[CLASS:AutoIt v3 GUI; TITLE:Test]' ; anpassen an deine GUI
    $sClassC = '[CLASS:Edit; INSTANCE:1]'
    
    If WinExists($sClassW) Then
        $hWindow = WinGetHandle($sClassW)
    Else
        $hWindow = WinWaitActive($sClassW)
    EndIf
    
    $hCtrl = ControlGetHandle($hWindow, '', $sClassC)
    
    ControlSetText($hWindow, '', $sClassC, 'Neuer Text')
    _SendMessage($hWindow, $WM_COMMAND, _WinAPI_GetDlgCtrlID($hCtrl), 0)
    Alles anzeigen

    Aber es ist eigentlich ein Umweg, einen Wert in ein Inputfeld zu setzen und auf diese Änderung zu reagieren. Ruf doch entsprechend eine Funktion auf, die das tut, was nun folgen soll - denn die MsgBox "Meldung" wird wohl nicht das Ziel sein - oder?

    Einen Nachteil hat die von mir gezeigte Variante: Du bekommst die Nachricht doppelt. Einmal sofort ausgelöst durch _SendMessage und dann wird auch die erfolgte Message $EN_CHANGE verwertet und löst nochmal das Event aus. Das kannst du bei deinem bisherigen Code bereits nachvollziehen durch: Fokus ins Input setzen, danach auf ein anderes Fenster klicken - erst jetzt wird von deinem Fenster die Meldung $EN_CHANGE verwertet.

  • Wie ein Passwort aus Roboform bei einer rdp-Verbindung eingeben?

    • BugFix
    • 16. April 2022 um 00:13
    Zitat von nvtc

    Aber vielleicht kannst du ja erklären, welchen Unterschied es in bezug auf die Sicherheit macht, wenn ich bei Roboform manuell enter drücke oder das Skript das erledigt. Bin gespannt.

    Das Herstellen der Verbindung wird durch das *bewusste* Eingeben des Passworts (alternativ der bewussten Abfrage des PW aus dem Key-safe) UND dem Betätigen von OK/Enter initiiert.

    Das soll einfach verhindern, dass deine Katze (oder Kind, Enkel, etc. pp) durch zufälliges Betätigen die Verbindung herstellt.

    Ist m. M. n. ein schlüssiges Sicherheitskonzept.

    Zitat

    von einem übereifrigen Mod mit Gottkomplex. Hat der hier irgendwas zu sagen?

    Nimm dich mal etwas zurück. Ich denke nicht, dass dir eine Bewertung dazu zusteht. Und was im englischen Forum passiert, hat durchaus auch hier Auswirkungen. Uns trennt nur die Sprache, inhaltlich vertreten wir gleichartige Ziele.

  • NumberFormat

    • BugFix
    • 12. April 2022 um 15:57

    neue Version v 0.2

  • NumberFormat

    • BugFix
    • 9. April 2022 um 13:54

    Ich habe eine alte Funktion von mir (_FormatNumber) völlig überarbeitet und erweitert zur Nutzung mit Windows Language ID.

    Was wichtig ist, steht im Skriptkopf ausführlich beschrieben.

    EDIT 12.04.2022

    Ich habe noch etwas erweitert. Ziel ist ja, ohne mit dem zweifelsohne mächtigen StringFormat, das leider eine nicht intuitiv zu erschließende Syntax hat (und dennoch nicht alle kann, was man sich wünscht), eine Formatierungsfunktion zu besitzen, die mit einfachen und verständlichen Formatierungsmasken zum gewünschten Ergebnis führt. Intern nutze ich zwar intensiv StringFormat aber für alle Funktionen geht das nicht. Z.B. kann in meiner Funktion statt Vor-Null auch jedes beliebige Zeichen zum Auffüllen verwendet werden (außer bei Hex-Zahlen, dort gibt es kein Auffüllen), das bietet StringFormat nicht. Zudem ist StringFormat bei Hex-Zahlen auf 32bit limitiert, da wird erbarmungslos auf Länge 8 eingekürzt.

    Jetzt kann formatiert werden als: Integer / Float / Exponentialdarstellung / Hexadezimaldarstellung.

    Zusätzlich kann mit anghängten Leerzeichen formatiert werden, das ermöglicht eine spaltengenaue Ausgabe unterschiedlicher Formate.

    Bsp.

    Bsp.
    AutoIt
    $a = 12, $b = 1.25, $c = 2480, $d = 0.75
    $a1 = 125, $b1 = 7.89, $c1 = 3278, $d1 = 0.12
    
    ; Ausgabe soll untereinander an der Einerstelle ausgerichtet erfolgen, Füllzeichen soll ' ' sein.
    ; UND
    ; alle Ausgaben sollen gleich lang sein um die nächste Spalte sauber anzuhängen
    
    ; Die längste Zahl hat 4 Stellen VK, für NK brauche ich 2.
    ; Für die anzuhängenden Spaces bei den Ganzzahlen ist die Länge: NK+1 (Dezimaltrenner)
    ; So lässt sich übersichtlich in Tabbellenform ausgeben:
    ConsoleWrite(_NumberFormat($a, 'N4s3', ' ') & ' | ' & _NumberFormat($a1, 'N4s3', ' ') & ' | ' & @CRLF)
    ConsoleWrite(_NumberFormat($b, 'N4.2', ' ') & ' | ' & _NumberFormat($b1, 'N4.2', ' ') & ' | ' & @CRLF)
    ConsoleWrite(_NumberFormat($c, 'N4s3', ' ') & ' | ' & _NumberFormat($c1, 'N4s3', ' ') & ' | ' & @CRLF)
    ConsoleWrite(_NumberFormat($d, 'N4.2', ' ') & ' | ' & _NumberFormat($d1, 'N4.2', ' ') & ' | ' & @CRLF)
    
    #cs
    Ausgabe:
    
      12    |  125    | 
       1,25 |    7,89 | 
    2480    | 3278    | 
       0,75 |    0,12 | 
       
    #ce
    Alles anzeigen

    Für die Angabe der Maske ergeben sich daraus folgende Möglichkeiten:

    Eine Unterscheidung von Klein-/Großschreibung findet nur für Hex-Zahlen statt. Dort wird damit geregelt, ob Klein- oder Großbuchstaben in der Hex-Zahl Verwendung finden. Alle anderen Buchstaben können beliebig groß oder klein übergeben werden.

    MASKE allgemein:
    [Buchstabe] [opt. Zahl] [opt. Dezimalpunkt & Zahl] [opt. Folgespaces]

    N3 Zahl mit Mindestlänge 3, bei Bedarf wird mit (beliebigem) Füllzeichen aufgefüllt, Standard: '0'
    N3.2Zahl mit min. 3 VK-Stellen und max. 2 NK-Stellen (wenn zu kurz wird mit '0' gefüllt, bei zu lang wird gerundet
    N3s3Wie N3 und zusätzlich 3 Leerzeichen angehängt. Dadurch sind 'N3s3' und 'N3.2' exakt gleich lang
    N.2VK-Stellen, wie übergeben. NK-Stellen gefüllt/gerundet
    EExponentialschreibweise [-]1,234567E[+-]012
    E3Die Längenangabe bezieht sich auf die VK-Stellen. Da ein Vorzeichen möglich ist, ist die kleinste Länge: 2. Als Standard wird mit Leerzeichen befüllt.
    HHexadezimalzahl in Schreibweise '123ABF', Länge 8 / 16 (wird an den Zahlenbereich angepasst)
    hHexadezimalzahl in Schreibweise '123abf', Länge 8 / 16 (wird an den Zahlenbereich angepasst)
    Hx / hxwie vorab aber Ausgabe mit Präfix '0x'
    H8 / hx4'123ABCEF' / '0x12ab' - Zahlenangabe zum Definieren der Länge. Wenn kürzer als die Zahl, wird diese von links abgeschnitten
    Hx4S4'0x12AB ' - Anhängen von Leerzeichen
    AutoIt
    ;-- TIME_STAMP   2022-04-12 15:14:01   v 0.2
    
    
    #cs
        • Formatierung von Zahlenwerten mit/ohne Angabe Language Code. Ohne Angabe wird UserDefaultLanguage verwendet.
        • Angelehnt an Formatierungsmasken, wie sie z.B. in Report Generatoren verwendet werden.
        • Die Länge der verwendeten Gruppierungszeichen und evtl. Vorzeichen werden auf die Formatierungslänge angerechnet!
        • Längenangaben sind im
          Vorkommabereich :  minimale Länge, bei Bedarf wird mit Füllzeichen (Standard '0') aufgefüllt
          Nachkommabereich:  maximale Länge, bei Bedarf wird mit '0' aufgefüllt oder auf Länge gerundet
        • Bei Kommazahlen mit Ganzzahlmaske wird der Nachkommateil ohne Rundung abgeschnitten.
    
        Beispiele (deutsches / englisches System: 0x0407 / 0x0009)
    
        ZAHL        MASKE   FÜLLZEICHEN     LCID    GROUPING    AUSGABE
        ------------------------------------------------------------------
        1234.56      N6        '0'          0x0407    True      01.234
        1234.56      N6        '0'          0x0407    False     001234
        1234.56      N6.3      '0'          0x0407    True      01.234,560
        1234.56      N6.3      '0'          0x0407    False     001234,560
        34.56        N6.3      '#'          0x0407    False     ##1234,560
        1234.56      N6.1      '0'          0x0407    True      01.234,6
        1234.56      N6.1      '0'          0x0407    False     001234,6
        1234.56      N.3       '0'          0x0407    True      1.234,560
        1234.56      N.3       '0'          0x0407    False     1234,560
        1            N3        ' '          0x0407    False       1
        11           N3        ' '          0x0407    False      11
        100          N3        ' '          0x0407    False     100
        123          E         ' '          0x0407    False     1,230000E+002
        123          E3        ' '          0x0407    False      1,230000E+002
        123          H         ' '          0x0407    False     0000007B
        123          h         ' '          0x0407    False     0000007b
        123          Hx        ' '          0x0407    False     0x0000007B
        123          hx        ' '          0x0407    False     0x0000007b
        123          H6        ' '          0x0407    False     00007B
        123          h6        ' '          0x0407    False     00007b
        123          Hx6       ' '          0x0407    False     0x00007B
        123          hx6       ' '          0x0407    False     0x00007b
    
        -1234.56     N6        '0'          0x0407    True      -1.234
        -1234.56     N6        '0'          0x0407    False     -01234
        -1234.56     N6.3      '0'          0x0407    True      -1.235,560
        -1234.56     N6.3      '0'          0x0407    False     -01234,560
        -1234.56     N.3       '0'          0x0407    True      -1.234,560
        -1234.56     N.3       '0'          0x0407    False     -1234,560
        -1           N3        ' '          0x0407    False      -1
        -11          N3        ' '          0x0407    False     -11
        -100         N3        ' '          0x0407    False     -100
        ------------------------------------------------------------------
        1234.56      N6        '0'          0x0009    True      01,234
        1234.56      N6        '0'          0x0009    False     001234
        1234.56      N6.3      '0'          0x0009    True      01,234.560
        1234.56      N6.3      '0'          0x0009    False     001234.560
        1234.56      N6.1      '0'          0x0009    True      01,234.6
        1234.56      N6.1      '0'          0x0009    False     001234.6
        1234.56      N.3       '0'          0x0009    True      1,234.560
        1234.56      N.3       '0'          0x0009    False     1234.560
        1            N3        ' '          0x0009    False       1
        11           N3        ' '          0x0009    False      11
        100          N3        ' '          0x0009    False     100
    
        -1234.56     N6        '0'          0x0009    True      -1,234
        -1234.56     N6        '0'          0x0009    False     -01234
        -1234.56     N6.3      '0'          0x0009    True      -1,235.560
        -1234.56     N6.3      '0'          0x0009    False     -01234.560
        -1234.56     N.3       '0'          0x0009    True      -1,234.560
        -1234.56     N.3       '0'          0x0009    False     -1234.560
        -1           N3        ' '          0x0009    False      -1
        -11          N3        ' '          0x0009    False     -11
        -100         N3        ' '          0x0009    False     -100
    
    #ce
    
    
    ; v 0.2     Fixed   Grouping by one leading '0' ('0123' --> '.123')
    ;           Added   Scientific notation (Mask 'E'). Default length is 2 (possible sign & pre-decimal value)
    ;           Added   Hexadecimal notation (Mask 'H'/'h', 'Hx'/'hx').
    ;           Added   Right side addition of spaces by adding 'sn' ('s3', 's6'..) to the mask.
    ;                   Facilitates the alignment of integers and floating point numbers in a column.
    
    
    ; #FUNCTION# =======================================================================================
    ; Name ..........: NumberFormat
    ; Description ...: Formatierung von Zahlenwerten (mit und ohne Vorzeichen, Integer od. Float)
    ; Parameter(s)...: $_vString    der zu formatierende Zahlenwert
    ; ...............: $_sMask      Maske zum Bestimmen des Ausgabestrings, Bsp.:
    ;                                 Für 'N'/'E'/'S' kann ebenso 'n'/'e'/'s' verwendet werden, nur bei 'H'/'h' ist Groß-/Kleinschreibung zu beachten.
    ;                                 N3     Ganzzahl min. 3 Stellen, Auffüllen mit $_sFill. Wenn Float übergeben, keine Rundung
    ;                                 N3.2   Float min. 3 Vorkommastellen (Auffüllen mit $_sFill), 2 Nachkommastellen (Ergänzen mit Nullen)
    ;                                 N3S3   Ganzzahl min. 3 Stellen, Auffüllen mit $_sFill. Anhängen von 3 Leerzeichen (s3). Dadurch die Ganzzahl mit einer 'N3.2' in einer Spalte
    ;                                 N.3    Float, Vorkommastellen wie übergeben, 3 Nachkommastellen (Ergänzen mit Nullen bzw. Runden auf Anzahl NK)
    ;                                 E      Exponentialschreibweise: [-]1,234567E[+-]012
    ;                                 E3     Anzahl der Zeichen vor dem Komma (inkl. Vorzeichen). Minimum ist 2, auffüllen als Standard mit Leerzeichen.
    ;                                        '0' kann hier nicht als Füllzeichen verwendet werden, aber jedes andere übergebenee Zeichen.
    ;                                 H      Hexadezimalzahl in Schreibweise '123ABF', Länge 8 / 16 (wird an den Zahlenbereich angepasst)
    ;                                 h      Hexadezimalzahl in Schreibweise '123abf', Länge 8 / 16 (wird an den Zahlenbereich angepasst)
    ;                                 Hx/hx  wie vorab aber Ausgabe mit Präfix '0x'
    ;                                 H8/hx4 '123ABCEF' / '0x12ab' - Zahlenangabe zum Definieren der Länge. Wenn kürzer als die Zahl, wird diese von links abgeschnitten
    ;                                 Hx4S4  '0x12AB    ' - Anhängen von Leerzeichen
    ; ....[optional].: $_sFill      Auffüllzeichen (Default: '0')
    ; ....[optional].: $_LCID       Windows Language Code Identifier (Default: ''=UserDefaultLCID), 'Null'=LocaleInfo wird nicht verwendet
    ; ...............:              https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f
    ; ...............:              Wird eine LCID übergebn, die im Release des Rechners nicht verfügbar ist, wird stattdessen "UserLocale" verwendet.
    ; ....[optional].: $_bGrouping  Gruppieren der Ausgabe (Default: False) - LCID muss dann <> Null sein!
    ; Return values .: Success      Der formatierte Zahlenwert
    ; ...............: Failure      Originalstring (Ungültige Maske)
    ; Author ........: BugFix
    ; Remarks .......: Bei negativen Zahlenwerten wird das Vorzeichen mit zur Anzahl der Vorkomma/Stellen eingerechnet
    ; ==================================================================================================
    Func _NumberFormat($_vString, $_sMask, $_sFill='0', $_LCID='', $_bGrouping=False)
        Local $g, $f, $l, $p, $aM, $sFill = '', $sResult, $sSign = '', $sAdd = ''
        Local $nN = StringRegExp($_sMask, '^[NEneHh](\d*)', 1)[0]
        If $_sFill <> '0' And $nN <> '' Then
            $p = StringInStr($_vString, '.')
            $l = $p = 0 ? StringLen($_vString) : $p -1
            Local $nF = $nN -$l
            If $nF > 0 Then
                For $i = 1 To $nF
                    $sFill &= $_sFill
                Next
            EndIf
        EndIf
        Local $aAdd = StringRegExp($_sMask, '[sS](\d+)', 1)
        If Not @error Then
            For $i = 1 To $aAdd[0]
                $sAdd &= ' '
            Next
        EndIf
        Switch StringLeft($_sMask, 1)
            Case 'N'
                If StringInStr($_sMask, '.') Then
                    $aM = StringRegExp($_sMask, '(\d+)(\.\d+)', 3)  ; [VK, .NK]
                    If @error Then Return _NumberFormat($_vString, StringReplace($_sMask, 'N', 'N1') , $_sFill, $_LCID, $_bGrouping)
                    $g = Int($_vString)
                    $f = Abs($_vString) - Abs($g)
                    $f = StringFormat(StringFormat('%%%s%sf', $aM[1]), $f)
                    $g = $g + Floor($f)
                    If $_sFill = '0' Then
                        $g = StringFormat(StringFormat('%%%s%dd', $_sFill, $aM[0]), $g)
                        $sResult = StringFormat('%s.%s', $g, StringRegExp($f, '\.(\d+)', 1)[0])
                    Else
                        $sResult = StringFormat('%s%s.%s', $sFill, $g, StringRegExp($f, '\.(\d+)', 1)[0])
                    EndIf
                Else
                    Local $nN = StringRegExp($_sMask, '^[Nn](\d+)', 1)[0]
                    If $_sFill = '0' Then
                        $sResult = StringFormat(StringFormat('%%%s%dd', $_sFill, $nN), $_vString)
                    Else
                        $sResult = StringFormat('%s%s', $sFill, $_vString)
                    EndIf
                EndIf
            Case 'E'
                $l = 2    ; VK-Länge definiert ? - Auffüllen mit $sFill. Minimum: 2 (evtl. Vorzeichen & VK)
                If StringLen($_sMask) > 1 Then $l = StringRegExp($_sMask, '[Ee](\d+)', 1)[0]
                If $l < 2 Then $l = 2
                $sResult = StringFormat(StringFormat('%%%ds', 12+$l), StringFormat('%E', $_vString))
                If $sFill <> '' Then $sResult = StringRegExpReplace($sResult, '^\s+', $sFill)
            Case 'H'
                Local $aMask = StringRegExp($_sMask, '([hH])([xX]*)(\d*)', 3)
                If $aMask[0] == 'H' Then
                    Select
                        Case $aMask[1] = '' And $aMask[2] = ''
                            $sResult = StringUpper(Hex($_vString))
                        Case $aMask[1] = 'x' And $aMask[2] = ''
                            $sResult = '0x' & StringUpper(Hex($_vString))
                        Case $aMask[1] = '' And $aMask[2] <> ''
                            $sResult = StringUpper(Hex($_vString, $aMask[2]))
                        Case $aMask[1] = 'x' And $aMask[2] <> ''
                            $sResult = '0x' & StringUpper(Hex($_vString, $aMask[2]))
                    EndSelect
                Else
                    Select
                        Case $aMask[1] = '' And $aMask[2] = ''
                            $sResult = StringLower(Hex($_vString))
                        Case $aMask[1] = 'x' And $aMask[2] = ''
                            $sResult = '0x' & StringLower(Hex($_vString))
                        Case $aMask[1] = '' And $aMask[2] <> ''
                            $sResult = StringLower(Hex($_vString, $aMask[2]))
                        Case $aMask[1] = 'x' And $aMask[2] <> ''
                            $sResult = '0x' & StringLower(Hex($_vString, $aMask[2]))
                    EndSelect
                EndIf
            Case Else
                $sResult = $_vString
        EndSwitch
        If $_LCID <> Null Then
            Local $sDec = __GetLocaleInfo(0xE, $_LCID, True)
            If @error Then  ; use UserLocale
                $_LCID = ''
                $sDec = __GetLocaleInfo(0xE, $_LCID)
            EndIf
            $sResult = StringReplace($sResult, '.', $sDec)
            If StringLeft($_sMask, 1) = 'E' Then Return $sResult & $sAdd
            If $_bGrouping Then
                Local $sThousand = __GetLocaleInfo(0xF, $_LCID, True)
                Local $iGrouping = StringRegExp(__GetLocaleInfo(0x10, $_LCID, True), '(\d+)', 1)[0]
                Local $aR = StringRegExp($sResult, '([^\' & $sDec & ']+)(.*)', 3), $sTmp = '', $iTrim = 0
                While StringRegExp($aR[0], '(\d{' & $iGrouping +1 & '})$')
                    If StringTrimRight($aR[0], $iGrouping) = '0' Then ExitLoop
                    $sTmp = $sThousand & StringRight($aR[0], $iGrouping) & $sTmp
                    $aR[0] = StringTrimRight($aR[0], $iGrouping)
                    $iTrim += 1
                WEnd
                $sResult = $aR[0] & $sTmp
                If UBound($aR) > 1 Then $sResult &= $aR[1]
                If $iTrim > 0 Then
                    If StringLeft($sResult, 1) = '-' Then
                        $sSign = '-'
                        $sResult = StringTrimLeft($sResult, 1)
                    EndIf
                EndIf
                While $iTrim > 0
                    If StringLeft($sResult, 1) = '0' Then
                        $sResult = StringTrimLeft($sResult, 1)
                        $iTrim -= 1
                    Else
                        ExitLoop
                    EndIf
                WEnd
                $sResult = $sSign & $sResult
            EndIf
        EndIf
        Return $sResult & $sAdd
    EndFunc  ;==>_NumberFormat
    
    
    
    ; #FUNCTION# =======================================================================================
    ; Name ..........: _GetLocaleInfo
    ; Description ...: Retrieves information about a locale specified by identifier.
    ; Parameter(s)...: $_LCType         https://docs.microsoft.com/en-us/windows/win32/intl/locale-information-constants
    ; ....[optional].: $_LCID           Windows Language Code Identifier (Default: '' = GetUserDefaultLCID)
    ; ....[optional].: $_bErrEmptyRes   Treat empty result as error (Default: False)
    ; Return values .: Success          Value for LCType and LCID
    ; ...............: Failure          empty string, @error = 1 (only if $_bErrEmptyRes=True)
    ; Author ........: BugFix
    ; ==================================================================================================
    Func __GetLocaleInfo($_LCType, $_LCID='', $_bErrEmptyRes=True)
        Local $ret, $sBuffer, $iLen, $iErr
        Local $hDll = DllOpen("kernel32.dll")
        If $_LCID = '' Then $_LCID = DllCall($hDll, 'long', 'GetUserDefaultLCID')[0]
        $ret = DllCall($hDll, 'long', 'GetLocaleInfo', 'long', $_LCID, 'long', $_LCType, 'str', $sBuffer, 'long', 0)
        $iLen = $ret[0]
        $ret = DllCall($hDll, 'long', 'GetLocaleInfo', 'long', $_LCID, 'long', $_LCType, 'str', $sBuffer, 'long', $iLen)
        DllClose($hDll)
        $iErr = ($_bErrEmptyRes = True And $ret[3] = '') ? 1 : 0
        Return SetError($iErr, 0, $ret[3])
    EndFunc  ;==>__GetLocaleInfo
    Alles anzeigen

    DL bisher: 9

    Dateien

    NumberFormat.au3 15,7 kB – 188 Downloads
  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.5 2021.12.22)

    • BugFix
    • 2. April 2022 um 11:57
    Zitat von Tweaky

    Hat jemand eine Alternative?

    ftp.ccc.de

    cdn.media.ccc.de

    ftp.halifax.rwth-aachen.de

  • Frage zu (Frozen) AutoIt v3 Windows Info 64-Bit Postion und Size

    • BugFix
    • 29. März 2022 um 11:54
    Zitat von Code4Fun

    Kann mir das bitte mal jemand erklären, was hier nicht ganz passt?

    Die Werte sind imho korrekt. Ein maximiertes Fenster ist mit dem Fensterrand nicht an 0,0 positioniert. Es wird, wenn ich nicht irre, immer der Fensterrand aus dem sichtbaren Bereich geschoben. Daraus ergeben sich diese Differenzen.

  • If-Then // ​If-Then // ​If-Then // ​If-Then //

    • BugFix
    • 29. März 2022 um 11:44
    Zitat von Alina
    AutoIt
    If $_Startzahl = 1 Then
         block_1()
         Exit 
    EndIf

    Zur besseren Übersicht packe die block-Funktionen in eine gemeinsame Funktion

    AutoIt
    Func block_n($n)
        Switch $n
            Case 1
                ConsoleWrite($_Startzahl & " " & "Block 1" & @CRLF)
            Case 2
                ConsoleWrite($_Startzahl & " " & "Block 2" & @CRLF) ; <--- nur zum testen
            Case 3
                ConsoleWrite($_Startzahl & " " & "Block 3" & @CRLF) ; <--- nur zum testen
            Case 4
                ConsoleWrite($_Startzahl & " " & "Block 4" & @CRLF) ; <--- nur zum testen
        EndSwitch
    EndFunc
    Alles anzeigen

    und übergib per Parameter, welche Operation durchzuführen ist.

    Anhand deiner Bedingungen ist ersichtlich, dass du deine existierenden Variablen als Auswahlparameter nutzen kannst (in der Abbildung jeweils rot markiert):

    tabelle_block.PNG

    Du kannst noch weiter vereinfachen. Alle Operationen der Startzahlen 9 und 10 haben den identischen Ablauf:

    - Variable $_n_c bestimmt den Block

    - anschließend wird dieser Variable derselbe Wert in Abhängigkeit von _c zugewiesen

    Somit kannst du eine Funktion mit (ByRef $_n_c) aufrufen, anhand des Wertes des Parameters den Block ausführen und dann der Variablen selbst den neuen Wert zuweisen.

    Was ich aber nicht verstehe - wozu in jedem If-Statement das Exit? Damit kann doch niemals ein Ablauf erzeugt werden.

  • If-Then // ​If-Then // ​If-Then // ​If-Then //

    • BugFix
    • 28. März 2022 um 11:27
    Zitat von Alina

    Warum das von Dir geht und meine Versuche nicht, das werde ich heute ergründen (versuchen nachzuvollziehen).

    Ich vermute mal, weil du es nicht mit Execute() ausgeführt hast... ;)

    Wobei Execute immer ein "Geschmäckle" hat und ich es nur verwende, wenn keine Alternative besteht. Ich würde lieber eine Funktion dafür verwenden:

    AutoIt
    $Zahl_1 = 10
    $Zahl_2 = 7
    
    $Operator = '+'
    ConsoleWrite(_Operate($Zahl_1, $Operator, $Zahl_2) & @CRLF)
    
    $Operator = '-'
    ConsoleWrite(_Operate($Zahl_1, $Operator, $Zahl_2) & @CRLF)
    
    Func _Operate($_p1, $_sOP, $_p2)
        Switch $_sOP
            Case '+'
                Return $_p1 + $_p2
            Case '-'
                Return $_p1 - $_p2
        EndSwitch
    EndFunc
    Alles anzeigen
  • Rätzelecke No. 001

    • BugFix
    • 25. März 2022 um 11:51
    Zitat von Yjuq

    Hält halt immernoch die Frage offen wie man auf a, b und c zurückrechnet :o

    Das weiß wohl nur die Lina. :rofl:

    Habs jetzt nicht ausprobiert, vermute aber, dass das einer dieser Jahrmarktstricks ist. Es geht dabei niemals um die Zahlen, die genannt werden, die sind Beiwerk um deinen Geist vom Wesentlichen abzulenken. Und das sind die Rechenoperationen.

    Kennt ihr doch sicher:

    Ich errate dein Alter

    - Nimm dein Alter *10

    - addiere 5 dazu etc. pp.

    Am Ende wird dir das korrekte Alter gesagt, weil du ein x-Faches +/- vorgegebener Rechenoperationen als Wert dem Fragesteller gesagt hast. Der braucht nicht mal die Rechenoperationen rückwärts durchzuführen, da diese auf der Kurzform einer Rechnung ala x=y+125 oder so basiert. x ist dem Akteur bekannt und y ist das Ergebnis der aufwändigen Rechenoperationen. :D

    Und obwohl der Trick selbst recht billig ist, ist es weniger simpel ihm mathematisch beizukommen. Das ist vergleichbar, als ob man eine Folge irgendwelcher Zahlen hat und muss daraus die Formel bilden, nach der sie erstellt wurden. Je kürzer die Folge, desto größer die Wahrscheinlichkeit, dass es mehrere Formeln gibt, die in diesem Bereich zum selben Ergebnis führen. Je länger die Folge, desto schwerer ist es die Formel zu bestimmen.

  • IE Navigate und IEGetObjByID beschleunigen oder Alternative?

    • BugFix
    • 22. März 2022 um 11:38
    Zitat von water

    NB: Im Post #14 spricht Leaves von 14500 Abfragen (4500 war ein Tippfehler)

    Erst recht ein Argument für eine Datenbank orientierte Lösung. ;)

  • IE Navigate und IEGetObjByID beschleunigen oder Alternative?

    • BugFix
    • 22. März 2022 um 09:36

    Wenn ich das richtig verstanden habe:

    - es existiert eine Liste mit den Abfragen, die du vornehmen möchtest als csv-Datei

    - du iterierst durch die Datei, selektierst den abzufragenden Wert und rufst damit eine Web-Site auf

    - du wertest den Seiteninhalt aus und schreibst die Ergebnisse in dieselbe csv-Datei zurück

    1. Du hast die Daten in der csv in einer Form gespeichert, die du nur durch Zerlegen für eine Abfrage nutzen kannst

    2. Du hast > 4000 Datensätze - die du Zerlegen und beim Schreiben neu Erstellen musst - das frisst Zeit

    All das schreit förmlich nach der Verwendung einer Datenbank. Ob du MySQL oder SQLite verwendest ist da eher Geschmackssache, da du allein darauf zugreifst, ist SQLite hier völlig ausreichend.

    Vorteile der Datenbank:

    - Nur 1 Lesezugriff beim Laden der DB

    - Nur ein Schreibzugriff beim Schließen der DB

    - Alles andere sind direkte Speicheroperationen

    3. Ich würde zumindest versuchen, ob ich mit der direkten Auswertung des gesamten html der geladenen Seite mittels StringRegEx nicht schneller bin als über die IE-Operationen. D.h. ich würde komplett auf die _IE-Funktionen verzichten, stattdessen die Seiten mit InetRead auslesen (BinaryToString() nicht vergessen).

    4. Eine weitere Überlegung wäre das Splitten auf z.B. 4 Teile der Datensätze. Zur Abfrage startest du dann parallel 4 kompilierte Skripts.

    EDIT:

    Falls die Daten in Tabellen vorliegen ist es evtl. eine Möglichkeit mittels Excel Webanfragen (<Daten> <Externe Daten>) zu erstellen. Das machst du einmal für jede Tabelle und brauchst dann nur noch aktualisieren (mit VBA im Hintergrund lässt sich das auch automatisieren). Selbst wenn jede Abfrage eine Tabelle ist und pro Aktualisierung 1s draufgeht, wäre die Gesamtzeit mit 1 1/4 Stunden immer noch deutlich schneller als deine bisherige Abfrage.

  • SciTE - vereinfachten UDF-Header aus Funktionsdeklaration (aktuelle Zeile) erstellen

    • BugFix
    • 21. März 2022 um 16:50

    Nach einem Jahrzehnt habe ich eine neue Version erstellt. #Post 1

  • Funktionsparameter als Const ByRef

    • BugFix
    • 21. März 2022 um 12:52
    Zitat von AspirinJunkie

    Kurz: Sorgt dafür, dass sich außerhalb der Funktion die übergebene Variable nicht ändert und bleibt dennoch performant und Speicherfreundlich.

    Also ist (etwas provokant gesagt) der Sinn dahinter, der Schutz vor eigener Dummheit. Denn wenn ich die Variable an eine Funktion z.B. nur ByRef übergebe, liegt es doch an mir aufzupassen, dass ich sie nicht versehentlich manipuliere, wenn das nicht gewollt ist.

    Einen programmtechnischen Vorteil (ausser dem vorgenannten Aspekt) bietet es also nicht.

  • Funktionsparameter als Const ByRef

    • BugFix
    • 21. März 2022 um 11:40

    In einigen Skripten findet man Funktionsparameter als Const $param oder Const ByRef $param definiert.

    Welchen Vorteil bringt das - wenn überhaupt?

    Eine ByRef-Definition ist verständlich, dort wird dann mit dem Original gearbeitet, das Kopieren entfällt.

    Was aber bringt eine Const-Definition? Und da Const nicht veränderbar sind, ist doch eine Const ohne ByRef eher sinnlos?

    Also wenn mich mal jemand erleuchten könnte... 8o

    Ich habe in den vergangenen 16 Jahren bei Bedarf ByRef genutzt und mir hat bisher nichts anderes gefehlt.

  • strg-Taste bleibt gedrückt

    • BugFix
    • 20. März 2022 um 13:18
    Zitat von Tweaky

    auch an ein bestimmtes Fenster zu schicken

    Probier mal, ob dich _SendMessage() weiter bringt.

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™