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

Beiträge von Bitnugger

  • VSCodium - Editor: Breite ändern

    • Bitnugger
    • 22. Mai 2020 um 21:15

    Moin,

    ich möchte die Breite der Editor-Fenster ändern... wobei dann das jeweils andere natürlich schmaler wird... geht das, und wenn ja, wie?

    Ich suche mich dämlich, finde aber nichts zu meiner Frage.

    Im Bild sieht man zwei Editor-Fenster: BassTest.nim und blancedPairs.nim

    VSCodium.png

    Ich kann zwar das rechte Fenster nach rechts verschieben, wie hier im Bild zu sehen ist, aber dadurch wird das linke Fenster ja leider nicht breiter.

    VSCodium_2.png

  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 22. Mai 2020 um 20:48
    Zitat von Windi

    Hab nur gedacht weil das von Bitnugger kam!

    Obwohl das Thema schon abgehakt war.

    Nun ja, für dich ist es abgehakt, aber hier im Forum nicht. Zudem hatte dieser Beitrag auch einen Informationswert für dich, auch wenn du ihn nicht erkannt hast.

    Denn es ging ja um das Pattern in dem RegEx für dein LatLon... das solltest du übrigens so ändern, weil es sicherer ist: '<(?:lat|lon)>([^<]+)</(?:lat|lon)>'

    Zitat von Windi

    ich brauche so was.

    Ich denke nicht... was du brauchst, ist in etwa - mal als exemplarisches, nicht funktionierendes Beispiel, obwohl ich von diesem Thema fast null Ahnung habe - so was:

    AutoIt
    #include <IE.au3>
    
    ; Get a reference to a specific form element and set its value.
    ; Call _IELoadWait manually if the default _IELoadWait experiences trouble.
    Local $oIE = _IECreate("http://169.254.255.1/pcmi/?locale=de_de")
    
    ;~ Local $oForm = _IEFormGetCollection($oIE, 0)
    ;~ Local $oPOI = _IEFormElementGetCollection($oForm, 4)
    Local $oPOI = _IEFormElementGetObjByName($oIE, 'poiForm')
    
    _IEFormElementSetValue($oPOI, "file:///<Pfad zu deiner POI-Datei>")
    Sleep(2000)
    _IEFormSubmit($oForm)
    _IELoadWait($oIE)
    Alles anzeigen
  • InputBox() nach vorne bringen

    • Bitnugger
    • 22. Mai 2020 um 13:57

    Ich habe hier mal zur Inspiration ein paar Zeilen geschrieben, mit denen einer InputBox und _ArrayDisplay/_DebugArrayDisplay das TopMost-Attribut verpasst werden kann.

    Zitat von HansJ54

    Und zusätzlich noch dazu einen OK und CANCEL - Button.

    Du meinst für _ArrayDisplay? dann schau dir mal _DebugArrayDisplay an...

    AutoIt: _SetWinOnTop.au3
    ;-- TIME_STAMP   2020-05-22 13:57:07   v 0.1
    
    #include <Array.au3>
    #include <Debug.au3>
    #include <Misc.au3>
    #include <WinAPISysWin.au3>
    
    Opt('MustDeclareVars', 1)
    Opt('TrayAutoPause', 0)
    
    Global $g_aWindows = [['Question', '#32770'], ['$aArray', 'AutoIt v3 GUI']]
    Global $hTimerProc = DllCallbackRegister('_SetWinOnTop', 'none', 'hwnd;uint;uint_ptr;dword')
    Global $iTimerID = _WinAPI_SetTimer(0, 0, 1000, DllCallbackGetPtr($hTimerProc))
    
    Local $sAnswer = InputBox("Question", "Where were you born?", "Planet Earth", "", - 1, -1, 0, 0)
    Local $sAnswer2 = InputBox("Question", "What is your mother's first name?", "Mom", "", - 1, -1, 0, 0)
    
    Local $aArray = [1,2,3]
    _DebugArrayDisplay($aArray, '$aArray')
    
    ConsoleWrite(@CRLF & '> Press ESC for Exit' & @CRLF & @CRLF)
    
    Do
        Sleep(100)
    Until _IsPressed('1B') ; ESC
    
    _WinAPI_KillTimer(0, $iTimerID)
    DllCallbackFree($hTimerProc)
    
    Func _SetWinOnTop($hWnd, $iMsg, $iTimerID, $iTime)
        #forceref $hWnd, $iMsg, $iTimerId, $iTime
        Local Static $aWindows[0]
        Local Enum $eTitle, $ehWnd
        Local $aList, $aWinList[0][2]
        For $w = 0 To UBound($g_aWindows) -1 Step 1
            $aList = WinList($g_aWindows[$w][$eTitle])
            If UBound($aList) < 2 Then ContinueLoop
            For $l = $aList[0][0] To 1 Step -1
                If Not _WinAPI_IsClassName($aList[$l][$ehWnd], _WinAPI_GetClassName($aList[$l][$ehWnd])) Or WinGetProcess($aList[$l][$ehWnd]) <> @AutoItPID Then
                    _ArrayDelete($aList, $l)
                    $aList[0][0] -= 1
                EndIf
            Next
            If UBound($aList) > 1 Then _ArrayConcatenate($aWinList, $aList)
            If @error Then ConsoleWrite('_ArrayConcatenate @error = ' & @error & @CRLF)
        Next
    
        If UBound($aWinList) > 1 Then
            For $i = 1 To $aWinList[0][0] Step 1
                _ArraySearch($aWindows, $aWinList[$i][1])
                If @error Then
                    _ArrayAdd($aWindows, $aWinList[$i][1])
                    ConsoleWrite('! _SetWinTop('&$aWinList[$i][$ehWnd]&') ; Title: "' & $aWinList[$i][$eTitle] & '"' & @CRLF)
                    WinSetOnTop($aWinList[$i][$ehWnd], '', $WINDOWS_ONTOP) ; 1
                EndIf
                If UBound($aWindows) Then
                    For $j = UBound($aWindows) -1 To 0 Step -1
                        If Not WinExists($aWindows[$j]) Then
                            ConsoleWrite('- DeleteHwndFromArray: ' & $aWindows[$j] & @CRLF)
                            _ArrayDelete($aWindows, $j)
                        EndIf
                    Next
                EndIf
            Next
        EndIf
    EndFunc   ;==>_SetWinOnTop
    Alles anzeigen
  • Browser aus der Taskleiste selektiv beenden

    • Bitnugger
    • 22. Mai 2020 um 11:42

    Das kannst du in etwa so machen:

    AutoIt
    ;~ #RequireAdmin ; only for SeDebugPrivilege
    
    #include <Array.au3>
    ;~ #include <WinAPIHObj.au3> ; only for SeDebugPrivilege
    #include <WinAPIProc.au3>
    
    Local $aAdjust, $aList = 0, $aVivaldi[0][3], $aProcessCommandLines = ['--ignore-certificate-errors', '--profile:Developer']
    
    ; Enable "SeDebugPrivilege" privilege for obtain full access rights to another processes
    ;~ Local $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
    
    ;~ _WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)
    
    ; Retrieve command-line arguments for vivaldi
    ;~ If Not (@error Or @extended) Then ; <<<=== _WinAPI_AdjustTokenPrivileges
        $aList = ProcessList()
        For $i = 1 To $aList[0][0]
            If $aList[$i][0] = 'vivaldi.exe' Then
                For $j = 0 To UBound($aProcessCommandLines) -1 Step 1
                    If _WinAPI_GetProcessCommandLine($aList[$i][1]) = $aProcessCommandLines[$j] Then
                        _ArrayAdd($aVivaldi, $aList[$i][0] & '|' & $aList[$i][1] & '|' & $aProcessCommandLines[$j])
                        ExitLoop
                    EndIf
                Next
            EndIf
        Next
    ;~ EndIf
    
    ; Enable SeDebugPrivilege privilege by default
    ;~ _WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
    ;~ _WinAPI_CloseHandle($hToken)
    
    _ArrayDisplay($aVivaldi, '_WinAPI_GetProcessCommandLine', '', 0, Default, 'Name|PID|ProcessCommandLine')
    If UBound($aVivaldi) Then
        For $i = 0 To UBound($aVivaldi) -1 Step 1
            ProcessClose($aVivaldi[$i][1])
        Next
    EndIf
    Alles anzeigen
  • [Nim] Multi-Monitor-Auswahl

    • Bitnugger
    • 22. Mai 2020 um 10:11

    "message": "using '.' instead of '/' in import paths is deprecated

    import winim.inc.winspool

  • JSON-UDF

    • Bitnugger
    • 21. Mai 2020 um 11:39

    Gefällt es dir so besser: Du hast es auf ANSI, ich aber auf UTF-8 umgestellt, weil ich damit besser leben kann. Der Nachteil dabei ist, dass sich ANSI und UTF-8 nicht sonderlich gut vertragen. ;)

  • JSON-UDF

    • Bitnugger
    • 21. Mai 2020 um 09:46
    Zitat von AspirinJunkie

    Also, dass die Umlaute nicht korrekt dargestellt werden liegt an deinem _WinAPI_WideCharToMultiByte.

    Ja, aber nur bei dir, weil du dein SciTE noch auf ANSI stehen hast... ich habe bei mir auf UTF-8 umgestellt und deshalb brauche ich das _WinAPI_WideCharToMultiByte.

    Zitat von AspirinJunkie

    Hab die UDF korrigiert und neu hochgeladen.

    Sehr schön, danke!

  • Ausbalanzierte Stringsequenzen

    • Bitnugger
    • 21. Mai 2020 um 06:23

    Bis vorhin war ich noch dabei, den OranizeIncludes ein wenig umzustricken, wobei mir dann die Idee kam, mal in den IncludesHelper zuschauen, wie er das da so macht. Da habe ich dann gesehen, dass er da eine "DelComment.dll" als Binary drin hat, die er mit:

    $var = MemoryDllCall($DllHandle, 'str', 'DelComment', 'str', $sFile, 'int', $onlyINCL)

    aufruft... ich habe das Teil dann mal als Dll gespeichert und die Dll mit deiner fiktiven Programmzeile konfrontiert. :D

    So sieht das Ergebnis aus:

    ;~ _SomeFunc($param1, '"', ';', "'", $param5, "text, text, text", '"') ; Kommentar, hat auch "string"

    ;~ _SomeFunc($param1, '', '', "", $param5, "", '') ; <<<===

    Ok, ist also nicht zu gebrauchen und den IncludesHelper werde ich dann wohl besser nicht mehr benutzen. Es ist aber sicher keine schlechte Idee, diese Dinge rund um Includes mit einer Dll (Nim-Dll?) zu erledigen.

    Wollte es euch aber nicht vorenthalten... wenn ich die Dll hier uppen soll, gebt Bescheid.

    OranizeIncludes... die Frage zu rekursivem Suchen nach Includes in Includes ist hiermit ja wohl beantwortet:

    AutoIt
    Func _getIncludesOfIncludes()
        ; #### TO DO
    EndFunc   ;==>_getIncludesOfIncludes

    Hm, recursiv... ist das denn nicht eher ein iteratives Durchsuchen?

    So, jetzt noch schnell ne Mütze voll Schlaf nehmen...

    Bye ;)

  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 21. Mai 2020 um 00:58

    Ja leck mich doch... so einfach kann RegEx sein... :rofl:

    AutoIt: LatLon.au3
    ;-- TIME_STAMP   2020-05-21 00:57:19   v 0.1
    
    Opt('MustDeclareVars', 1)
    
    #include <Array.au3>
    #include <Debug.au3>
    
    ; String mit gemischten Zeilenumbrüchen sind für RegExp kein Problem!
    Global $j = 0, $aLatLon1D, $aLatLon2D[0][2], $aSource, $strXML = _
            "<countryCode>DE</countryCode>" & @CRLF & _
            "<country>Deutschland</country>" & @CRLF & _
            "<countryCodeISO3>DEU</countryCodeISO3>" & @CRLF & _
            "<freeformAddress>Musterstraße 4, 01234 Muster</freeformAddress>" & @CRLF & _
            "<localName>Musterhausen</localName>" & @CRLF & _
            "</address>" & @CRLF & _
            "<position>" & @CRLF & _
            "<lat>49.90707</lat>" & @CR & _ ; <<<<<<======
            "<lon>7.81838</lon>" & @LF & _  ; <<<<<<======
            "</position>" & @CR & _         ; <<<<<<======
            "<viewport>" & @CRLF & _
            "<countryCode>DE</countryCode>" & @CRLF & _
            "<country>Deutschland</country>" & @CRLF & _
            "<countryCodeISO3>DEU</countryCodeISO3>" & @CRLF & _
            "<freeformAddress>Musterstraße 4, 01234 Muster</freeformAddress>" & @CRLF & _
            "<localName>Musterhausen</localName>" & @CRLF & _
            "</address>" & @CRLF & _
            "<position>" & @CRLF & _
            "<lat>52.40301</lat>" & @CR & _ ; <<<<<<======
            "<lon>3.61739</lon>" & @LF & _  ; <<<<<<======
            "</position>" & @CR & _         ; <<<<<<======
            "<viewport>" ; & @CRLF          ; <<<<<<====== das @CRLF wird auch eliminiert, falls vorhanden
    $aSource = StringRegExp($strXML, "(?m)(.+)\R", 3)
    _DebugArrayDisplay($aSource, '$aSource')
    
    ;~ $aLatLon = StringRegExp($strXML, '<lat>(.*?)<\/lat>|<lon>(.*?)<\/lon>', 3) ; <<<=== OMG!!!
    ;~ $aLatLon = StringRegExp($strXML, '<lat>(.+)<\/lat>|<lon>(.+)<\/lon>', 3)   ; <<<=== OMG!!!
    
    ; Boar... und dafür braucht man dann Tage... ich fasse es nicht! ^^^ ;-)
    $aLatLon1D = StringRegExp($strXML, '>(\d+\.\d*)<', 3) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<============= Tada ;-) =================
    
    _DebugArrayDisplay($aLatLon1D, '$aLatLon1D', '', 0, Default, 'Lat/Lon')
    ReDim $aLatLon2D[UBound($aLatLon1D) / 2][2]
    For $i = 0 To UBound($aLatLon1D) -1 Step 1
        $aLatLon2D[$j][(Mod($i +1, 2) ? 0 : 1)] = $aLatLon1D[$i]
        If Not Mod($i +1, 2) Then $j += 1
    Next
    $aLatLon1D = ''
    _DebugArrayDisplay($aLatLon2D, '$aLatLon2D', '', 0, Default, 'Lat|Lon')
    Alles anzeigen
  • JSON-UDF

    • Bitnugger
    • 20. Mai 2020 um 23:19

    Moin AspirinJunkie ,

    bei diesem Script wird ein 'krummes' Zeichen ausgegeben... könntest du bitte mal schauen, ob du den Fehler findest - danke!

    AutoIt
    ;-- TIME_STAMP   2020-05-20 22:35:29   v 0.1
    
    #include <Json.au3> ; (by @AspirinJunkie)
    #include <WinAPIConv.au3>
    
    ;~ HotKeySet('^!+G', '_HotKey')
    
    Global $sRead1 = "Executes a drag-and-drop operation. Supports drag source creation on demand, as well as drag images."
    ;~ ..............................^^^^^ - diese Stelle wird nach dem Aufruf von _GoogleAPITranslate...
    
    ConsoleWrite("> >> EN->DE  : " & _GoogleAPITranslate($sRead1, "en", "de") & @CRLF)
    ;* > >> EN->DE  : Führt einen Drag  Drop-Vorgang aus. Unterstützt die Erstellung von Drag-Source-Quellen bei Bedarf sowie das Ziehen von Bildern.
    ;~ ...............................^^^... durch " SUB " = Chr(32)Chr(26)Chr(32) = 0x201A20 ersetzt.
    
    ;~ So funktioniert es korrekt:
    $sRead1 = "Executes a drag\-and\-drop operation. Supports drag source creation on demand, as well as drag images."
    ConsoleWrite("> >> EN->DE  : " & _GoogleAPITranslate($sRead1, "en", "de") & @CRLF)
    
    ;~ Liegt das jetzt an Google oder an deiner UDF?
    
    Exit
    
    While Sleep(500)
    WEnd
    
    ; ------------ Function : ---------------
    Func _GoogleAPITranslate($sMytext, $sFrom, $sTo)
        Local $sUrl, $oHTTP, $sResponse, $JSONData, $sOutput = "", $aData
        $sUrl = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=" & $sFrom & "&tl=" & $sTo & "&dt=t&q=" & $sMytext
        $oHTTP = ObjCreate("Microsoft.XMLHTTP")
        $oHTTP.Open("POST", $sUrl, False)
        $oHTTP.Send()
        $sResponse = $oHTTP.ResponseText
        $JSONData = _JSON_Parse($sResponse)
        If IsArray($JSONData) Then
            $aData = $JSONData[0]
            If IsArray($aData) Then
                For $i = 0 To UBound($aData) - 1 Step 1
                    $sOutput &= ($aData[$i])[0] ;*** & @CRLF
                Next
            EndIf
        EndIf
    
        Local Static $iLoop = 1
        If $iLoop Then
            $iLoop = 0
            ConsoleWrite('! Asc($sOutput) von Pos. 17 - 19:' & @CRLF & '! 17, 18, 19' & @CRLF & '> ')
            For $i = 17 To 19 Step 1
                ConsoleWrite(Asc(StringMid($sOutput, $i, 1)) & ($i = 19 ? '' : ', '))
            Next
            ConsoleWrite(@CRLF)
        EndIf
    
    ;~  Return $sOutput
    ;~  Return _WinAPI_MultiByteToWideChar($sOutput, 65001, 0, True)
        Return _WinAPI_WideCharToMultiByte($sOutput, 65001)
    EndFunc   ;==>_GoogleAPITranslate
    
    Func _HotKey()
        Local Static $iBlock = 0
        $iBlock += 1
        If $iBlock > 1 Then Return
        ConsoleWrite(ClipGet() & @CRLF)
        ClipPut(_GoogleAPITranslate(ClipGet(), 'en', 'de'))
        ConsoleWrite(ClipGet() & @CRLF)
        $iBlock = 0
    EndFunc   ;==>_HotKey
    Alles anzeigen
  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 20. Mai 2020 um 22:28

    Da ich kein TomTom habe, verstehe ich nur Bahnhof, Koffer klauen... hast du hier geschaut: http://de.support.tomtom.com/app/answers/de…tionsger%C3%A4t

  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 20. Mai 2020 um 22:17
    Zitat von Windi

    Hier komme ich nicht weiter.

    Vielleicht hilft das: https://discussions.tomtom.com/de/discussion/comment/1625048

  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 20. Mai 2020 um 22:08
    Zitat von Musashi

    $strXML = StringRegExpReplace($strXML, "(?m)(\R)+", @CRLF)
    $aSource = StringSplit($strXML, @CRLF, $STR_ENTIRESPLIT) ; wandelt quellcode String in Array

    Wieso nicht direkt mit StringRegExp?

    AutoIt
    #include <Array.au3>
    
    ; String mit gemischten Zeilenumbrüchen sind für RegExp kein Problem!
    Global $aLatLon, $aSource, $strXML = _
            "<countryCode>DE</countryCode>" & @CRLF & _
            "<country>Deutschland</country>" & @CRLF & _
            "<countryCodeISO3>DEU</countryCodeISO3>" & @CRLF & _
            "<freeformAddress>Musterstraße 4, 01234 Muster</freeformAddress>" & @CRLF & _
            "<localName>Musterhausen</localName>" & @CRLF & _
            "</address>" & @CRLF & _
            "<position>" & @CRLF & _
            "<lat>49.90707</lat>" & @CR & _ ; <<<<<<======
            "<lon>7.81838</lon>" & @LF & _  ; <<<<<<======
            "</position>" & @CR & _         ; <<<<<<======
            "<viewport>" ; & @CRLF          ; <<<<<<====== das @CRLF wird auch eliminiert, falls vorhanden
    $aSource = StringRegExp($strXML, "(?m)(.+)\R", 3)
    _ArrayDisplay($aSource, '$aSource')
    Alles anzeigen
  • Diskussion zu: FAQ SciTE Editor

    • Bitnugger
    • 20. Mai 2020 um 19:49
    Zitat von HansJ54

    Kannst Du mir auch noch kurz das Versioning erklären?

    Hm, ich denke mal, du meinst das hier: Using SVN Versioning on a local Computer

    Ich benutze allerdings eine einfachere Lösung von BugFix , da ich ein Einzelkämpfer bin: TimeStamp - erweitert zu kleiner Versionsverwaltung für (.au3 und .lua) alle Typen

    Das sieht dann etwa so aus:

    AutoIt
    ;-- TIME_STAMP   2020-05-20 17:16:44   v 0.1
    
    #include <WinAPIConv.au3>
    
    Global $g_iOutEncoding = Int(StringRegExpReplace(FileRead(@LocalAppDataDir & '\AutoIt v3\SciTE\SciTEUser.properties'), '(?s).+\Routput\.code\.page=(.+?)\R.*', '\1'))
    Global $g_iConOutEncoding = $g_iOutEncoding
    
    Local $sPath = @ScriptDir & '\test.txt', $sFile, $hFile = FileOpen($sPath, $FO_READ + $FO_ANSI) ; $FO_READ (0), $FO_BINARY (16), $FO_UTF8 (128), $FO_UTF8_NOBOM (256), $FO_ANSI (512)
    $sFile = FileRead($hFile)
    FileClose($hFile)
    If $sFile = '' Then
        ConsoleWrite('! Error $hFile = ' & $hFile & ' FileRead('&$sPath&')' & @CRLF)
        Exit 1
    EndIf
    Alles anzeigen

    Es können folgende Marker gesetzt werden (direkt hinter die aktuelle Versionsnummer):

    - v Subversionsnr. wird um 1 erhöht

    - V Mainversionsnr. wird um 1 erhöht, Subversionsnr. wird auf 0 gesetzt

    - n die autom. Zählung ist nicht aktiv - aber eine per Hand eingetragene Änderung der Versionsnr. wird übernommen

    Steht aber auch alles sehr gut erklärt auf der Seite...

  • VSCode bzw. VSCodium - Shortcut (Strg + k z) für Zen Mode funktioniert nicht

    • Bitnugger
    • 20. Mai 2020 um 18:47

    Ich habe den Zen Mode via Menu eingeschaltet und dann stand ich erst mal da... und wie nun wieder umschalten, wenn der Shortcut nicht funktioniert, der mir im Menu angezeigt wird?

    Da denkt man natürlich, dass irgendeine Software, die man installiert hat, diesen als globalen Hotkey benutzt... und dann habe ich bei Tante Google gesucht. Zuerst gefunden habe ich das hier, und dann das - und nun ist es mir egal, ob der funktioniert oder nicht. ;)

    Drückt man die linke Alt-Taste, wird auch im Zen Mode das Menu eingeblendet (so auch beim Firefox)... und man kann somit auch wieder via Menu umschalten... aber mit dem Extra Button finde ich einfach eleganter.

  • "Zertifikat auswählen" (Chrome) : Anzeige verhindern oder wie wegklicken?

    • Bitnugger
    • 20. Mai 2020 um 18:15

    Vielleicht hilft dir das: Client-Zertifikate für diese Websites automatisch auswählen

  • Ausbalanzierte Stringsequenzen

    • Bitnugger
    • 20. Mai 2020 um 17:20

    Aha... so kann ich es besser sehen: @@ Debug(19) : $sRet = ¹"²¹;²¹'²¹text, text, text²¹"²

    PS: Ausbalanzierte = Ausbalancierte (von balance)

  • Recursiv Verzeichnisse und Dateien umbenennen

    • Bitnugger
    • 20. Mai 2020 um 16:17

    Zuerst das Wichtigste: _WinAPI_EnumFiles unterschlägt definitiv Files und womöglich auch Folders, denn es sind bei meinem Test 6 Einträge weniger im Array, als mit _FileListToArrayRec! Der Sache werde ich aber noch nachgehen.

    Zitat von bazii

    If BitAND($aFilesFolder[$i][7], $FILE_ATTRIBUTE_DIRECTORY) Then _RenameRecursive($sPath & $aFilesFolder[$i][0])

    If BitAND(^ ERROR

    Der erste Index in einem Array fängt immer bei 0 an. Wenn das Array also 7 Spalten hat, gehen diese von 0 - 6!

    In der AutoIt-Hilfe zu _WinAPI_EnumFiles steht es sogar drin:

    Code
    ; a 2D array containing the following information:
    ; [0][0] - Number of rows in array (n)
    ; [0][i] - Unused
    ; [n][0] - The name of the file.
    ; [n][1] - The time (UTC) when the file was created.
    ; [n][2] - The time (UTC) when the file was last accessed.
    ; [n][3] - The time (UTC) when the file was last changed.
    ; [n][4] - The size of the file, in bytes.
    ; [n][5] - The allocation size of the file, in bytes.
    ; [n][6] - The file attributes ($FILE_ATTRIBUTE_*). <<<=== <<<=== <<<===

    Deine obige Zeile müsste ergo so aussehen:

    AutoIt
    If BitAND($aFilesFolder[$i][6], $FILE_ATTRIBUTE_DIRECTORY) Then _RenameRecursive($sPath & $aFilesFolder[$i][0])

    Bei Verwendung von _FileListToArrayRec nimmst du dann anstelle von

    If BitAND($aFilesFolder[$i][6], $FILE_ATTRIBUTE_DIRECTORY) Then ...

    If StringRight($aFilesFolder[$i], 1) = '\' Then ...

    Und was Geschwindigkeit angeht, ist _FileListToArrayRec sogar noch ein wenig schneller!

    Code
    ; _WinAPI_EnumFiles      ==>> Files + Folders = 47, Time = 14.2644, [n][1] - [n][6] brauchst du doch gar nicht?!
    ; _FileListToArrayRec    ==>> Files + Folders = 53, Time =  8.5151, $FLTAR_SORT, $FLTAR_FULLPATH
    ; _FileListToArrayRec    ==>> Files + Folders = 53, Time = 10.7491, $FLTAR_SORT, $FLTAR_NOPATH
    Zitat von bazii

    Jetzt sollte ich aber bis zu (geschätzten) 30 Varianten für verschiedene Zeichenersetzungen, in Datei- und Verzeichnisnamen recursiv vorzunehmen können.

    Oh, was ein lecker Deutsch... 8o

    Ja, es soll also dynamisch werden... dann solltest du keine fixen Werte nehmen, sondern die Zeichen für jede Variante in ein Input-Control eingeben, diese dann auslesen und in einer Datei (*.ini) speichern. Beim Start lädst du dann diese Ini-Datei, in der du dir dann auch merkst, welches Tabelle beim letzten Start aktiv war. Eine würde ich zumindest als Default speichern, dann hast du auch direkt schon etwas Futter für die Haie.

    Ich habe das in einigen meiner Projekte etwa so gelöst:

    Code: LPS_Manager.ini
    [UDP]
    # Pattern|Replace¦Pattern|Replace¦...
    LastUsedTable=ConversionTable_02
    TableSeparator="¦" # Chr(166)
    ConversionTable_01=ä|ä¦Ã„|Ħö|ö¦Ã–|֦ü|ü¦Ãœ|ܦß|ß
    ConversionTable_02=ä|ae¦ö|oe¦ü|ue¦ |_¦ß|ss
    ConversionTable_03=Reiner|Rainer¦Neustatt|Neustadt¦Marwel|Marvel¦Mar Wel|Marvel

    Die ConversionTables lade ich mir dann alle als Array in ein Array... ändert der User den Index für die aktuelle Tabelle, kopiere ich das benötigte Table-Array aus $g_aConversionTables[n] nach $g_aCurrentConversionTable.

    AutoIt
    $g_iCurrentConversionTable += 1
    If $g_iCurrentConversionTable < Ubound($g_aConversionTables) Then
        $g_aCurrentConversionTable = $g_aConversionTables[$g_iCurrentConversionTable]
    Else
        $g_iCurrentConversionTable -= 1
    EndIf

    _WinAPI_EnumFiles_Error.png

  • Diskussion zu: FAQ SciTE Editor

    • Bitnugger
    • 20. Mai 2020 um 13:41
    Zitat von HansJ54

    Habe ich vor kurzem mit der letzten AutoIt-Version bekommen

    Dann hättest du nur die SciTE-Lite... und die kannst du vergessen. Ob dem so ist, siehst du, wenn dir in Windows 10 unter Programe und Features keine SciTE4AutoIt3 angezeigt wird. Denn SciTE4AutoIt3 musst du separat installieren! Hier bekommst du es her: SciTE4AutoIt3 und dort wird auch erklärt, wie du es installieren musst. Wo du die ältere Version findest, kann ich momentan nicht sagen, aber notfalls kannst du sie von mir bekommen.

    Zitat von HansJ54

    Also SciTE neu aufsetzen - wie am sichersten und richtig?

    Das wie war ja schon geklärt... wie am sichersten... schwer zu beantworten, kommt auf deine Installation an, bzw. was du daran geändert hast... aber wenn du folgende Verzeichnisse sicherst, sollte nichts schief gehen:

    Halt, noch besser... hier kannst du sehen, wie ich es mache und hast somit auch gleich die Verzeichnisse... oder du benutzt meinen Batch... musst dann nur die Pfade anpassen.

    Code: AutoIt3_Backup.cmd
    @echo off & setlocal & cls
    
    :: AutoIt3_Backup.cmd
    
    :: xcopy /E /I /H /R /Y "c:\Users\ghost\AppData\Local\AutoIt v3\*.*"   b:\_Backup\AutoIt3\AutoIt3_Appdata
    :: xcopy /E /I /H /R /Y "f:\_Archive\_Programmieren\AutoIt3\*.*"       b:\_Backup\AutoIt3\AutoIt3_Archive
    :: xcopy /E /I /H /R /Y "c:\Program Files (x86)\AutoIt3\*.*"           b:\_Backup\AutoIt3\AutoIt3_Programm
    :: xcopy /E /I /H /R /Y "f:\_Scripts\AutoIt\*.*"                       b:\_Backup\AutoIt3\AutoIt3_Scripts
    
    set AU3_Appdata="c:\Users\ghost\AppData\Local\AutoIt v3"
    set AU3_Archive="f:\_Archive\_Programmieren\AutoIt3"
    set AU3_Programm="c:\Program Files (x86)\AutoIt3"
    set AU3_Scripts="f:\_Scripts\AutoIt"
    
    set SaveAs=b:\_Backup\AutoIt3\AutoIt3_Backup_%date:~6,4%.%date:~3,2%.%date:~0,2%_%time:~0,2%.%time:~3,2%.%time:~6,2%.7z
    set SaveAs=%SaveAs: =0%
    :: echo %SaveAs%
    
    7z.exe a -spf %SaveAs% %AU3_Appdata% %AU3_Archive% %AU3_Programm% %AU3_Scripts%
    
    timeout /T 3
    Alles anzeigen
  • Tomtom Navi prüfen ob Netzwerk aktiv ist

    • Bitnugger
    • 20. Mai 2020 um 13:04
    Zitat von Windi

    Ich habe folgendes geändert von Bitnugger dann läuft es.

    Das war nicht von mir, sondern von @Musashi.

    Das $STR_ENTIRESPLIT sorgt dafür, dass die @CRLF, die ja aus zwei Zeichen bestehen, wie eines behandelt wird. Lässt du das $STR_ENTIRESPLIT weg, wird bei @CR und bei @LF gesplittet. Da es bei dir nicht funktioniert, kann es gut sein, dass du in der Variable $strXML gemischte Zeilenumbrüche hast... also mal @CRLF, mal nur @LF oder @CR... denn bei mir funktioniert das Script von ihm.

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™