im EN-Forum @Gorathan
Ja, das bin ich! ![]()
im EN-Forum @Gorathan
Ja, das bin ich! ![]()
Auch von mir schöne Weihnachten.
Geil! ![]()
![]()
Ist die Corona ein weibliches Wesen
oder ist SIE wenn es Corona nicht mehr gibt etwa eine Sache also ein ES gewesen?
Die Krankheit/Pandemie.
In diesem Jahr ist so vieles anders, deshalb versuche ich mich mal als Dichter:
Denkt euch, ich habe "Corona" geseh'n
sie kam aus dem Osten und blieb dort nicht steh'n.
Sie fegte hinüber zum Tannenwald
und machte auf ihrem Weg auch dort nicht halt.
Sie brachte Krankheit, Tod und Isolation
über unsere gesamte Nation.
Arbeit, Freizeit und Urlaub in diesem Jahr
nichts ist, wie es früher mal war.
Wir halten nun Abstand und hamstern was geht
mit Klorolle und Maske, die Welt sich doch dreht.
Das Weihnachtsfest bescheiden und klein
bei gutem Essen und einem Glas Wein.
Sylvester wird's wohl auch nicht so bunt
was soll's, Hauptsache wir bleiben alle gesund.
Mit diesen Worten wünsche ich euch ein frohes Weihnachtsfest
und kommt gesund ins neue Jahr.
Oscar
Zusatzstrophe für alle Quernörgler:
Manch einer denkt quer und
verleugnet sie.
Demonstriert ohne Abstand und Maske
gegen sie.
Doch dann kommt sie und holt ihn
die Pandemie.
Eine Frage hätte ich schon, ich lese ja den string in eine Variable ($ABCinfo) ein, in euren Beispielen deklariert ihr den Wert aber statisch (der String im json File kann dauernd ändern, nur das Format bleibt beständig).
Der String darf auch eine Variable sein:
@ Oscar: deine Variante konnte ich leider nicht benutzen, da mir die ganzen WinApi...au3 Includes fehlen
Gibt es denn einen Grund, warum Du nicht die aktuelle AutoIt-Version (v3.3.14.5) benutzen willst?
Ich habe Dir mal schnell ein Beispiel geschrieben:
#include <Array.au3>
#include <Date.au3>
#include <GDIPlus.au3>
#include <GDIPlusConstants.au3>
#include <GUIConstantsEx.au3>
#include <Timers.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIGdiInternals.au3>
#include <WinAPIHObj.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
_GDIPlus_Startup()
Global Const $GDIP_PROPERTYTAGFRAMEDELAY = 0x5100, $iTransColor = 0x00FF00
Global $iFrameIndex = 0
OnAutoItExitRegister('_AutoItExit')
Global $sGifFile = _Loading()
Global $hGifImage = _GDIPlus_BitmapCreateFromMemory($sGifFile)
Global $iW = _GDIPlus_ImageGetWidth($hGifImage)
Global $iH = _GDIPlus_ImageGetHeight($hGifImage)
$aFrameDelay = _GDIPlus_ImageGetPropertyItem($hGifImage, $GDIP_PROPERTYTAGFRAMEDELAY) ; Array mit den Frame-Delays (in 10tel Millisekunden)
If @error Then Exit
_ArrayDelete($aFrameDelay, 0) ; Counter in [0] entfernen
;~ _ArrayDisplay($aFrameDelay, 'FrameDelays')
; Das Hauptfenster
Global $hMainGui = GUICreate('Hauptfenster', 800, 600, -1, -1)
GUISetBkColor(0xEEEEEE, $hMainGui)
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseMainGui')
Global $idText = GUICtrlCreateEdit('', 10, 100, 780, 400)
; Das "Loading-Fenster" als transparentes Popup
Global $hAnimGui = GUICreate('Anim-Popup', $iW, $iH, 350, 10, $WS_POPUP, BitOR($WS_EX_MDICHILD, $WS_EX_LAYERED), $hMainGui)
GUISetBkColor($iTransColor, $hAnimGui)
_WinAPI_SetLayeredWindowAttributes($hAnimGui, $iTransColor)
Global $hDC = _WinAPI_GetDC($hAnimGui)
Global $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
Global $hDC_Backbuffer = _WinAPI_CreateCompatibleDC($hDC)
Global $oDC = _WinAPI_SelectObject($hDC_Backbuffer, $hHBitmap)
Global $hGfxCtxt = _GDIPlus_GraphicsCreateFromHDC($hDC_Backbuffer)
_GDIPlus_GraphicsSetSmoothingMode($hGfxCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
_GDIPlus_GraphicsSetPixelOffsetMode($hGfxCtxt, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
_Timer_SetTimer($hMainGui, $aFrameDelay[$iFrameIndex] * 10, '_Draw_Timer')
GUISetState(@SW_SHOW, $hAnimGui)
GUISetState(@SW_SHOW, $hMainGui)
; In dieser Schleife kannst Du Deine Laderoutine schreiben
For $i = 0 To 30
GUICtrlSetData($idText, 'bla bla bla ' & $i & @CRLF, 1)
Sleep(250)
Next
GUISetState(@SW_HIDE, $hAnimGui) ; wenn fertig geladen, die Animation verstecken
; Und die Endlosschleife fuer das Hauptfenster
While Sleep(1000)
WEnd
Func _CloseMainGui()
GUIDelete($hMainGui)
Exit
EndFunc
Func _Draw_Timer($hWnd, $Msg, $iIDTimer, $dwTime)
If $iFrameIndex >= UBound($aFrameDelay) Then $iFrameIndex = 0
_Timer_SetTimer($hWnd, $aFrameDelay[$iFrameIndex] * 10, '_Draw_Timer', $iIDTimer)
_Draw_Image()
$iFrameIndex += 1
EndFunc ;==>_Draw_Timer
Func _Draw_Image()
_GDIPlus_ImageSelectActiveFrame($hGifImage, $GDIP_FRAMEDIMENSION_TIME, $iFrameIndex)
_GDIPlus_GraphicsClear($hGfxCtxt, BitOR(0xFF000000, $iTransColor))
_GDIPlus_GraphicsDrawImage($hGfxCtxt, $hGifImage, 0, 0)
_WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_Backbuffer, 0, 0, $SRCCOPY)
EndFunc ;==>_Draw_Image
Func _AutoItExit()
_Timer_KillAllTimers($hMainGui)
_WinAPI_SelectObject($hDC_Backbuffer, $oDC)
_GDIPlus_GraphicsDispose($hGfxCtxt)
_WinAPI_DeleteObject($hHBitmap)
_WinAPI_ReleaseDC($hAnimGui, $hDC)
_GDIPlus_ImageDispose($hGifImage)
GUIDelete($hAnimGui)
_GDIPlus_Shutdown()
Exit
EndFunc
;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05
Func _Loading($bSaveBinary = False, $sSavePath = @ScriptDir)
Local $Loading
$Loading &= 'R0lGODlhaQBGAMMAAO7u7szMzKqqqnd3d4iIiJmZmbu7u93d3WZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAJACwAAAAAaQBGAAAE/zDJSau9OOvNu/9gKI5kaZ5oqm5A4AYAsM40KwwEUQjGEdfAoABBHOAKgUNwOQMMiFDETsmsng5PKNLKPTmhBFl3TMpKyWjRkChIuz0A7Xu+GRrF9HzFOGjr/xJORlSAegZ8hYCHOl6JKTd9Jj+OJwI5BZKTlCSLfiQxeJsiATkEmaGiIAClhCKgqSSlBp8APrAjBjoFqB4HPry3HKsFBbMhtb7BuMTFqr62ymrMxsJJydGuzDwcBy7X2K4COwICMBa1L0ngJQAG4+QG6QbzL63rIwHkPDzz/S/A90YZ4NePnr2AXnx5A4iwocOHECNKnEixosWLGDNq3MgRDkMrr/8CaZoDgNhHJsQCTEipp+SuNywlxKTj8uSSmSNJmoS5xVFNYQUxtAh6LsA8JTNdiOmm5EA/XkN7JFAqaacGd8xmSsCatUCrA12xqpTZ0928rl+7iuv5ySoGrPG4EgpALF4+ZhNclqPLbGyCmFzj4g1EbG9WvyN+YgDrNe/gv2wTYBUjjppLtoCJEZosobJjrdlevt1RgfFSxFN3ukyLuSwxCqYTrIYN+phbC7VBxzC6VgZj3K3HmqXw83eF2qpuH49M1i/fri/5AvebmZrsndKXo7Yt+kJu19PORn+tfaVr6z+zU0D+QbH3ZsQ1X0eCh69v5TOrx38Z+/P25N1ZgFWmBdmpt5VqWjFG3Xn7iVEXBXz9155ytJFGGHx8zcWMGFhRAcBaCwoH34UcxsRYZCOFJNJn0GVW11qiXcZDV2PJyFVwB6Jn1WXQOUdec5+JwWOPEzxXVygnPvigBEnukh+DQebFlQAu+YiJeX65B8qWKgbyzwUtUCVbTt3UGIomXY55ziTyiXQmKjk1'
$Loading &= 'VBKVDXYkVGFCiuOJnQK2GCCfBIZlE59pAspFBAAh+QQFCgAJACwkAAMAGwAeAAAErDDJSaUxhdxTu09IKCKDBnzfOJZFgCZEMlBETYhDYbjdOcwDAacCKOQMhyHtl3slAAGAtEJgCpwvQ1WDfW27WRsYZTOMP7bTuRIgZNadduEKrxR0dQoGn5cE7mZ9CQd3BYIShWp9AnM8fQECkXlTCZF0cJSQkY5gUooGAhtjnooJoBecHwAHnh0Xr0pESaylFa8Xg7MBs0m1FQevCQHDxLxgBwE7xMO9mKusLxEAIfkEBQoACQAsJAAEAB0AHQAABKYwyTkNGRhLNAT9oDFc2ZCYCaJ64FcQV1zMBapyQCu9MGG0B8EN1+IRWDoJ4TbIUV6vX/KpGrlm0yLHN6FJs58loSAJ0MAtAKJgOCQEWHTLEDi4C3B5EgAIvvVZAgJfgCGChUkBh4hAg4w6g4SPEgaVkx+VkpMHmZcUmQGeEpyVbqIBP6GiCQGhdautsVN8aLGtdgl8urpyALF2wH27gH3AdsOXtGARACH5BAUKAAkALCQAAwAeAB0AAAStMMlJZUhCpFu7nwUhjgORGN8XFGw4EuUgp5XQtlkGwzON3QmAxzAb0DIslK9glBw6Bo2A48MYEc1JIEetYhIIhGaS83YKYIRQEh2bK2H0SWDovjHhpmF/rxzCCE97Sn0TgAYHe3Z9BGF1ioUUjQMakJESOygoi3c2AgcAdZcUBwFCAaijE08bqKyqWqmwsQGvsACoprNOB71rs72+uwnBwsCgoADKs8rNy8zObxEAIfkEBQoACQAsJAADAB4AGgAABKswyUnlCcaEBKr/UiCMRWkWYJqMpHCWBGGoU8aOWVYmRYyqNoNgA4oZU7kZbRUbEDoVTGZZaxIqh9yBWnMOlJIckSsRDM6TLYZcOQ8Eoc2WTUHHx3SJHRDo5+sTfAFzfzxpfYR/KAgFF4OFEgUIjAAHlpAJBJMzlol5kwicl4UB'
$Loading &= 'oB2dUHkCkwMSlaN0AKBwrgcAqWSSZ7i3uFxOMhW9vksHAmAUw3QBxK69kBEAIfkEBQoACQAsJAADAB4AHQAABKwwyUnnCeGcyrs1ICgYQhl43hGuZFkWJzqdwYolgZsUhSDjN8OGA8jxeCgMZigzHAudy/JHeVaKN2oFSqhoMlpOgdCVADTM8IRMMEjQAHXFwH5r5BzyII7GVwgDBCdncX4TAgMDCQCMhYYSgAKNjo+JZoyPEgWWi5iZiYqdlHgHnJeZCaFXlageCAitEgKvCD6ts6+qjwAEtLqGuLlphoADCHuxTm2xCSoBoxMRACH5BAUKAAkALCUAAwAdAB4AAASoMMlJEwDn2Mq7xEEYGIlheh52iEEymrCGSlkm2iUMz/UKoCaBgNRRyWYSg1DAuWR+SElgSZw4oVGpsND6XLDZZEJQsF7CHCbXckZzCnCv+x3/gecJeBnfMcC7fBQkBFWBEmQETIYTAgQEgIuOj4sTkkeGBgQDBJQSmpydCZsDnQYDp4WBp5uUBauLXaQfbpIECLe3eAemuL0IimErjQO9A8BzwkMGdxwRACH5BAUKAAkALCgAAwAaAB4AAASeMMlJgaU4V3B6D+ChZRbnfSA4TqV1uEcqj+0aB4ZBX6sUJDkdBtDDHILF5DEnSq5wOWcPKR3hBMLqUMDVariCppfSHWPKZokOm1YXCm3JuyAeA+bE9jw+z44FcARxBIQTH3BOBoQEiAlXAwR5KwKLghSKAwgIdBlHkJCWGAWZmpoJcwOpBKorBqSlEgMJqal+GnevCBOytkVLbxJ1GhEAIfkEBQoACQAsJQAEAB0AHQAABJ8wyUkluPjWzWe+Rwh0ZDKaYKiWrKeGbRwGwRG3AE3frc6zB9+PtLMNOTZD4NgxOJkcpwG6CTiNVIlVmZ1sa1jqVZo1CKYCASE8TAsSBcKgAA2kp4HBAAF1LxN7CARHZgVvEgYIinQ/AoZ/EoEIhzEFlpQSB5IxBpaWHYGA'
$Loading &= 'mB5wnoygfIB6hglqBIMEnywCqXp6sK+vR7YDcrldrQmQJBEAIfkEBQoACQAsJAAFAB4AHAAABK0wyUmrBTbrCzreIOeF5OR1ZQocaBquB0sFh1vBtXQYgV3FsoRBYMj5EjhJoUAwHgPQRIAwGBxnUIChSrhODtnCANH1JsC0AoJsPkN367IXjDSsEW1h73BvG/4SYwgCc4ASAmtmf0UTeAkFT4sUhAkDlCkBi06BVS4BRIYUGFUDkCQCqAYgXEIan6hEIVQDBLUERERLS6klW7a2ursFPS4GvwTBAsRHAFCEPR8bEQAh+QQFCgAJACwkAAUAHgAcAAAEqTDJmU44NOtNjQlcGBaFAIroRKyFkabEILuvKCB4UVOAhiOEHQ/Qk9xwwmExMcgllZLf6Zkg9gw/6uRAjCK0E8ABk/jqwGJuMHHWpouDtnYsGTDBlXFPNlg+AxcTM2CAZEwDa3+AS4gDAk8WgB2IBDQ1GJIZKyuWKAcfCVMUmwSPKAEeoBybJCKpnRwkBCQkLrYCrzu0JAK9vQa4BoY1tAIlvrBJGB50KBEAOw=='
Local $bString = _WinAPI_Base64Decode($Loading)
If @error Then Return SetError(1, 0, 0)
$bString = Binary($bString)
If $bSaveBinary Then
Local Const $hFile = FileOpen($sSavePath & "\loading.gif", 18)
If @error Then Return SetError(2, 0, $bString)
FileWrite($hFile, $bString)
FileClose($hFile)
EndIf
Return $bString
EndFunc ;==>_Loading
Func _WinAPI_Base64Decode($sB64String)
Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
$aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
Return DllStructGetData($bBuffer, 1)
EndFunc ;==>_WinAPI_Base64Decode
Alles anzeigen
Hat hier jetzt jemand eine Lösung, so das man auch unter Win 10 von Autoit aus mit einem Arduino-Board kommunizieren kann??
Meine Serial-UDF funktioniert auch unter Windows 10 (gerade getestet).
Ich habe dein Tool heute bei mir gestartet und die Auflösung geändert... das funktioniert, aber danach öffnet dein Tool nicht mehr das Kontextmenü, bzw. nur ganz kurz und dann ist es wieder weg.
Hmm...das kann ich bei mir nicht nachvollziehen...
Bei mir klappt das umschalten einwandfrei, auch mit zwei Monitoren (Windows 10, 64 Bit, NVidia GTX 1050 Ti).
Wenn ja, bitte ein Stichwort liefern.
Ich verstehe nicht warum das nicht funktioniert........
Das funktioniert nicht, weil Du unsere Forenregeln nicht gelesen hast bzw. diese ignorierst!
Windows stellt keine Möglichkeit bereit, die Bildschirmauflösung per Kommandozeile zu ändern.
Auflösung ändern geht: ChangeDisplayResolution
Das solltest du in deinem ersten Post und auch in dem Nim-Script vermerken.
Ich hab's mal oben eingefügt. Danke!
Passend zu diesem Thema ist evtl. auch dies hier: https://de.wikipedia.org/wiki/Hamming-Abstand
Nicht ganz!
Die Levenshtein-Distanz unterscheidet sich etwas vom Hamming-Abstand.
Siehe hier: https://de.wikipedia.org/wiki/Levenshtein-Distanz
Zitat
Die Levenshtein-Distanz kann als Erweiterung des Hamming-Abstands angesehen werden, welcher sich auf Ersetzungen beschränkt und daher nur Zeichenketten gleicher Länge bemessen kann.
Nochmal eine neue Version, weil ich bemerkte, dass die Nim-interne Funktion zum berechnen der Levenshtein-Distanz doch deutlich effektiver arbeitet.
Diesen deutlichen Geschwindigkeitsvorteil wollte ich euch nicht vorenthalten. Siehe Post#1.
Logisch
Naja, so ganz logisch finde ich das nicht.
Warum darf man das Contextmenü nicht löschen und wieder neu erstellen?
Es ist zwar für Dich jetzt eine Lösung des Problems, aber das "warum" ist immer noch offen.
Das waren doch Auszüge vom JavaScript.
Ja, das man bei einer *.au3 nur 50% der Zeilen braucht war von aus zu gehen.
Das funktioniert aber auch mit JavaScript:
Warum?
Weil ich die Lösung benötige.
Das geht doch viel einfacher:
Lass das Contextmenü bestehen und lösche nur die MenuItem(s):
#include <GUIConstantsEx.au3>
Global $idMenuitem
Opt('GUIOnEventMode', 1)
Global $GUI = GUICreate("hallo", 360, 340)
Global $idCheckbox = GUICtrlCreateCheckbox("Test", 70, 75)
Global $idContext = GUICtrlCreateContextMenu()
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, "_beenden")
GUICtrlSetOnEvent($idCheckbox, "_checkbox_Status")
While 1
Sleep(10)
WEnd
Func _checkbox_Status()
If BitAND(GUICtrlRead($idCheckbox), $GUI_CHECKED) Then
$idMenuitem = GUICtrlCreateMenuItem("angehakt", $idContext)
Else
GUICtrlDelete($idMenuitem)
EndIf
EndFunc ;==>_checkbox_Status
Func _beenden()
Exit
EndFunc ;==>_beenden
Alles anzeigen
Ich habe den Code noch etwas abgeändert, damit es bei sehr vielen Fundstellen nicht zu unnötigen Verzögerungen kommt (viele Dll-Calls).
Neue Version in Post#1.
Müsste man mal mit purem AutoIt vergleichen...
Aus Neugier habe ich das mal getan:
AutoIt: 120976 ms
AutoIt mit Nim-Dll: 238 ms
Zeitfaktor: mehr als das 500fache bei purem AutoIt.
AutoIt mit Nim-Dll, wie oben, nur mit "Richtlinie" als Suchwort:
Testscript (AutoIt) hier:
$sWord1 = FileRead(@ScriptDir & '\bgb.txt')
$iTimer = TimerInit()
$aWords = StringRegExp($sWord1, '(\S+)', 3)
ConsoleWrite('Timer StringRegExp: ' & TimerDiff($iTimer) & @CRLF)
$sWord2 = 'Richtlinie' ; das Suchwort
$sFound = ''
$iPos = 0
$iTimer = TimerInit()
For $word In $aWords
If CompTstr($word, $sWord2) > 0.66 Then $sFound &= $iPos & ','
$iPos += 1
Next
ConsoleWrite('Timer For-Loop: ' & TimerDiff($iTimer) & @CRLF)
Func min3($a, $b, $c)
Local $dummy
$dummy = $a
If $b < $dummy Then $dummy = $b
If $c < $dummy Then $dummy = $c
Return $dummy
EndFunc ;==>min3
Func LevenshteinDistance($s, $t)
Local $n, $m
$n = StringLen($s)
$m = StringLen($t)
If $s = $t Then Return 0
If $s = "" Then Return $m
If $t = "" Then Return $n
Local $d[$n + 1][$m + 1], $i, $j, $cost
For $i = 0 To $n
$d[$i][0] = $i
Next
For $j = 0 To $m
$d[0][$j] = $j
Next
For $i = 1 To $n
For $j = 1 To $m
If StringMid($s, $i, 1) = StringMid($t, $j, 1) Then
$cost = 0
Else
$cost = 1
EndIf
$d[$i][$j] = min3($d[$i - 1][$j] + 1, $d[$i][$j - 1] + 1, $d[$i - 1][$j - 1] + $cost)
Next
Next
Return $d[$n][$m]
EndFunc ;==>LevenshteinDistance
Func CompTstr($s, $t)
Local $n, $m
$n = StringLen($s)
$m = StringLen($t)
If $n < $m Then $n = $m
Return ($n - LevenshteinDistance($s, $t)) / $n
EndFunc ;==>CompTstr
Alles anzeigen