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

Beiträge von mumpel

  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • mumpel
    • 29. Juni 2023 um 20:18
    Zitat von MiX-MoX

    Body eines docx

    Was meinst Du damit?

  • Funktionsnamen mit Unterstrich

    • mumpel
    • 28. Juni 2023 um 15:44

    Am Ende ist es wichtig, dass auch andere den Code verstehen.

  • Funktionsnamen mit Unterstrich

    • mumpel
    • 28. Juni 2023 um 15:28

    Für die Zukunft werde ich mir auch in AutoIt das selbe angewöhnen wie in VBA. Nämlich sprechende Namen mit dem Kürzel des Typs davor (var für Variant, str für String, int für Integer, lng für Long, obj für Object etc. pp.). Z.B. $strEditbox1 = für den Inhalt der ersten Textbox.

  • Funktionsnamen mit Unterstrich

    • mumpel
    • 28. Juni 2023 um 12:25

    Ich komme aus VBA. Bei großen Projekten habe ich jede Funktion/Prozedur in je ein eigenes Modul gepackt. Jedes Modul hat einen sprechenden Namen. Heißt die UDF/Prozedur "Makro1", bekommt das Modul den Namen "mdlMakro1". Dadurch können natürlich auch mal 30 Module und mehr im Projekt sein. Das ist einfacher als in AutoIt. ;)

  • Funktionsnamen mit Unterstrich

    • mumpel
    • 27. Juni 2023 um 15:01

    Für mich ist der Unterstrich gewöhnungsbedürftig.

  • Funktionsnamen mit Unterstrich

    • mumpel
    • 27. Juni 2023 um 13:22

    Danke! Na dann muss ich den nicht zwingend verwenden. In VBA macht man das ja auch nicht. ;)

  • Funktionsnamen mit Unterstrich

    • mumpel
    • 27. Juni 2023 um 13:05

    Hallo!

    Eine kleine Verständnisfrage. Manche Programmierer beginnen Funktionsnamen mit einem Unterstrich (Func _Funktionsname). Hat der Unterstrich eine wichtige Bedeutung oder einen Grund? Ich kenne sowas nicht.

    Gruß, René

  • Base32 - Finde den Fehler nicht

    • mumpel
    • 23. Juni 2023 um 18:00

    Kleine Verbesserung. Jetzt kann ein Zufallscode und ein Zufallskennwort generiert werden. Jeweils 25-stellig mit Großbuchstaben und Zahlen.

    Dateien

    2FA-QR-Code erstellen.au3 23,3 kB – 265 Downloads
  • Base32 - Finde den Fehler nicht

    • mumpel
    • 23. Juni 2023 um 09:32
    Zitat von Musashi

    Poste den Quellcode doch bitte auch hier im Thread. Dann kann sich jeder Interessierte die .exe-Datei(en) selbst kompilieren, ohne sie erst von Deine Website herunterladen zu müssen.

    Auch keine schlechte Idee (Obwohl ich auf meiner HP die Download-Zahlen besser unter Kontrolle habe. 😉 ). Vielleicht kann ja jemand nicht mehr benötigte Dinge aus den Dateien entfernen, so dass es hinterher trotzdem noch läuft. Derzeit habe ich nicht mehr benötigte Dinge über den Rand hinaus verschoben, da ich feste Werte möchte.

    Dateien

    qrgen.zip 285,42 kB – 317 Downloads
  • Base32 - Finde den Fehler nicht

    • mumpel
    • 23. Juni 2023 um 00:51

    Jetzt ist mein Projekt fertig. http://www.rholtz-office.de/counters/getfile.php?id=914

    Zum Test die "2FA-QR-Code erstellen.exe" aufrufen.

    1. Zuerst wählt man den Pfad, in dem der QR-Code gepeichert wird.

    2. Dann gibt man den Dateinamen für den QR-Code an.

    3. Jetzt gibt man einen Code aus Zahlen und Großbuchstaben an.

    4. Mit Klick auf "Secret berechnen" wird der Code in Base32 umgewandelt.

    5. Jetzt gibt man den Herausgeber (Issuer) und einen Kontonamen an. Der Kontoname wird später im Authenticator angezeigt.

    6. Mit Klick auf "Code erstellen" wird der QR-Code generiert (PNG-Datei), den man dann im Authenticator scannt.

    Jetzt kann man auch gleich noch den Secret verschlüsseln. Dazu gibt man zuerst ein Verschlüsselungskennwort an. Mit Klick auf "Verschlüsseln" wird das Verschlüsselungskennwort gehasht (AES512), und mit diesem Hash der Secret verschlüsselt (AES256). Zusätzlich wird auch gleich der passende Quellcode in die Zwischenablage geschrieben, den man dann in sein Projekt übernehmen kann.

    Das Testprojekt enthält auch einen Test für das Einmalkennwort. Hierfür könnt ihr den QR-Code im Authenticator scannen und in "TOTP_Test2.exe" testen (Um gut zu testen, auch mal falsche Codes eingeben). Der Quellcode dafür ist enthalten.

    Sollten bei euch Fehlermeldungen angezeigt werden, dann bitte hier reinschreiben.

  • Base32 - Finde den Fehler nicht

    • mumpel
    • 22. Juni 2023 um 18:15
    Zitat von Musashi

    Umgekehrt sollte man Deklarationen mittels Global innerhalb von Funktionen aber tunlichst vermeiden.

    "Global" ist vergleichbar mit "Public" in VBA. Das sind beides globale Variablen, die Projektweit verfügbar sind, egal in welchem Modul sie stehen (Eine "au3" in AutoIt ist das was ein allgemeines Modul in VBA ist).

  • iniRead Problem

    • mumpel
    • 22. Juni 2023 um 16:04
    Zitat von Moombas

    Naja die Fehlermeldung zeigt ja schon auf die entsprechende Zeile...

    Aber trotzdem übersieht man manchmal solche Kleinigkeiten. ;)

    Ich muss nauch noch andere Scripte bereinigen (auch aus dem Internet). Das Problem auch hier, dass die Meldung nur von der Exe ausgegeben wird. Aber nur sporatisch, und das verstehe ich gleich garnicht.

  • Base32 - Finde den Fehler nicht

    • mumpel
    • 22. Juni 2023 um 12:30

    Der Fehler ist inzwischen bereinigt.

  • Base32 - Finde den Fehler nicht

    • mumpel
    • 22. Juni 2023 um 10:37
    Zitat von Musashi

    Benötigst Du wirklich eine CUI und .exe mit Übergabe von Kommandozeilenparametern usw. ?

    Nein, das brauche ich nicht. Danke! für die Bereinigung.

  • Base32 - Finde den Fehler nicht

    • mumpel
    • 21. Juni 2023 um 22:55
    Zitat von MojoeB

    du hast immer sehr gute Ansätze

    Auch nur aus dem Internet.


    Zitat von MojoeB

    aber du programmierst noch mehr sprachen oder

    Nur in VBA. In AutoIt bin ich Laie. Aber ich habe, durch jahrelange Erfahrungen in VBA, ein Codeverständis entwickelt, auch für andere Sprachen (AutoIt, HTML, PHP, Javascript, CSS3).

  • Base32 - Finde den Fehler nicht

    • mumpel
    • 21. Juni 2023 um 21:24

    Hallo!

    Ich suche eine Möglichkeit, einen Base32 (für 2FA) zu erstellen. Ich habe auch etwas gefunden (https://www.autoitscript.com/forum/topic/59…2-encode-decode). Nur wirft die Exe einen Fehler aus ("Eine Variable ist nicht deklariert"). Nur finde ich den Fehler nicht, da der Script-Editor keinen Scriptfehler findet. Gibt es noch eine Möglichkeit, einen Scriptfehler zu finden? Oder wie kann ich noch Beispiel finden? Das Meiste was ich finde ist Base64. Danke!


    Gruß, René

    Dateien

    test32base.zip 507,31 kB – 280 Downloads
  • VBA-UDF nach AutoIt

    • mumpel
    • 19. Juni 2023 um 17:55

    Wenn man lange genug sucht, findet man was. ;) Für alle, die sich für TOTP in AutIt interessieren, hier ein kleines Codebeispiel von mir.

    C
    Opt("MustDeclareVars", 1)
    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=icon\bl-xl_1.ico
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Compile_Both=n
    #AutoIt3Wrapper_UseX64=Y
    #AutoIt3Wrapper_UseUpx=N
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Crypt.au3>
    #include <MsgBoxConstants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <FontConstants.au3>
    #include <GuiEdit.au3>
    #include <Date.au3>
    
    ; Hier werden die Variablen deklariert
    Global $PASSWORD_FOR_ENCRYPTION_HASH, $PASSWORD_TO_ENCRYPT_ENCRYPTED, $PASSWORD_DECRYPTED, $strTestingCode,$reas, $FileOpen
    
    ; Hash des Passwortes, welches zur Prüfung auf Korrektheit des Kennworts aus dem Parameter dient
    ; Im Klartext:
    $PASSWORD_FOR_ENCRYPTION_HASH = '0x**************************************'
    
    ; Verschlüsselter Secret des TOTP-Kontos
    ; Im Klartext:
    $PASSWORD_TO_ENCRYPT_ENCRYPTED = '0x**************************************'
    
    ; Vorheriges Starten der Crypt-Bibliothek für mehr Performance.
    _Crypt_Startup()
    
    ; Entschlüsseln des Secrets
    $PASSWORD_DECRYPTED = _Crypt_DecryptData($PASSWORD_TO_ENCRYPT_ENCRYPTED, $PASSWORD_FOR_ENCRYPTION_HASH, $CALG_AES_256)
    
    ; Beenden der Crypt-Bibliothek
    _Crypt_Shutdown()
    
    ; WICHTIG: das entschlüsselte Kennwort muss von einem Binär-Code in einen lesbaren String umgewandelt werden
    $PASSWORD_DECRYPTED = BinaryToString($PASSWORD_DECRYPTED)
    
       ; Hier wird der Inhalt von $strRead ausgelesen. Ist der Wert leer, oder enthält den Wert "Code ungültig", wird der Lizenzcode-Dialog angezeigt
    
            ; Schriftart festlegen
            Local Const $sFont = "Arial Black Narrow"
    
            ; Dialog erstellen
            Local $hGUI = GUICreate("Testprojekt Einmalcode", 500, 120, -1, -1)
    
            ; Schließen-Schaltfläche erzeugen
            Local $idButton_Close = GUICtrlCreateButton("Beenden", 130,72,100,30,$BS_DEFPUSHBUTTON)
    
            ; Eintragen-Schaltfläche erzeugen
            Local $idButton_Read = GUICtrlCreateButton("Code prüfen", 20,72,100,30,$BS_DEFPUSHBUTTON)
    
            ; Eingabefeld 'Lizenzcode" erzeugen
            Local $sText = GUICtrlCreateEdit("Hier Einmalcode eingeben", 20,20,460,26, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_BORDER))
            GUICtrlSetFont(-1, 12, $FW_NORMAL, $sFont)
            GUICtrlSetState($sText, $GUI_FOCUS)
    
            ; Dialog anzeigen
            GUISetState(@SW_SHOW)
    
            ; Schiebt den Text im Eingabefeld nach Links
            _GUICtrlEdit_SetMargins($sText, BitOR($EC_LEFTMARGIN, $EC_RIGHTMARGIN), 5, 5)
    
            ; Markiert den Text im Eingabefeld
            _GUICtrlEdit_SetSel($sText, 0, -1)
    
            ; Warten bis Anender Dialog schließt
            While 1
                    Switch GUIGetMsg()
    
                        Case $idButton_Read
                             Local $easy1 = _GenerateTOTP($PASSWORD_DECRYPTED, True, Default, 30, 6)
                             If $easy1 = GUICtrlRead($sText) Then
                                GUICtrlSetData($sText, "Der Einmalcode ist gültig")
                                GUICtrlSetState($sText, $GUI_FOCUS)
                                _GUICtrlEdit_SetSel($sText, 0, -1)
                             Else
                                GUICtrlSetData($sText, "Der Einmalcode ist ungültig")
                                GUICtrlSetState($sText, $GUI_FOCUS)
                                _GUICtrlEdit_SetSel($sText, 0, -1)
                             EndIf
    
                        Case $idButton_Close
                            Exit
    
                    EndSwitch
            WEnd
    
            ; Entfernt bestehende/offene GUI
            GUIDelete($hGUI)
    
    ; http://tools.ietf.org/html/rfc6238
    Func _GenerateTOTP($key, $keyIsBase32 = True, $time = Default, $period = 30, $digits = 6)
        Local $DIGITS_POWER[9] = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000]
        ; time is some number of seconds
        If $time = Default Then $time = _GetUnixTimeUTC()
        $time = StringFormat("%016X", Floor($time / $period))
        If $keyIsBase32 Then
            $key = _Base32ToHex($key, True) ; return binary
        Else
            $key = StringToBinary($key)
        EndIf
        ; HMAC function expects binary arguments
        Local $hash = _HMAC_SHA1($key, Binary("0x" & $time))
        Local $offset = BitAND(BinaryMid($hash, BinaryLen($hash), 1), 0xf)
        Local $otp = BitOR(BitShift(BitAND(BinaryMid($hash, $offset + 1, 1), 0x7f), -24), _
                BitShift(BitAND(BinaryMid($hash, $offset + 2, 1), 0xff), -16), _
                BitShift(BitAND(BinaryMid($hash, $offset + 3, 1), 0xff), -8), _
                BitAND(BinaryMid($hash, $offset + 4, 1), 0xff) _
                )
        $otp = Mod($otp, $DIGITS_POWER[$digits])
        Return StringFormat("%0" & $digits & "i", $otp)
    EndFunc
    
    ;; http://www.autoitscript.com/forum/topic/153617-seconds-since-epoch-aka-unix-timestamp/
    Func _GetUnixTimeUTC()
        ; returns number of seconds since EPOCH in UTC
        Local $aSysTimeInfo = _Date_Time_GetTimeZoneInformation()
        Local $utcTime = ""
        Local $sDate = _NowCalc()
        If $aSysTimeInfo[0] = 2 Then
            $utcTime = _DateAdd('n', $aSysTimeInfo[1] + $aSysTimeInfo[7], $sDate)
        Else
            $utcTime = _DateAdd('n', $aSysTimeInfo[1], $sDate)
        EndIf
        Return _DateDiff('s', "1970/01/01 00:00:00", $utcTime)
    EndFunc
    
    ;; http://tomeko.net/online_tools/base32.php?lang=en
    Func _Base32ToHex($sInput, $returnBinary = False)
        $sInput = StringRegExpReplace(StringUpper($sInput), "[^A-Z2-7]", "")
        Local $key = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
        Local $buffer = 0, $bitsLeft = 0, $i = 0, $count = 0, $output = "", $val
        While $i < StringLen($sInput)
            $val = StringInStr($key, StringMid($sInput, $i + 1, 1)) - 1 ; StringInStr returns 1 as 1st position
            If $val >=0 And $val < 32 Then
                $buffer = BitOR(BitShift($buffer, -5), $val)
                $bitsLeft += 5
                If $bitsLeft >= 8 Then
                    $output &= Chr(BitAND(BitShift($buffer, $bitsLeft - 8), 0xFF))
                    $bitsLeft -= 8
                EndIf
            EndIf
            $i += 1
        WEnd
        If $bitsLeft > 0 Then
            $buffer = BitShift($buffer, -5)
            $output &= Chr(BitAND(BitShift($buffer, $bitsLeft - 3), 0xFF))
        EndIf
        If $returnBinary Then
            Return StringToBinary($output)
        Else
            Return $output
        EndIf
    EndFunc
    
    ; http://www.autoitscript.com/forum/topic/145556-solved-hmac-sha1/?p=1028830
    Func _HMAC_SHA1($key, $message)
        If Not IsBinary($key) Then $key = Binary($key)
        If Not IsBinary($message) Then $message = Binary($message)
        Local $blocksize = 64
        Local $a_opad[$blocksize], $a_ipad[$blocksize]
        Local Const $oconst = 0x5C, $iconst = 0x36
        Local $opad = Binary(''), $ipad = Binary('')
        If BinaryLen($key) > $blocksize Then $key = _Crypt_HashData($key, $CALG_SHA1)
        For $i = 1 To BinaryLen($key)
            $a_ipad[$i-1] = Number(BinaryMid($key, $i, 1))
            $a_opad[$i-1] = Number(BinaryMid($key, $i, 1))
        Next
        For $i = 0 To $blocksize - 1
            $a_opad[$i] = BitXOR($a_opad[$i], $oconst)
            $a_ipad[$i] = BitXOR($a_ipad[$i], $iconst)
        Next
        For $i = 0 To $blocksize - 1
            $ipad &= Binary('0x' & Hex($a_ipad[$i], 2))
            $opad &= Binary('0x' & Hex($a_opad[$i], 2))
        Next
        Return _Crypt_HashData($opad & _Crypt_HashData($ipad & $message, $CALG_SHA1), $CALG_SHA1)
    EndFunc
    
    Func _HMAC_MD5($key, $message)
        If Not IsBinary($key) Then $key = Binary($key)
        If Not IsBinary($message) Then $message = Binary($message)
        Local $blocksize = 64
        Local $a_opad[$blocksize], $a_ipad[$blocksize]
        Local Const $oconst = 0x5C, $iconst = 0x36
        Local $opad = Binary(''), $ipad = Binary('')
        If BinaryLen($key) > $blocksize Then $key = _Crypt_HashData($key, $CALG_MD5)
        For $i = 1 To BinaryLen($key)
            $a_ipad[$i-1] = Number(BinaryMid($key, $i, 1))
            $a_opad[$i-1] = Number(BinaryMid($key, $i, 1))
        Next
        For $i = 0 To $blocksize - 1
            $a_opad[$i] = BitXOR($a_opad[$i], $oconst)
            $a_ipad[$i] = BitXOR($a_ipad[$i], $iconst)
        Next
        For $i = 0 To $blocksize - 1
            $ipad &= Binary('0x' & Hex($a_ipad[$i], 2))
            $opad &= Binary('0x' & Hex($a_opad[$i], 2))
        Next
        Return _Crypt_HashData($opad & _Crypt_HashData($ipad & $message, $CALG_MD5), $CALG_MD5)
    EndFunc
    Alles anzeigen
  • VBA-UDF nach AutoIt

    • mumpel
    • 18. Juni 2023 um 13:01

    Hallo!

    Code
    ' Quelle: https://stackoverflow.com/questions/75025085/2fa-of-the-google-authenticator-app-with-vba
    
    Private Type SYSTEMTIME
        wYear As Integer
        wMonth As Integer
        wDayOfWeek As Integer
        wDay As Integer
        wHour As Integer
        wMinute As Integer
        wSecond As Integer
        wMilliseconds As Integer
    End Type
    
    Private Declare Sub GetSystemTime Lib "Kernel32" (ByRef lpSystemTime As SYSTEMTIME)
    
    Function otpOut()
        Dim Key As String, Secret As String, Time As String, hmac As String, ch As String, p1 As String, p2 As String, otp As String
        Dim offset As Long, d As Long, i As Long, n As Long, j As Long, a As Long
        
    
        Secret = UCase("AWSD1F")
    
            n = 0
            j = 0
    
            For i = 1 To Len(Secret)
                ch = Mid$(Secret, i, 1)
                If ch >= "A" And ch <= "Z" Then
                    d = asc(ch) - asc("A")
                ElseIf ch >= "2" And ch <= "7" Then
                    d = asc(ch) - asc("0") + 24
                End If
    
                n = (ShiftLeft(n, 5)) + d
                j = j + 5
                If j >= 8 Then
                    j = j - 8
                    Key = Key & WorksheetFunction.Dec2Hex(ShiftRight((n And ShiftLeft(255, j)), j), 2)
                End If
            Next i
            Time = Right("0000000000000000" & Hex(WorksheetFunction.Floor(CurrentTimeMillis() / 1000 / 30, 1)), 16)
            hmac = HEX_HMACSHA1(Time, Key)
            offset = Hex2UInt(Right(hmac, 1))
            p2 = Hex2UInt("7fffffff")
            If offset = 0 Then
                p1 = Hex2UInt(Left(hmac, 8))
            Else
                p1 = Hex2UInt(Mid(hmac, offset * 2 + 1, 8))
            End If
            otpOut = Right(WorksheetFunction.Bitand(p1, p2), 6)
        
    End Function
    
    
    Function CurrentTimeMillis() As Double
    
        Dim st As SYSTEMTIME
        GetSystemTime st
        Dim t_Start, t_Now
        t_Start = DateSerial(1970, 1, 1) ' Starting time for Linux
        t_Now = DateSerial(st.wYear, st.wMonth, st.wDay) + _
            TimeSerial(st.wHour, st.wMinute, st.wSecond)
        CurrentTimeMillis = DateDiff("s", t_Start, t_Now) * 1000 + st.wMilliseconds
    End Function
    
    Function Hex2UInt(h As String) As Double
        Dim dbl As Double: dbl = CDbl("&h" & h)
    
        If dbl < 0 Then
            dbl = CDbl("&h1" & h) - 4294967296#
        End If
    
        Hex2UInt = dbl
    End Function
    
    Public Function HEX_HMACSHA1(ByVal sTextToHash As String, ByVal sSharedSecretKey As String) As String
        Dim asc                 As Object
        Dim enc                 As Object
        Dim TextToHash()        As Byte
        Dim SharedSecretKey()   As Byte
        Dim Bytes()             As Byte
        Dim sHexString          As String
        Dim i                   As Long
        
        Set asc = CreateObject("System.Text.UTF8Encoding")
        Set enc = CreateObject("System.Security.Cryptography.HMACSHA1")
        
        TextToHash = HexStringToByteArray(sTextToHash)
        SharedSecretKey = HexStringToByteArray(sSharedSecretKey)
        enc.Key = SharedSecretKey
        
        Bytes = enc.ComputeHash_2((TextToHash))
        HEX_HMACSHA1 = ByteArrayToHexStr(Bytes)
        Set asc = Nothing
        Set enc = Nothing
    End Function
    
    Function HexStringToByteArray(strInput As String) As Byte()
    
    Dim rMatch As Object
    Dim s As String
    Dim arrayMatches() As Byte
    Dim i As Long
    
    
    With New RegExp
        .Global = True
        .IgnoreCase = True
        .Pattern = "([A-F0-9]{2})"
        If .Test(strInput) Then
            For Each rMatch In .Execute(strInput)
                ReDim Preserve arrayMatches(i)
                arrayMatches(i) = Hex2UInt(rMatch.Value)
                i = i + 1
            Next
        End If
    End With
    
        HexStringToByteArray = arrayMatches
    End Function
    
    Function ByteArrayToHexStr(b() As Byte) As String
       Dim n As Long, i As Long
       
       ByteArrayToHexStr = Space$(2 * (UBound(b) - LBound(b)) + 2)
       n = 1
       For i = LBound(b) To UBound(b)
          Mid$(ByteArrayToHexStr, n, 2) = Right$("00" & Hex$(b(i)), 2)
          n = n + 2
       Next
    End Function
    
    Public Static Function ShiftLeft(ByVal Value As Long, ByVal ShiftCount As Long) As Long
    
      Dim Pow2(0 To 31) As Long
      Dim i As Long
      Dim mask As Long
      
      Select Case ShiftCount
      Case 1 To 31
      
        If i = 0 Then
          Pow2(0) = 1
          For i = 1 To 30
            Pow2(i) = 2 * Pow2(i - 1)
          Next i
        End If
        
        mask = Pow2(31 - ShiftCount)
        If Value And mask Then
          ShiftLeft = (Value And (mask - 1)) * Pow2(ShiftCount) Or &H80000000
        Else
          ShiftLeft = (Value And (mask - 1)) * Pow2(ShiftCount)
        End If
      
      Case 0
      
        ShiftLeft = Value
      
      End Select
    End Function
    
    Public Static Function ShiftRight(ByVal Value As Long, ByVal ShiftCount As Long) As Long
    
      Dim lPow2(0 To 30) As Long
      Dim i As Long
      
      Select Case ShiftCount
      Case 0 To 30
        If i = 0 Then
          lPow2(0) = 1
          For i = 1 To 30
            lPow2(i) = 2 * lPow2(i - 1)
          Next
        End If
        If Value And &H80000000 Then
          ShiftRight = Int(Value / lPow2(ShiftCount))
        Else
          ShiftRight = Value \ lPow2(ShiftCount)
        End If
      Case 31
        If Value And &H80000000 Then
          ShiftRight = -1
        Else
          ShiftRight = 0
        End If
      End Select
    End Function
    Alles anzeigen

    1. Könnte mal bitte jemand schauen wie es in AutoIt aussehen könnte? Vielleicht ist es ja in AutoIt sogar leichter. ("WorksheetFunction" liese sich vielleicht sogar nutzen, mit der passenden Referenzierung. Stellt sich die Frage ob das nötig ist. ;) ).

    2. Gibt es irgendwo eine Seite, auf der man das lernen kann? Vielleicht sogar mit Vergleich zwischen VBA und AutoIt? Wie/wo habt ihr das gelernt?

    Danke!

    Gruß, René

  • Eingabefeld soll mit Maus bedienbar sein.

    • mumpel
    • 16. Juni 2023 um 01:07

    Fehler doch noch gefunden. Immer diese Denkfehler. Die Positionierungen passten nicht.

  • Eingabefeld soll mit Maus bedienbar sein.

    • mumpel
    • 16. Juni 2023 um 00:25

    Die dritte Zeile ist nicht mehr drin. Trotzdem komme ich mit der Maus nicht rein. Ich finde den Fehler nicht.

    Code
            ; Font type to be used for setting the font of the controls.
            Local Const $sFont = "Arial Black Narrow"
            Local $strText = "Sie starten das Projekt zum ersten Mal. Sie benötigen einen Lizenzcode. " & _
                       "Diesen können Sie beim Autor anfordern, sofern Sie zur Nutzung berechtigt sind. " & _
                       @CRLF & @CRLF & "Ihre PC-ID lautet " & $stringCodeBeginn & @CRLF & @CRLF & _
                       "Teilen Sie den Lizenzcode dem Autor mit. Die ID wird automatisch in die Zwischenablage eingefügt, wenn Sie das Eingabefeld leer lassen. " & _
                       "Wenn Sie bereits einen Lizenzcode haben, dann geben Sie ihn in das Eingabefeld ein und klicken auf 'Eintragen'. Sonst klicken Sie auf 'Abbrechen'."
            ; Create a GUI with various controls.
            Local $hGUI = GUICreate("Lizenzcode eingeben", 800, 380)
    
            ; Create label controls.
            GUICtrlCreateLabel($strText, 10, 10, 780, 330)
            GUICtrlSetFont(-1, 16, $FW_NORMAL, $sFont) ;Set the font of the previous control.
    
            Local $sText = GUICtrlCreateEdit("ID eingeben", 10, 260, 780, 20, BitOR($GUI_SS_DEFAULT_EDIT, $GUI_SS_DEFAULT_INPUT, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
            GUICtrlSetFont(-1, 10, $FW_NORMAL, $sFont) ;Set the font of the previous control.
    
            Local $idButton_Close = GUICtrlCreateButton("Abbrechen", 700, 330, 85, 25)
            Local $idButton_Read = GUICtrlCreateButton("Eintragen", 600, 330, 85, 25)
            ; Display the GUI.
            GUISetState(@SW_SHOW)
    
            ; Loop until the user exits.
            While 1
                    Switch GUIGetMsg()
                        Case $idButton_Read
                             IniWrite(@ScriptDir & "\files\Lizenzcode.ini", "Kennwort", "Open", GUICtrlRead($sText))
                             IniWrite(@ScriptDir & "\files\Lizenzcode.ini", "Kennwort", "PC-ID", $stringCodeBeginn)
                             ExitLoop
                        Case $idButton_Close
                            ClipPut($stringCodeBeginn)
                            Exit
                    EndSwitch
            WEnd
    
            ; Delete the previous GUI and all controls.
            GUIDelete($hGUI)
    Alles anzeigen

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™