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

  • Fehler in der ENGLISCHEN Hilfe bitte hier melden

    • Bitnugger
    • 25. Dezember 2020 um 01:18

    _GUICtrlEdit_SetRECT

    Im Example ist folgende Zeile falsch, da die Parts für die StatusBar so nicht alle sichbar sind.

    Local $aPartRightSide[6] = [50, 130, 210, 290, 378, -1], $aRect

    So wäre es korrekt:

    Local $aPartRightSide[6] = [50, 87, 87, 87, 87, -1], $aRect

    ​_GUICtrlEdit_SetRECT.jpg

    Setzt man die Parts nicht mit _GUICtrlStatusBar_Create, sondern mit _GUICtrlStatusBar_SetParts, passt es auch:

    Local $aPartRightSide[6] = [50, 130, 210, 290, 378, -1], $aRect

    ​_GUICtrlEdit_SetRECT_2.jpg

  • WM_SETTINGCHANGE

    • Bitnugger
    • 15. Dezember 2020 um 18:07
    Zitat von Moombas

    Das funktioniert und ich wäre da selber nicht drauf gekommen.

    Dann habe ich ja mal sehr gut geraten... wenn es funktioniert, wieso setzt du den Thread dann nicht auf gelöst?

    Hier noch ein Schnipsel für dich:

    AutoIt: _WinAPI_SendMessageTimeout_Example.au3
    ;-- TIME_STAMP   2020-12-15 18:04:16   v 0.1
    
    #include <APISysConstants.au3>  ; $HWND_BROADCAST, $SMTO_ABORTIFHUNG
    #include <WindowsConstants.au3> ; $WM_SETTINGCHANGE
    #include <WinAPISysWin.au3>     ; _WinAPI_SendMessageTimeout
    
    _SETTINGCHANGE()
    
    Func _SETTINGCHANGE()
        Local $vCheck = '', $sSID = _GetSID(@UserName)
        If $sSID = '' Then Exit ConsoleWrite('! Fehler bei _GetSID, $sSID = ' & $sSID & @CRLF)
    
        __SetvCheck($vCheck, __RegWrite("HKEY_CLASSES_ROOT\Applications\Fotoviewer.exe\shell\open\command", "", "REG_SZ", '"C:\Fotoviewer.exe" "%1"'))
        __SetvCheck($vCheck, __RegWrite("HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\Shell\MuiCache", "C:\Fotoviewer.exe", "REG_SZ", 'Fotoviewer.exe'))
        __SetvCheck($vCheck, __RegWrite("HKEY_USERS\" & $sSID & "\Software\Classes\Applications\Fotoviewer.exe\shell\open\command", "", "REG_SZ", '"C:\Fotoviewer.exe" "%1"'))
        __SetvCheck($vCheck, __RegWrite("HKEY_USERS\" & $sSID & "\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache", "C:\Fotoviewer.exe", "REG_SZ", 'Fotoviewer.exe'))
        __SetvCheck($vCheck, __RegWrite("HKEY_USERS\" & $sSID & "\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithList", "b", "REG_SZ", 'Fotoviewer.exe'))
        __SetvCheck($vCheck, __RegWrite("HKEY_USERS\" & $sSID & "\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice", "Progid", "REG_SZ", 'Applications\Fotoviewer.exe'))
    
        If $vCheck = '111111' Then
            ; Syntax: _WinAPI_SendMessageTimeout ( $hWnd, $iMsg [, $wParam = 0 [, $lParam = 0 [, $iTimeout = 1000 [, $iFlags = 0]]]] )
    
            ; Hier ein Link, der zumindest in den ersten Sekunden vielversprechend aussah: https://www.angryadmin.co.uk/?tag=wm_settingchange
            ; Wie kommt der auf den Wert 5000?
    
            ; Ausgehend von dem, was er da schreibt, bin ich zu folgender Lösung gekommen:
            ; [win32.nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE,[uintptr]::Zero, "Environment", 2                , 5000             , [ref]$result);
            ; _WinAPI_SendMessageTimeout (              $hWnd          , $iMsg            , $wParam = 0   , $lParam = 0  , $iTimeout = 1000 , $iFlags = 0]]]] )
    
            Local $hWnd = $HWND_BROADCAST, $iMsg = $WM_SETTINGCHANGE, $wParam = 0, $lParam = 'Environment', $iTimeout = 1000, $iFlags = $SMTO_ABORTIFHUNG
            _WinAPI_SendMessageTimeout($hWnd, $iMsg, $wParam, $lParam, $iTimeout, $iFlags)
        Else
            ConsoleWrite('! Fehler bei __RegWrite, $vCheck = ' & $vCheck & @CRLF)
        EndIf
    EndFunc
    
    Func _GetSID($sUser)
        Local $iPID = Run('wmic useraccount where name="'&$sUser&'" get sid', '', @SW_HIDE, $STDOUT_CHILD)
        ProcessWaitClose($iPID)
        Local $aOutput = StringSplit(StringStripWS(StdoutRead($iPID), 2), @CRLF, 3)
        Return UBound($aOutput) > 1 ? $aOutput[1] : ''
    EndFunc
    
    Func __SetvCheck(ByRef $vCheck, $sRegWrite)
        $vCheck = ($sRegWrite ? '1' : '0') & $vCheck
    EndFunc
    
    Func __RegWrite($sKeyName, $sValueName, $sType, $vValue)
        RegWrite($sKeyName, $sValueName, $sType, $vValue)
        Return RegRead($sKeyName, $sValueName) = $vValue
    EndFunc
    Alles anzeigen
  • WM_SETTINGCHANGE

    • Bitnugger
    • 14. Dezember 2020 um 17:00
    Zitat von Moombas

    Habe die Registryeinträge, die ich brauche oben nochmal angepasst. Sind ein paar weniger geworden

    Ja, weniger, aber für Helfende nicht mehr nutzbar... du solltest die Variablen vorab deklarieren bzw. kommentieren - wichtig, damit es funktioniert, wäre hier vor allem $cache und $SID.

    Zu dem Thema habe ich nicht wirklich brauchbare Ergebnisse finden können und somit schwindet auch mein Interesse, mich weiter damit auseinanderzusetzen.

    Hier ein Link, der zumindest in den ersten Sekunden vielversprechend aussah: https://www.angryadmin.co.uk/?tag=wm_settingchange

    Wie kommt der auf den Wert 5000?

    Meinem jetzigen Verständnis nach, sollte der Funktionsaufruf etwa so aussehen:

    AutoIt
    #include <APISysConstants.au3>  ; $HWND_BROADCAST, $SMTO_ABORTIFHUNG
    #include <WindowsConstants.au3> ; $WM_SETTINGCHANGE
    #include <WinAPISysWin.au3>     ; _WinAPI_SendMessageTimeout
    
    ;~ Syntax: _WinAPI_SendMessageTimeout ( $hWnd, $iMsg [, $wParam = 0 [, $lParam = 0 [, $iTimeout = 1000 [, $iFlags = 0]]]] )
    
    Local $hWnd = $HWND_BROADCAST, $iMsg = $WM_SETTINGCHANGE, $wParam = 0, $lParam = 'Environment', $iTimeout = 1000, $iFlags = $SMTO_ABORTIFHUNG
    _WinAPI_SendMessageTimeout($hWnd, $iMsg, $wParam, $lParam, $iTimeout, $iFlags)
  • Fehlerhafter Algorithmus - bleibt in der Endlosschleife hängen

    • Bitnugger
    • 12. Dezember 2020 um 16:04
    Zitat von autoiter

    Ich gehe bis 0, weil ich nach dem Einlesen das erste Element gelöscht habe und die Überschriften nicht mehr im Array sind - ist natürlich unnötig.

    Die erste Zeile im Array ist dann...

    #;I;II;III;IV;I;II;III;IV;I;II;III;IV;Total IV/Day/Worker;Neg Workers

    ...If $aDB[$ii][0] <= $iWorkersTemp Then ...wobei $aDB[$ii][0] dann ja zumindest einmal '#' wäre, wenn $ii = 0 ist?!

    So funktioniert es jedenfalls ohne Endlosschleife:

    AutoIt
    ;-- TIME_STAMP   2020-12-12 15:57:19   v 0.1
    
    ;~ #include <Array.au3>
    #include <File.au3>
    
    Global $g_iWorkers = 50
    
    _PossibleSetting()
    
    Func _PossibleSetting()
        Local $aDB
        _FileReadToArray("Workers.CSV", $aDB, 0, ";")
        _ArrayDelete($aDB, 0)
    ;~     Exit _ArrayDisplay($aDB)
    
        Local $aResults[10000], $iResultCount = 0, $sResultString = "", _
                $iHit = 0, $iWorkersTemp = $g_iWorkers
    
    ;~ ***    For $i = UBound($aDB) - 1 To 0 Step -1
        For $i = UBound($aDB) - 1 To 1 Step -1
            If $aDB[$i][0] <= $g_iWorkers Then
                $iHit = $i
                While $iWorkersTemp > 3
    ;~ ***                For $ii = $iHit To 0 Step -1
                    For $ii = $iHit To 1 Step -1
                            ConsoleWrite("> $iHit                        = " & $iHit & @LF)
                        If $aDB[$ii][0] <= $iWorkersTemp Then
                            $iHit = $ii
                            $iWorkersTemp -= $aDB[$ii][0]
                            $sResultString &= $ii & ","
    
                            ConsoleWrite("- $iWorkersTemp                = " & $iWorkersTemp & @LF)
                            ConsoleWrite("- $aDB[$ii][0]                 = " & $aDB[$ii][0] & @LF)
                            ConsoleWrite("- $iWorkersTemp - $aDB[$ii][0] = " & $iWorkersTemp & " - " & $aDB[$ii][0] & @LF)
                            ConsoleWrite("- $iHit                        = " & $iHit & @LF)
                            ConsoleWrite("- $sResultString               = " & $sResultString & @LF)
                            ExitLoop
                        EndIf
                    Next
                WEnd
                $sResultString &= "Rest " & $iWorkersTemp
                $aResults[$iResultCount] = $sResultString
                $sResultString = ""
                $iResultCount += 1
                $iWorkersTemp = $g_iWorkers
            EndIf
        Next
    
    ;~ ***    ReDim $aResults[$iResultCount + 1]
        ReDim $aResults[$iResultCount]
        _ArrayDisplay($aResults)
    ;~ _ArrayDisplay($aDB)
    EndFunc   ;==>_PossibleSetting
    Alles anzeigen
  • Fehlerhafter Algorithmus - bleibt in der Endlosschleife hängen

    • Bitnugger
    • 12. Dezember 2020 um 15:17

    For $i = UBound($aDB) - 1 To 0 Step -1

    To 0... das kann nicht richtig sein... To 1 wäre wohl richtig... so ganz verstehe ich aber eh nicht den Aufbau deiner Liste.

    Zitat von autoiter

    Man hat insgesamt 6.

    Minen? - Dann schreibe das doch auch dabei... ==>> Man hat insgesamt 6 Minen.

    Zitat von autoiter

    Ich möchte sie möglichst effizient verteilen ...

    Die Arbeiter? - Dann schreibe das doch auch dabei... ==>> Ich möchte die Arbeiter möglichst effizient verteilen ...

  • WM_SETTINGCHANGE

    • Bitnugger
    • 11. Dezember 2020 um 18:38

    Welche Problem in Windows 7?

    Als temporäre Notlösung könntest du die explorer.exe neu starten... ich schau morgen mal, ob ich dafür eine Lösung finde... wenn ja, melde ich mich wieder.

    ProcessClose('explorer.exe')

    Run('explorer.exe')

  • WM_SETTINGCHANGE

    • Bitnugger
    • 11. Dezember 2020 um 14:33

    Welche Registryänderungen wurden denn gemacht? Evtl. kann ich dann ja mal testen...

  • WM_SETTINGCHANGE

    • Bitnugger
    • 11. Dezember 2020 um 14:28
    Zitat von Moombas

    Correct?

    Kann ich dir nicht sagen, denn ich habe die Funktion auch noch nie benutzt. Anstelle von $hWnd würde ich jedoch $HWND_BROADCAST (0xFFFF) verwenden, damit alle Top-Level-Windows diese Nachricht erhalten.

  • WM_SETTINGCHANGE

    • Bitnugger
    • 11. Dezember 2020 um 14:04
    Zitat von Moombas

    Könnt ihr mir sagen, wie ich WM_SETTINGCHANGE per autoit sende?

    Guckst du hier: https://docs.microsoft.com/en-us/windows/…m-settingchange

    und hier: https://docs.microsoft.com/en-us/windows/…messagetimeouta

    und hier: https://www.autoitscript.com/autoit3/docs/l…sageTimeout.htm

  • _Singleton ... AutoItWinSetTitle

    • Bitnugger
    • 11. Dezember 2020 um 13:33
    Zitat von GML

    löst zwar nicht das Verhalten von _singleton (warum es auf einem PC geht, am anderen nicht)

    Teste bitte mal, ob es so funktioniert:

    AutoIt
    ;-- TIME_STAMP   2020-12-11 13:48:47   v 0.1
    
    #include <GUIConstants.au3>
    #include <Misc.au3>
    
    If Not @Compiled Then Exit MsgBox(64, @ScriptName, 'Du musst das Script erst kompilieren und dann die Exe (via Kontextmenü) starten!')
    
    Global $g_sWinTitle = 'AutoIt-Test', $g_hGUI, $g_idEdit
    
    If _Singleton("Global\testprog", 3) Then
        $g_hGUI = GUICreate($g_sWinTitle, 708, 579, 193, 125)
        $g_idEdit = GUICtrlCreateEdit("", 0, 0, 705, 577)
        GUICtrlSetFont(-1, 11, 800, 0, 'Courier New')
        GUISetState(@SW_SHOW)
    
        GUICtrlSetData($g_idEdit, 'OK - This is the first occurrence of ' & @ScriptName & @CRLF & ($CMDLINE[0] ? '--> ' & $CMDLINE[1] & @CRLF : ''))
    
        GUIRegisterMsg($WM_COPYDATA, "MY_WM_COPYDATA")
    
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
            EndSwitch
        WEnd
    Else
        $g_hGUI = WinGetHandle($g_sWinTitle)
        _SendMsg('WARNING - An occurrence of ' & @ScriptName & ' is already running' & @CRLF & ($CMDLINE[0] ? '--> ' & $CMDLINE[1] & @CRLF : ''))
        Exit
    EndIf
    
    Func _SendMsg($_sCmd)
        Local $tCmdStruct = DllStructCreate('CHAR[' & StringLen($_sCmd) + 1 & ']')
        DllStructSetData($tCmdStruct, 1, $_sCmd)
        Local $tCOPYDATA = DllStructCreate('ULONG_PTR;DWORD;PTR')
        DllStructSetData($tCOPYDATA, 1, 1)
        DllStructSetData($tCOPYDATA, 2, StringLen($_sCmd) + 1)
        DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tCmdStruct))
        DllCall('User32.dll', 'NONE', 'SendMessage', _
                'HWND', $g_hGUI, _
                'UINT', $WM_COPYDATA, _
                'HWND', $g_hGUI, _
                'PTR', DllStructGetPtr($tCOPYDATA))
    EndFunc
    
    Func MY_WM_COPYDATA($hWnd, $iMsg, $wParam, $lParam)
        Local $tCOPYDATA = DllStructCreate('ULONG_PTR;DWORD;PTR',$lParam)
        Local $iCmdLen = DllStructGetData($tCOPYDATA, 2)
        Local $tCmdStruct = DllStructCreate('CHAR['&$iCmdLen+1&']',DllStructGetData($tCOPYDATA, 3))
        $sCmd = Stringleft(DllStructGetData($tCmdStruct, 1),$iCmdLen)
        GUICtrlSetData($g_idEdit, GUICtrlRead($g_idEdit) & $sCmd)
    EndFunc  ;==>MY_WM_COPYDATA
    Alles anzeigen
  • _Singleton ... AutoItWinSetTitle

    • Bitnugger
    • 10. Dezember 2020 um 16:16

    Hm, ich kann bis zu 15 Verzeichnisse markieren, ab 16 wird das Programm nicht mehr im Kontextmenü angezeigt. Es öffnet sich jedoch in allen Fällen immer nur 1 Fenster bei mir. Die Sortierung der Verzeichnisse, so wie sie im Explorer angezeigt werden, geht beim Senden via WM_COPYDATA allerdings verloren, weil die Nachrichten wohl unterschiedliche Laufzeiten haben.

    Ich habe das Script in Post #4 noch ein wenig geändert...

  • _Singleton ... AutoItWinSetTitle

    • Bitnugger
    • 10. Dezember 2020 um 14:05

    Schau mal, ob dir das hier hilft:

    Du musst das Script erst kompilieren und dann die Exe (via Kontextmenü) starten!

    AutoIt
    ;-- TIME_STAMP   2020-12-10 16:01:46   v 0.1
    
    #include <GUIConstants.au3>
    
    If Not @Compiled Then Exit MsgBox(64, @ScriptName, 'Du musst das Script erst kompilieren und dann die Exe (via Kontextmenü) starten!')
    
    Global $g_hGUI = WinGetHandle("AutoIt-Test"), $g_idEdit
    
    If Not IsHWnd($g_hGUI) Then
        $g_hGUI = GUICreate("AutoIt-Test", 508, 579, 193, 125)
        GUIRegisterMsg($WM_COPYDATA, "MY_WM_COPYDATA")
        $g_idEdit = GUICtrlCreateEdit("", 0, 0, 505, 577)
        GUISetState(@SW_SHOW)
        If $CMDLINE[0] Then GUICtrlSetData($g_idEdit, $CMDLINE[1] & @CRLF)
    Else
        If $CMDLINE[0] Then _SendMsg($CMDLINE[1])
        Exit
    EndIf
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    
    Func _SendMsg($_sCmd)
        Local $tCmdStruct = DllStructCreate('CHAR[' & StringLen($_sCmd) + 1 & ']')
        DllStructSetData($tCmdStruct, 1, $_sCmd)
        Local $tCOPYDATA = DllStructCreate('ULONG_PTR;DWORD;PTR')
        DllStructSetData($tCOPYDATA, 1, 1)
        DllStructSetData($tCOPYDATA, 2, StringLen($_sCmd) + 1)
        DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tCmdStruct))
        DllCall('User32.dll', 'NONE', 'SendMessage', _
                'HWND', $g_hGUI, _
                'UINT', $WM_COPYDATA, _
                'HWND', $g_hGUI, _
                'PTR', DllStructGetPtr($tCOPYDATA))
    EndFunc
    
    Func MY_WM_COPYDATA($hWnd, $iMsg, $wParam, $lParam)
        Local $tCOPYDATA = DllStructCreate('ULONG_PTR;DWORD;PTR',$lParam)
        Local $iCmdLen = DllStructGetData($tCOPYDATA, 2)
        Local $tCmdStruct = DllStructCreate('CHAR['&$iCmdLen+1&']',DllStructGetData($tCOPYDATA, 3))
        $sCmd = Stringleft(DllStructGetData($tCmdStruct, 1),$iCmdLen)
        GUICtrlSetData($g_idEdit, GUICtrlRead($g_idEdit) & $sCmd & @CRLF)
    EndFunc  ;==>MY_WM_COPYDATA
    Alles anzeigen
  • _Singleton ... AutoItWinSetTitle

    • Bitnugger
    • 10. Dezember 2020 um 10:00
    Zitat von GML

    Im Explorer, rechte Maustaste auf ein Verzeichnis (bzw. -baum), bendef. Ausdruck (das ist das Programm um das es geht) .. funktioniert.

    Ich verstehe hier nur Bahnhof, Koffer klauen... erkläre das bitte mal genauer.

    Zudem wäre ein Minimal-Script mit ein paar Kommentaren nicht übel, damit man besser verstehen kann, was du da vor hast.

  • Func so lange ausführen wie GUI Button gedrückt wird... (Funk Taster)

    • Bitnugger
    • 9. Dezember 2020 um 14:59
    Zitat von Professor Bernd

    Ich habe "$bSend" aus deinem Code entfernt. Hatte das einen tieferen Sinn?

    Ja, hatte es. Beim Testen hatte ich eine Version, die nur mit GUIGetCursorInfo arbeitete, also ohne $GUI_EVENT_PRIMARYDOWN und $GUI_EVENT_PRIMARYUP. Ohne $bSend wird GUICtrlSetData dann bei jedem Durchlauf ausgeführt, solange die primäre Maustaste gedrückt bleibt. Mit $GUI_EVENT_PRIMARYDOWN (wird nur 1x gesendet, solange die Maustaste gedrückt bleibt) ist $bSend aber nicht mehr nötig.

  • Func so lange ausführen wie GUI Button gedrückt wird... (Funk Taster)

    • Bitnugger
    • 9. Dezember 2020 um 14:05
    Zitat von Professor Bernd

    Switch GUIGetMsg($GUI_EVENT_ARRAY)[0]

    Wenn du eh nur das Event auswertest, reicht Switch GUIGetMsg().

    Zitat von Professor Bernd

    $aCI = GUIGetCursorInfo()
    If Not $bSend And $aCI[4] = $g_idButton Then

    Hier solltest du besser auch prüfen, ob kein Fehler aufgetreten ist, da $aCI in dem Fall kein Array ist.

    If Not @error And Not $bSend And $aCI[4] = $g_idButton Then

  • Func so lange ausführen wie GUI Button gedrückt wird... (Funk Taster)

    • Bitnugger
    • 8. Dezember 2020 um 15:19

    Hier noch eine andere Lösung:

    AutoIt
    ;-- TIME_STAMP   2020-12-08 15:14:28   v 0.1
    
    #include <APISysConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPISysWin.au3>
    
    Global $g_hGUI, $g_idButton, $g_hButton
    
    _Example()
    
    Func _Example()
        $g_hGUI = GUICreate("Form1", 320, 320)
        $g_idButton = GUICtrlCreateButton("Klick && halte mich", 20, 20, 280, 280)
        $g_hButton = GUICtrlGetHandle($g_idButton)
    
        GUISetState(@SW_SHOW)
    
        Local $aMsg, $iFlags = BitOR($CWP_SKIPINVISIBLE, $CWP_SKIPDISABLED, $CWP_SKIPTRANSPARENT)
        While 1
            ; When using the "advanced" parameter the information is returned in an array with extended information:
            ; $aMsg[0] = 0 or Event ID or Control ID
            ; $aMsg[1] = The window handle the event is from
            ; $aMsg[2] = The control handle the event is from (if applicable)
            ; $aMsg[3] = The current X position of the mouse cursor (relative to the GUI window)
            ; $aMsg[4] = The current Y position of the mouse cursor (relative to the GUI window)
            $aMsg = GUIGetMsg(1)
    
            Switch $aMsg[0]
                Case $GUI_EVENT_CLOSE
                    Exit
    
                Case $GUI_EVENT_PRIMARYDOWN
                    If _GetChildWindowFromPointEx($g_hGUI, $aMsg[3], $aMsg[4], $iFlags) = $g_hButton Then
                        GUICtrlSetData($g_idButton, "Sende Daten")
                    EndIf
    
                Case $GUI_EVENT_PRIMARYUP
                    GUICtrlSetData($g_idButton, "Klick && halte mich")
            EndSwitch
        WEnd
    EndFunc   ;==>_Example
    
    Func _GetChildWindowFromPointEx($_hWnd, $_x, $_y, $_iFlags = 0)
        Local Static $tPOINT = DllStructCreate($tagPOINT)
        DllStructSetData($tPOINT, 'X', $_x)
        DllStructSetData($tPOINT, 'Y', $_y)
        Return _WinAPI_ChildWindowFromPointEx($_hWnd, $tPOINT, $_iFlags)
    EndFunc   ;==>_GetChildWindowFromPointEx
    Alles anzeigen
  • Autoit Skript läuft auf anderem PC nicht

    • Bitnugger
    • 7. Dezember 2020 um 12:49
    Zitat von gmmg

    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp", "DefaultSecureProtocols", "REG_DWORD", "2560")

    DefaultSecureProtocols

    • 0x00000008 : SSL 2.0
    • 0x00000020 : SSL 3.0
    • 0x00000080 : TLS 1.0
    • 0x00000200 : TLS 1.1
    • 0x00000800 : TLS 1.2

    2560 = 0x00000200 + 0x00000800 = 0x00000A00 = TLS 1.1 + TLS 1.2

  • JSON-UDF

    • Bitnugger
    • 29. November 2020 um 23:15
    Zitat von BugFix

    Wäre es dann nicht besser, gleich eine der Nim-JSON Bibliotheken zu nutzen und die gesamte Verarbeitung in einer Dll ausführen zu lassen?

    Ja, das wäre womöglich die beste/schnellste Lösung... ich bin dafür allerdings nicht fit genug und hätte mom. eh nicht die nötige Zeit.

  • JSON-UDF

    • Bitnugger
    • 29. November 2020 um 18:21

    So kann man sehr gut sehen, wie der Zeitbedarf mit zunehmender Stringlänge ansteigt:

    AutoIt
    ;-- TIME_STAMP   2020-11-29 17:45:28   v 0.1
    
    ; Pattern vorkompilieren (für fairen Zeitvergleich)
    StringRegExp("", "^.")
    
    ; erzeuge großen String (sollte ca. 400mB ergeben, da StringRegExp intern UTF-16 verwendet)
    Global $sString = "", $iDiff, $iC = 0, $sI
    For $i = 1 To 20 * 1024^2
        $sString &= "xxxxxxxxxx"
        Switch $i
            Case 1, 1024, 1*1024^2, 2*1024^2, 3*1024^2, 4*1024^2, 5*1024^2, 10*1024^2, 15*1024^2, 20*1024^2
                ; Zeitbedarf für ein simples RegEx auf diesen String ermitteln:
                $iT = TimerInit()
                StringRegExp($sString, "^.")
                $iDiff = TimerDiff($iT)
                $iC += 1
                $sI = DllCall('shlwapi.dll', 'ptr', 'StrFormatByteSizeW', 'int64', $i * 10, 'wstr', '', 'uint', 1024)[2]
                ConsoleWrite(StringFormat('%2i/10 Zeitbedarf StringRegExp($sString, "^.") bei %12i Zeichen (%10s): %8.3f ms\n', $iC, $i * 10, $sI, $iDiff))
        EndSwitch
    Next
    Alles anzeigen
    Code: Ausgabe
     1/10 Zeitbedarf StringRegExp($sString, "^.") bei           10 Zeichen (  10 Bytes):    0.005 ms
     2/10 Zeitbedarf StringRegExp($sString, "^.") bei        10240 Zeichen (   10,0 KB):    0.048 ms
     3/10 Zeitbedarf StringRegExp($sString, "^.") bei     10485760 Zeichen (   10,0 MB):   13.381 ms
     4/10 Zeitbedarf StringRegExp($sString, "^.") bei     20971520 Zeichen (   20,0 MB):   20.047 ms
     5/10 Zeitbedarf StringRegExp($sString, "^.") bei     31457280 Zeichen (   30,0 MB):   34.832 ms
     6/10 Zeitbedarf StringRegExp($sString, "^.") bei     41943040 Zeichen (   40,0 MB):   39.172 ms
     7/10 Zeitbedarf StringRegExp($sString, "^.") bei     52428800 Zeichen (   50,0 MB):   46.496 ms
     8/10 Zeitbedarf StringRegExp($sString, "^.") bei    104857600 Zeichen (    100 MB):  101.790 ms
     9/10 Zeitbedarf StringRegExp($sString, "^.") bei    157286400 Zeichen (    150 MB):  169.365 ms
    10/10 Zeitbedarf StringRegExp($sString, "^.") bei    209715200 Zeichen (    200 MB):  237.681 ms
    Zitat von AspirinJunkie

    Oder eine ganz andere Lösung die ich noch nicht sehe.

    Evtl. lässt sich da ja was mit Nim via DllCall zaubern... eg. SpezRegEx.nim ==> SpezRegEx.dll - eine Funktion, um den String zu übergeben, und eine, um das Pattern auzuwerten.

    Eine weitere Alternative wäre, die in GnuWin enthaltene regex2.dll zu nutzen...

  • JSON-UDF

    • Bitnugger
    • 29. November 2020 um 01:14

    Ich habe mir meine Google-Timline exportiert und als Zip-Archiv auf meinem PC gespeichert. Die daraus entpackte Datei Standortverlauf.json ist bei mir derzeit etwa 70 MB groß und wenn ich die an _JSON_Parse übergebe, passiert auf meinem I7 960 auch nach mehreren Stunden scheinbar absolut nichts... außer, dass die CPU-Last durch das Parsen von 20% auf ca. 50% (± 10%) steigt... ich habe dann nach über 6 Std. abgebrochen.

    Start...: 17:17:22

    Kill....: 23:44:38

    Google-Timline (Zeitachse) muss im Google-Account erst aktiviert werden, damit es nutzbar ist!

    Google-Timline exportieren: https://takeout.google.com/settings/takeo…ocation_history

    Edit: Die JSON-Dateien haben als Zeilenumbruchzeichnen alle nur ein LF... aber das scheint kein Problem zu sein.

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™