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

Beiträge von Kanashius

  • Geht nicht gibts nicht ?

    • Kanashius
    • 22. Oktober 2023 um 14:52

    Ich denke du hast da Regular Expressions mit dem Pseudo Zeug verwechselt, das manchmal bei Pfaden,... verwendet wird.

    * ist bei Regular Expressions ein Quantifier, der nur angibt, wie oft das vorher auftauchen muss. * steht dabei für 0 oder mehr.

    Die Quickreference auf https://regex101.com/ ist recht nett, wenn du mal schauen möchtest, was es alles gibt und die Webseite ist auch sehr hilfreich um zu sehen, was ein RegExp macht, weil an der rechten Seite aufgelistet wird, was genau passiert.

  • Bestimmte Leerzeichen in String löschen

    • Kanashius
    • 16. Oktober 2023 um 15:32

    Du suchst nach StringStripWS, da kannst du auch angeben ob führende/endende,... whitespaces (leerzeichen, tabs, zeilenende,...) entfernt werden sollen.

  • SciTE - einfach zu Dark Theme switchen (+ Lua Dark Theme)

    • Kanashius
    • 16. Oktober 2023 um 13:47

    Wortspiel der Ersteller. Dracula ist auch nen Theme, hat aber nen complett anderes Farbschema :D

    Ich hab auch erst nach Dracula gesucht und war verwirrt :D

  • SciTE - einfach zu Dark Theme switchen (+ Lua Dark Theme)

    • Kanashius
    • 15. Oktober 2023 um 15:07

    Ok ;)
    Ich hab das Dark Theme Darcula jetzt in eine eigene *.properties Datei geschrieben.

    Dabei hab ich es diesmal auch vernünftig umgesetzt und alle Farben überarbeitet und einiges hinzugefügt (vorher fehlte einiges).

    SciTEDarkTheme.png

    LG, Kanashius

    Dateien

    dark.theme.darcula.properties.txt 4,99 kB – 642 Downloads
  • SciTE - einfach zu Dark Theme switchen (+ Lua Dark Theme)

    • Kanashius
    • 14. Oktober 2023 um 18:30

    Ich hab mein SciTE vor einiger Zeit auch aufs Darktheme umgestellt, mich dabei aber an JetBrains IntelliJ darktheme orientiert (In Scite geändert mit Tools -> Scite Config -> Editor Colors).

    Falls jemand das design lieber mag :)

    SciTEDarkTheme.png

    EDIT: Hab die Datei hier gelöscht, da ich das ganze neu+besser umgesetzt habe: Beitrag weiter unten

  • Wieder mal das Datum

    • Kanashius
    • 5. Oktober 2023 um 12:15

    Da das Programm, mit dem du die CD/DVD beschreibst für den Inhalt verantwortlich ist, der geschrieben wird, wäre die Systemzeit zu ändern vmtl. am einfachsten...

    Ansonsten müsstest du das Programm zum beschreiben der CD/DVD ändern/selbst schreiben, was etwas komplexer wäre :D

  • Externe Zeit

    • Kanashius
    • 5. Oktober 2023 um 12:09

    Wenn du damit andere Server meinst lautet das Stichwort NTP.

    Ist Netzwerk, also mit TCP/UDP machbar. Hab auch direkt was gefunden:

    Update system time based on NTP server time
    Based on codes in an old AutoIt Forum, I made the following code and it works perfectly. But I have couple of questions on how it works. I have to ask the…
    www.autoitscript.com
  • Problem mit scrolling bei $WS_EX_LAYERED child windows

    • Kanashius
    • 4. Oktober 2023 um 17:03

    Hi :)

    Ich konnte das Problem leider nicht nachstellen. Vermutlich ist meine Hardware etwas schneller.

    Mein erster Ansatz wäre das Neuzeichnen des Childs während des Scrollens zu verhindern (evtl. auch des Parents).

    AutoIt
    #include <WindowsConstants.au3>
    _SendMessage($hGui, $WM_SETREDRAW, False) ; disable window drawing
    ; scrolling => your code >> _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iCurScrollPos + 5)
    _SendMessage($hGui, $WM_SETREDRAW, True) ; enable window drawing
    _WinAPI_RedrawWindow($hGui) ; manually trigger a redraw
  • Variable in Array-Namen möglich?

    • Kanashius
    • 1. Oktober 2023 um 22:46

    Hi :)

    Wenns nur mit Zahlen zugegriffen werden soll: Nen 2D-Array

    Wenns auch mit andere Variablentypen gehen soll: Maps

    Beides in dem Beispiel hier:

    AutoIt
    #include<Array.au3>
    ; 2D Array
    Local $arData[12][4]
    For $i=0 To UBound($arData)-1 Step 1
        For $j=0 To UBound($arData, 2)-1 Step 1
            $arData[$i][$j] = $i*UBound($arData, 2)+$j
        Next
    Next
    _ArrayDisplay($arData)
    ConsoleWrite($arData[3][2]&@crlf)
    
    ; Map
    Local $mData[], $arData1 = [1,4,3,5], $arData2 = [3,2,2,4]
    $mData["Array1"] = $arData1
    $mData["Array2"] = $arData2
    _ArrayDisplay($mData["Array1"])
    _ArrayDisplay($mData["Array2"])
    Alles anzeigen

    Lg, Kanashius

  • SQLLITE

    • Kanashius
    • 28. September 2023 um 16:02

    Ich vermute mal du nutzt SQLite.

    SQLite kann zwar mit mehreren Anwendungen gleichzeitig lesen, aber nur mit einer schreiben.

    SQLite FAQ: Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at any moment in time, however.

    In diesem Fall würde ich aber vermuten, dass Windows die Datei lokal cached, solange sie offen ist und erst am Ende auf die Netzwerkdatei schreibt.

    Probier mal aus, ob die Daten da sind, wenn du deine schreibende Anwendung beendest.

    Wenn das der Fall ist: Probier mal mit SQLITE_Close die Datenbank zu schließen und schau ob dann die Daten geschrieben wurden.

    Wäre etwas doof, weils mehr Zeit kostet, wenn du jedesmal die Datenbank öffnen und wieder schließen musst, aber wenn du nur zwischendurch mal was schreibst sollte das gehen.

  • Dialog-Elemente an Bildschirmzoom anpassen

    • Kanashius
    • 7. September 2023 um 20:28

    Deine Problemstellung hat mich zu dieser Lösung inspiriert :)

    Es geht in Richtung UDF, es fehlen aber noch setter/getter Methoden und die documentation,... . Ich werds vermutlich demnächst dazu machen und das dann auch hier im Forum posten; mir fehlt grad die Zeit.

    Mit der Methode kann ein GridLayout erstellt werden, bei dem dann andere Controls, GridLayouts oder auch einfach Funktionen (mit den passenden Parametern) hinzugefügt werden.

    Dabei wird die Position im Grid mit dem Index für die Reihe/Spalte angegeben und dann wird noch die Höhe der Reihe/Breite der Spalte als Prozent wert von 0 bis 1 angegeben. Es zählt immer der letzte Aufruf, wenn mehrere Einträge in einer Reihe eine Höhe angeben; Default behält die vorherige angabe bei.

    Wenn gar kein Wert angegeben wird, werden von allen angegebenen Reihen/Spalten die Prozent-Werte abgezogen und der übrige Platz wird gleichmäßig auf die übrigen Reihen/Spalten verteilt.

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>
    #include <Array.au3>
    Opt("GUIOnEventMode", 1)
    
    Global $iStartWidth = @DesktopWidth/1.7, $iStartHeight = @DesktopHeight/1.7, $iSpace = 10
    
    Global $hMainGui = GUICreate('Gui', $iStartWidth, $iStartHeight, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
    GUISetBkColor(0x555555, $hMainGui)
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    
    Global $idButton = GUICtrlCreateButton("RESIZE", $iSpace, $iSpace, $iStartWidth-2*$iSpace)
    GUICtrlSetOnEvent($idButton, "_buttonResize")
    
    ; generate button and button grid layout
    Global $mLayoutButtons = __GuiCtrlGridLayout_Create($hMainGui, 10, 10, 10, 10, 10)
    Global $arButtons[2][4]
    For $i=0 To UBound($arButtons)-1 Step 1
        For $j=0 To UBound($arButtons, 2)-1 Step 1
            $arButtons[$i][$j] = GUICtrlCreateButton("Test "&$i&":"&$j, 10, 10, 10, 10)
            __GuiCtrlGridLayout_Add($mLayoutButtons, $arButtons[$i][$j], $i, $j)
        Next
    Next
    
    ; generate labels
    Global $arLabels[4]
    For $i=0 To UBound($arLabels)-1 Step 1
        $arLabels[$i] = GUICtrlCreateLabel("Test "&$i, 10, 10, 10, 10)
        GUICtrlSetBkColor($arLabels[$i], 0x999999)
    Next
    
    ; generate treeviews
    Global $arTreeViews[4]
    For $i=0 To UBound($arTreeViews)-1 Step 1
        $arTreeViews[$i] = GUICtrlCreateTreeView(120, 10, 100, 100, $GUI_SS_DEFAULT_TREEVIEW)
        Local $idRoot = GUICtrlCreateTreeViewItem("Root", $arTreeViews[$i])
        GUICtrlCreateTreeViewItem("Child 1", $idRoot)
        GUICtrlCreateTreeViewItem("Child 2", $idRoot)
    Next
    
    ; create main layout
    Global $mLayoutMain = __GuiCtrlGridLayout_Create($hMainGui, $iSpace, $iSpace+50, $iStartWidth-$iSpace*2, $iStartHeight-$iSpace*2-50, $iSpace)
    __GuiCtrlGridLayout_Add($mLayoutMain, $arTreeViews[0], 0, 0, 0.4, 0.4)
    __GuiCtrlGridLayout_Add($mLayoutMain, $mLayoutButtons, 0, 1)
    __GuiCtrlGridLayout_Add($mLayoutMain, $arTreeViews[1], 0, 2, 0.3)
    __GuiCtrlGridLayout_Add($mLayoutMain, $arTreeViews[2], 2, 0, 0.3, 0.6)
    __GuiCtrlGridLayout_Add($mLayoutMain, "_resizeLabels", 2, 1)
    __GuiCtrlGridLayout_Add($mLayoutMain, $arTreeViews[3], 2, 2, 0.4)
    ;__GuiCtrlGridLayout_Add($mLayoutTreeViews, "_resizeButtons", 0, 1)
    
    __GuiCtrlGridLayout_Update($mLayoutMain)
    GUIRegisterMsg($WM_SIZE, "_WM_SIZE")
    GUISetState(@SW_SHOW)
    
    While Sleep(10)
    Wend
    
    Func _buttonResize()
        __GuiCtrlGridLayout_Update($mLayoutMain, $iSpace, $iSpace+50, $iStartWidth/2, $iStartHeight/2)
    EndFunc
    
    Func _resizeLabels($iLeft, $iTop, $iWidth, $iHeight)
        For $i=0 To UBound($arLabels)-1 Step 1
            GUICtrlSetPos($arLabels[$i], $iLeft, $iTop+$i*30, $iWidth, 25)
        Next
    EndFunc
    
    Func OnExit()
        Exit
    EndFunc
    
    Func _WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
        If $hWnd=$hMainGui Then
            Local $arSize = WinGetClientSize($hWnd)
            __GuiCtrlGridLayout_Update($mLayoutMain, $iSpace, $iSpace+50, $arSize[0]-$iSpace*2, $arSize[1]-$iSpace*2-50)
        EndIf
        Return $GUI_RUNDEFMSG
    EndFunc
    
    
    ; below here is needed for the grid layout; above is just the example
    
    Func __GuiCtrlGridLayout_Create($hGui, $iLeft, $iTop, $iWidth, $iHeight, $iControlSpace = 10)
        Local $mData[]
        $mData.gui = $hGui
        $mData.left = $iLeft
        $mData.top = $iTop
        $mData.width = $iWidth
        $mData.height = $iHeight
        $mData.space = $iControlSpace
        Local $mRows[]
        $mData.rows = $mRows
        Return $mData
    EndFunc
    
    ; $idControl: control id OR a string with the function name of a function with 4 parameters (fLeft, fTop, fWidth, fHeight) OR a map->other grid layout
    Func __GuiCtrlGridLayout_Add(ByRef $mLayout, $idControl, $iRow, $iCol, $iColWidthFactor = Default, $iRowHeightFactor = Default)
        Local $mRows = $mLayout.rows
        If Not MapExists($mRows, $iRow) Then
            Local $mData[]
            $mData.heightFactor = $iRowHeightFactor
            Local $mTmp[]
            $mData.cols = $mTmp
            $mRows[$iRow] = $mData
        Else
            Local $mData = $mRows[$iRow]
            If $iRowHeightFactor<>Default Then $mData.heightFactor = $iRowHeightFactor
            $mRows[$iRow] = $mData
        EndIf
        Local $mCols = $mRows[$iRow].cols
        If Not MapExists($mCols, $iCol) Then
            Local $mData[]
            $mData.control = $idControl
            $mData.widthFactor = $iColWidthFactor
            $mCols[$iCol] = $mData
        Else
            Local $mData=$mCols[$iCol]
            $mData.control = $idControl
            If $iColWidthFactor<>Default Then $mData.widthFactor = $iColWidthFactor
            $mCols[$iCol] = $mData
        EndIf
        $mRows[$iRow].cols = $mCols
        $mLayout.rows = $mRows
        __GuiCtrlGridLayout_Update($mLayout)
    EndFunc
    
    Func __GuiCtrlGridLayout_Update(ByRef $mLayout, $iLeft = Default, $iTop = Default, $iWidth = Default, $iHeight = Default, $iControlSpace = Default)
        ; update $mLayout with parameters
        If $iLeft<>Default And IsNumber($iLeft) Then $mLayout.left = $iLeft
        If $iTop<>Default And IsNumber($iLeft) Then $mLayout.top = $iTop
        If $iWidth<>Default And IsNumber($iWidth) And $iWidth>=0 Then $mLayout.width = $iWidth
        If $iHeight<>Default And IsNumber($iHeight) And $iHeight>=0 Then $mLayout.height = $iHeight
        If $iControlSpace<>Default And IsNumber($iControlSpace) And $iControlSpace>=0 Then $mLayout.space = $iControlSpace
        Local $arRows = MapKeys($mLayout.rows)
        If UBound($arRows)>0 Then
            _ArraySort($arRows)
            Local $iMaxRow = $arRows[UBound($arRows)-1]
            If $iMaxRow<>UBound($arRows)-1 Then
                ReDim $arRows[$iMaxRow+1]
            EndIf
            Local $iHFact = 0, $iHAmountFact = 0
            For $i=0 To UBound($arRows)-1 Step 1
                If MapExists($mLayout.rows, $i) And $mLayout.rows[$i].heightFactor<>Default Then
                    $arRows[$i] = $mLayout.rows[$i].heightFactor
                    $iHFact += $arRows[$i]
                    $iHAmountFact+=1
                Else
                    $arRows[$i] = -1
                EndIf
            Next
            Local $iHUnspezRows = (1-$iHFact)/(UBound($arRows)-$iHAmountFact)
            If $iHUnspezRows<0 Then $iHUnspezRows=0
            For $i=0 To UBound($arRows)-1 Step 1
                If $arRows[$i]<0 Then $arRows[$i] = $iHUnspezRows
            Next
            $iTop = $mLayout.top
            $iHeight = $mLayout.height-$mLayout.space*(UBound($arRows)-1)
            If $iHeight<0 Then $iHeight = 0
            For $i=0 To UBound($arRows)-1 Step 1
                Local $iRowHeight = $iHeight*$arRows[$i]
                If MapExists($mLayout.rows, $i) Then
                    Local $arCols = MapKeys($mLayout.rows[$i].cols)
                    _ArraySort($arCols)
                    Local $iMaxCol = $arCols[UBound($arCols)-1]
                    If $iMaxCol<>UBound($arCols)-1 Then
                        ReDim $arCols[$iMaxCol+1]
                    EndIf
                    Local $iWFact = 0, $iWAmountFact = 0
                    For $j=0 To UBound($arCols)-1 Step 1
                        If MapExists($mLayout.rows[$i].cols, $j) And $mLayout.rows[$i].cols[$j].widthFactor<>Default Then
                            $arCols[$j] = $mLayout.rows[$i].cols[$j].widthFactor
                            $iWFact += $arCols[$j]
                            $iWAmountFact+=1
                        Else
                            $arCols[$j] = -1
                        EndIf
                    Next
                    Local $iWUnspezCols = (1-$iWFact)/(UBound($arCols)-$iWAmountFact)
                    If $iWUnspezCols<0 Then $iWUnspezCols=0
                    For $j=0 To UBound($arCols)-1 Step 1
                        If $arCols[$j]<0 Then $arCols[$j] = $iWUnspezCols
                    Next
                    $iLeft = $mLayout.left
                    $iWidth = $mLayout.width-$mLayout.space*(UBound($arCols)-1)
                    For $j=0 To UBound($arCols)-1 Step 1
                        Local $iColWidth = $iWidth*$arCols[$j]
                        If MapExists($mLayout.rows[$i].cols, $j) Then
                            If IsString($mLayout.rows[$i].cols[$j].control) Then
                                Call($mLayout.rows[$i].cols[$j].control, $iLeft, $iTop, $iColWidth, $iRowHeight)
                            ElseIf IsMap($mLayout.rows[$i].cols[$j].control) Then
                                Local $mMap = $mLayout.rows[$i].cols[$j].control
                                __GuiCtrlGridLayout_Update($mMap, $iLeft, $iTop, $iColWidth, $iRowHeight)
                                $mLayout["rows"][$i]["cols"][$j]["control"] = $mMap
                            Else
                                GUICtrlSetPos($mLayout.rows[$i].cols[$j].control, $iLeft, $iTop, $iColWidth, $iRowHeight)
                            EndIf
                            ;ConsoleWrite($mLayout.rows[$i].cols[$j].control&" :> "&$i&":"&$j&">>"&$iTop&" "&$iRowHeight&" > "&$iLeft&" "&$iColWidth&@crlf)
                        ;Else
                            ;ConsoleWrite("- :> "&$i&":"&$j&">>"&$iTop&" "&$iRowHeight&" > "&$iLeft&" "&$iColWidth&@crlf)
                        EndIf
                        $iLeft+=$iColWidth+$mLayout.space
                    Next
                EndIf
                $iTop+=$iRowHeight+$mLayout.space
            Next
        EndIf
    EndFunc
    Alles anzeigen

    Das ganze wird dann zu diesem Design:

    tmp21.png

    Dabei werden die TreeViews als Control in das GridLayout eingefügt, die Buttons in ein weiteres GridLayout, welches dann in das Main GridLayout integriert wird.

    Die Labels werden mithilfe einer Funktion an die richtige Position gebracht. Es kann also auch für "CustomControls",... verwendet werden, man muss sich dann halt selber um das resizing an die gewollte position/größe selbst kümmern.

    Wenn sich die Größe des Fensters ändert wird mit WM_SIZE die position/größe für das MainLayout angepasst.

    Viel Spaß damit :)

  • TAB als Hotkey per Schleife setzen ?

    • Kanashius
    • 21. August 2023 um 22:43

    Hi :)

    Dein Problem liegt darin, dass du For...In...Next nutzt und dann auf das Array zugreifst, als ob es eine Zahl wäre.

    Bei For $element In $array wird der Wert, der in dem Array steht in die Variable ($elem) gespeichert, hier also: "1", "2", "3", "4", "{TAB}", "{ALT}". Mich wunderts eher, dass du beim Array-Zugriff keinen Fehler bekommen hast...

    Im Code unten hab ich beide Methoden eingebaut, die Funktionieren: Entweder du arbeitest mit For...To...Next und nutzt die Variable als Zahl, oder du nimmst For...In...Next und verwendest den Wert direkt.

    Achtung: Mit For...In...Next darfst du das Array während des durchlaufens nur auslesen, aber nicht verändern!

    AutoIt
    #include <Misc.au3>
    #include <Array.au3>
    Global $hDLL = DllOpen("user32.dll")
    
    #Region ### HotKeys #
    HotKeySet("{F11}", "Done")
    Global $gS_ToggleScript = "_KeyToggle"
    Global $gA_ToggleKeys = ["1", "2", "3", "4", "{ALT}", "{TAB}"]
    _SetHotToggle()
    #EndRegion # HotKeys
    
    #Region ### Func #
    Func Done()
        DllClose($hDLL)
        Exit
    EndFunc
    
    Func _SetHotToggle()
        For $i=0 to UBound($gA_ToggleKeys)-1 step 1
            HotKeySet($gA_ToggleKeys[$i], $gS_ToggleScript)
        Next
    ;-    HotKeySet("{TAB}", "_KeyToggle")
    EndFunc
    
    Func _SetHotDefault()
        For $elem in $gA_ToggleKeys
            HotKeySet($elem)
        Next
    EndFunc
    
    Func _KeyToggle()
        _SetHotDefault()
        Send("Test3241")
        _SetHotToggle()
    EndFunc
    #EndRegion # Func
    
    
    #Region ### Schleife #
    While Sleep(10)
    WEnd
    #EndRegion # Schleife
    Alles anzeigen

    Du kannst Arrays direkt bei der deklaration auch initalisieren => mit den Werten füllen. Spart mehrere Zeilen Code und ist auch schneller, weil jedes _ArrayAdd bei jedem Aufruf das gesamte Array kopiert und dann den neuen Wert einträgt, was ziemlich langsam ist. Wird dir hier nicht auffallen, aber wenn du größere Datenmengen verarbeitest und schon vorher weißt, wie viele es sind: Erstell das Array direkt mit der richtigen Größe und trag nur noch die Werte ein.

  • php2au3 neuer Ausweis

    • Kanashius
    • 24. Juli 2023 um 17:41

    Das spielt keine Rolle, der Code funktioniert trotzdem noch, weil von vorne gelesen wird und die letzte Prüfziffer ignoriert wird, weil sie nicht nur über die ID, sondern den ganzen Ausweis geht (und die Daten haben wir nicht).

    Man könnte ggf. noch die Versionsnummer in die Infos hinzufügen, ich denke aber nicht, dass sie relevant ist...

    Wenn man alle Ausweise (und nicht nur neue) unterstützen will sollte man an dem Code eh noch arbeiten, weil man sich dann nicht mehr auf die Zeichenpositionen (absolut in der ID) alleine verlassen kann.

  • php2au3 neuer Ausweis

    • Kanashius
    • 24. Juli 2023 um 17:11

    Hi, ich hab mich der Sache mal angenommen und das ganze umgesetzt:

    AutoIt
    ; https://www.php-einfach.de/diverses/personalausweis-ueberpruefen/
    
    Global $arTestIds = ["IDD T220001293 6408125 2010315D 4 MUSTERMANN ERIKA", _
                         "IDD<<T220001293<<<<<<<<<<<<<<<"&@CRLF&"6408125<2010315D<<<<<<<<<<<<<4"&@CRLF&"MUSTERMANN<<ERIKA<<<<<<<<<<<<<"]
    
    For $i=0 To UBound($arTestIds)-1 Step 1
        ConsoleWrite(@CRLF)
        ConsoleWrite($arTestIds[$i]&@CRLF)
        ConsoleWrite("Check ID: "&_checkPersoId($arTestIds[$i])&@CRLF)
        Local $arTestResults = _checkPersoId($arTestIds[$i], True)
        ConsoleWrite("Check ID Details: "&"Ident="&$arTestResults[0]&" BirthDate="&$arTestResults[0]&" EndDate="&$arTestResults[0]&@CRLF)
    
        Local $mData = _getPersoInfo($arTestIds[$i])
        Local $arMapKeys = MapKeys($mData)
        For $j=0 To UBound($arMapKeys)-1 Step 1
            ConsoleWrite($arMapKeys[$j]&": "&$mData[$arMapKeys[$j]]&@crlf)
        Next
    Next
    
    Func _getPersoInfo($sId)
        $sId = StringRegExpReplace(StringUpper($sId), "[^0-9A-Z]", "")
        If Not _checkPersoId($sId) Then Return SetError(1, @error, -1)
        Local $mData[]
        $mData.birthYear = Int(StringMid($sId, 14, 2))
        $mData.birthMonth = Int(StringMid($sId, 16, 2))
        $mData.birthDay = Int(StringMid($sId, 18, 2))
        $mData.age = Mod(@YEAR, 100) - $mData.birthYear
        If $mData.age<1 Then $mData.age = 100 + $mData.age ; Age is only correct, if person is <100 years old
        If Int(@MON)<$mData.birthMonth Or (Int(@MON)=$mData.birthMonth And Int(@MDAY)<$mData.birthDay) Then $mData.age -= 1
        $mData.ofLegalAge = $mData.age>=18
        $mData.expiryYear = Int(StringMid($sId, 21, 2))
        $mData.expiryMonth = Int(StringMid($sId, 23, 2))
        $mData.expiryDay = Int(StringMid($sId, 25, 2))
        $mData.isExpired = $mData.expiryYear<@YEAR Or _
                           ($mData.expiryYear=@YEAR And ($mData.expiryMonth<@MON Or ($mData.expiryMonth=@MON And $mData.expiryDay<@MDAY)))
        $mData.origin = StringMid($sId, 28, 1)
        $mData.isGerman = $mData.origin="D"
        $mData.mainResidenceAuthorityNumber = StringMid($sId, 4, 4)
        $mData.runningNumber = StringMid($sId, 8, 5)
        Return $mData
    EndFunc
    
    ; returns true or false, depending of the correct input
    ; with $bDetails=true, an array with 3 bools for Ident, Birthdate, EndDate is returned to show, which one is wrong
    Func _checkPersoId($sId, $bDetails = False)
        $sId = StringRegExpReplace(StringUpper($sId), "[^0-9A-Z]", "")
        Local $arResults[3]
    
        Local $sIdent = StringMid($sId, 4, 10)
        $arResults[0] = _testCheckDigit($sIdent)
        If Not $bDetails And Not $arResults[0] Then Return False
    
        Local $sBirthDate = StringMid($sId, 14, 7)
        $arResults[1] = _testCheckDigit($sBirthDate)
        If Not $bDetails And Not $arResults[0] Then Return False
    
        Local $sEndDate = StringMid($sId, 21, 7)
        $arResults[2] = _testCheckDigit($sEndDate)
        If Not $bDetails And Not $arResults[0] Then Return False
    
        If $bDetails Then Return $arResults
        Return True
    EndFunc
    
    Func _testCheckDigit($sIdPart)
        $sIdPart = StringUpper($sIdPart)
        If Not StringRegExp($sIdPart, "^[0-9A-Z]*$") Then Return SetError(1, 0, False)
        Local $arP = [7, 3, 1], $iP = 0
        Local $arIdPart = StringSplit($sIdPart, "", BitOR(1, 2))
        For $i=0 To UBound($arIdPart)-1 Step 1 ; convert to int
            If StringInStr("0123456789", $arIdPart[$i]) Then
                $arIdPart[$i] = Int($arIdPart[$i])
            Else
                $arIdPart[$i] = Asc($arIdPart[$i])-55 ; A=10, B=11,...
            EndIf
        Next
        Local $iSum = 0
        For $i=0 To UBound($arIdPart)-2 Step 1 ; calculate checksum; skip last, its the checksum
            $iSum += $arIdPart[$i]*$arP[$iP]
            ; circle magic checksum numbers
            $iP+=1
            If $iP>=UBound($arP) Then $iP=0
        Next
        Return $arIdPart[UBound($arIdPart)-1]=Mod($iSum, 10)
    EndFunc
    Alles anzeigen

    Beispielausgabe:

    Code
    IDD T220001293 6408125 2010315D 4 MUSTERMANN ERIKA
    Check ID: True
    Check ID Details: Ident=True BirthDate=True EndDate=True
    birthYear: 64
    birthMonth: 8
    birthDay: 12
    age: 58
    ofLegalAge: True
    expiryYear: 20
    expiryMonth: 10
    expiryDay: 31
    isExpired: True
    origin: D
    isGerman: True
    mainResidenceAuthorityNumber: T220
    runningNumber: 00129
    Alles anzeigen

    Das Alter (und damit auch der legal check) ist leider nur mäßig gut, weils nur bis 100 Jahre funktioniert. In der Ausweis-ID sind nur die letzten beiden Ziffern (z.B. 23), deshalb gibts bei 100+ Jährigen ein falsches Alter aus.

    Viel Spaß,

    Kanashius :)

  • Toolbar Desktop v0.83 build 2025-10-08 beta

    • Kanashius
    • 18. Juli 2023 um 15:00

    Position passt jetzt.

    Ist nur noch kleiner geworden von der Test/Icongröße bei den 4k Bildschirmen. Vllt. die Hälfte von vorher :D

    Bei FHD passt die Größe.

  • Toolbar Desktop v0.83 build 2025-10-08 beta

    • Kanashius
    • 17. Juli 2023 um 14:51

    Hi, die X-Position funktioniert, bei der Y-Position funktionieren alle bis auf den oberen Bildschirm. Da erscheint das Fenster dann ~mittig auf dem unteren Bildschirm.

    Ich vermute das hängt damit zusammen, dass die Position dort negativ wäre?

    Wenn das Toolbaricon nicht gefunden wird funktioniert es aber noch nicht (vermute, dass hast du noch nicht angepasst; $iMonitorY+X werden garnicht verwendet). Hatte erst den Sourcecode ausgeführt und nicht die EXE, da ist er immer in den oberen Case gegangen, weil die Description natürlich nicht stimmt^^

  • Toolbar Desktop v0.83 build 2025-10-08 beta

    • Kanashius
    • 14. Juli 2023 um 23:44

    "Error getting icon pos in taskbar" taucht jetzt jedesmal auf und das Fenster ist am linken Rand.

    Der obere und untere Bildschirm funktionieren ansonsten.

    Beim linken und rechten läuft noch was schief. Beim linken ist das Fenster nicht sichtbar, beim rechten landet das Fenster auf dem linken Bildschirm. Ich vermute das Problem liegt in den negativen Positionswerten.

    Ich hab gesehen, dass du MouseGetPos nutzt und hab mal die Koordinaten nachgeschaut.... Ich bin sehr verwirrt, was Windows da fabriziert... Ich hab mal ein Bild erstellt mit den Mauskoordinaten an jeder Bildschirmecke:

    Screen 1+2 sind beides 27" 4k (3840x2160) Bildschirme und werden auch mit der Auflösung dargestellt.

    Screen 3+4 sind beides 24" FHD (1920x1080) Bildschirme und werden auch mit der Auflösung dargestellt.

    screenData.png

    Das macht auf den ersten Blick alles überhauptkeinen Sinn. Hängt aber mit der DPI zusammen.

    Mir ist grad beim schreiben hier eingefallen, dass ich das Problem schonmal hatte und die Lösung war, dem Process DPI-Awareness zu geben:

    AutoIt
    Global Const $PROCESS_DPI_UNAWARE = 0
    Global Const $PROCESS_SYSTEM_DPI_AWARE = 1
    Global Const $PROCESS_PER_MONITOR_DPI_AWARE = 2
    _WinAPI_SetProcessDpiAwareness($PROCESS_PER_MONITOR_DPI_AWARE)
    
    Func _WinAPI_SetProcessDpiAwareness($DPIAware)
      DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", $DPIAware)
      If @error Then Return SetError(1, 0, 0)
    EndFunc

    Dann sind die Koordinaten von -1920 bis 5760 in der Breite richtig und auch die Höhe passt mit -2160 bis 2160 über alle Bildschirme.

    Das Problem mit dem rechten/linken Bildschirm bleibt aber leider trotzdem, nur dass beim linken Bildschirm mit der DPI-Awareness das Fenster auf dem mittleren Screen angezeigt wird.

    Ich hab auch mal die Zahlen für jeden Klick von Bildschirm 1 bis 4 ausgegeben, vllt. hilft dir das weiter (ConsoleWrite(MouseGetPos(1)&":"&MouseGetPos(2)&" >> "&$px&":"&($iMonitorY + MouseGetPos(1) - $aPos[3] - $iWinTitleSize * $aDPI[1])&" >> "&$aPos[2]&":"&$aPos[3]&@CRLF)) :

    Code
    Added 128 items to the list
    Error getting icon pos in taskbar
    2151:1 >> 0:1122.75 >> 1920:960
    Error getting icon pos in taskbar
    -29:1 >> 0:-1057.25 >> 1920:960
    Error getting icon pos in taskbar
    2140:1 >> -1920:1111.75 >> 1920:960
    Error getting icon pos in taskbar
    2133:1 >> 0:1104.75 >> 1920:960

    Ohne DPI-Awareness kommt übrigens folgendes dabei raus:

    Code
    Added 128 items to the list
    Error getting icon pos in taskbar
    1226:1 >> 0:656 >> 1097:548
    Error getting icon pos in taskbar
    -933:1 >> 0:-1503 >> 1097:548
    Error getting icon pos in taskbar
    2143:1 >> -1097:1573 >> 1097:548
    Error getting icon pos in taskbar
    2141:1 >> 0:1571 >> 1097:548

    Wobei 0:1571 zeigt, warum es beim linken Bildschirm ohne DPI-Awareness nicht sichtbar ist... 1571>1234 => Es landet unter dem primär Bildschirm (Screen 1).


    Ich würde sagen, ich decke mit meinen Bildschirmen die meisten Edgecases ab :rofl:

  • Toolbar Desktop v0.83 build 2025-10-08 beta

    • Kanashius
    • 14. Juli 2023 um 17:01
    Zitat von UEZ

    Kanashius ich habe eine neue Version hochgeladen. Kannst du bitte nochmals testen, ob das Fenster jetzt auf allen Monitoren angezeigt wird?

    Ne, funktioniert so nicht. Beim rechten+linken Bildschirm wird es garnicht angezeigt (vmtl. außerhalb des Bereichs), beim oberen wird es am unteren (primär Bildschirm) angezeigt.

    Ich geb dir mal meine Bildschirm Infos, vllt. hilft dir das weiter:

    Code
    Handle:      0x0000000000010003
    Rectangle:   0, -2160, 2194, -926
    Work area:   0, -2160, 2194, -926
    Primary:     0
    Device name: \\.\DISPLAY1
    DPI $MDT_EFFECTIVE_DPI: 96 -- 96
    DPI $MDT_ANGULAR_DPI: 91 -- 90
    DPI $MDT_RAW_DPI: 91 -- 91
    -----------------------------------
    Handle:      0x0000000000010005
    Rectangle:   3840, 1072, 5760, 2152
    Work area:   3840, 1072, 5760, 2152
    Primary:     0
    Device name: \\.\DISPLAY5
    DPI $MDT_EFFECTIVE_DPI: 96 -- 96
    DPI $MDT_ANGULAR_DPI: 94 -- 94
    DPI $MDT_RAW_DPI: 95 -- 95
    -----------------------------------
    Handle:      0x0000000000010007
    Rectangle:   -1920, 1074, 0, 2154
    Work area:   -1920, 1074, 0, 2154
    Primary:     0
    Device name: \\.\DISPLAY6
    DPI $MDT_EFFECTIVE_DPI: 96 -- 96
    DPI $MDT_ANGULAR_DPI: 90 -- 90
    DPI $MDT_RAW_DPI: 91 -- 91
    -----------------------------------
    Handle:      0x0000000000090129
    Rectangle:   0, 0, 2194, 1234
    Work area:   0, 0, 2194, 1234
    Primary:     1
    Device name: \\.\DISPLAY2
    DPI $MDT_EFFECTIVE_DPI: 96 -- 96
    DPI $MDT_ANGULAR_DPI: 89 -- 91
    DPI $MDT_RAW_DPI: 90 -- 91
    Alles anzeigen
  • Toolbar Desktop v0.83 build 2025-10-08 beta

    • Kanashius
    • 14. Juli 2023 um 14:36

    Funktioniert mit WIN10 (v10.0.19045).

    Verbesserungsvorschläge:

    Technisch:

    - Wird immer auf dem Hauptbildschirm eingeblendet. Evtl. anpassen, wenn die Maus auf nem anderen Bildschirm ist.

    - Du ließt die Dateien von @DesktopDir und @DesktopCommonDir. Hat mich etwas verwirrt, weil plötzlich nen haufen Shortcuts von Programmen aufgetaucht sind, die unter Public->Desktop zu finden sind, die ich aber auf meinem schon ewig gelöscht hatte. Keine Ahnung, ob das gewollt ist.

    Optisch:

    - Schrift-/Icongröße könnte man noch an die DPI anpassen. Hab grad in den Quellcode geschaut: Es wird der falsche Monitor gelesen. Es macht ggf. Sinn, mit _WinAPI_GetMonitorInfo den Primären Bildschirm herauszufinden, oder mit _WinAPI_MonitorFromPoint den aktuellen (Mauspositions) Bildschirm wenn du das Fenster auf mehreren Bildschirmen anzeigen lassen willst.

    - Es gibt nen schmalen Spalt zwischen der Taskleiste und dem Fenster (ca. 5px). Keine Ahnung, ob das gewollt ist, oder ob mit WIN11 die Höhe verändert wurde, oder ob es daran liegt, dass sich meine Taskleiste automatisch ausblendet.

  • grundsätzliche Fragen zu Browser

    • Kanashius
    • 8. Juli 2023 um 15:39

    Hi,

    die "Webseite", verwendet gespeicherte Audiodateien, die einfach nur abgespielt werden. Die sind als Base64 in js-Dateien gespeichert.

    Ich würde also ein Script schreiben, dass das ganze extrahiert und wieder als Audiodateien speichert, mit https://www.autoitscript.com/forum/topic/19…ode-extra-fast/

    Danach kannst du selbst den Code schreiben, der die passenden Dateien zur aktuellen Uhrzeit raussucht und mit SoundPlay den Sound abspielen.

    Dann brauchst du keine Browser.

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™