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

Beiträge von Oscar

  • Barcodescanner-"Stream" abfangen

    • Oscar
    • 6. Juli 2018 um 18:12

    Ich hatte mir für meinen Scanner mal ein Script geschrieben:

    AutoIt
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    OnAutoItExitRegister('OnAutoItExit')
    
    Global $sBuffer = ''
    
    Global $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hKeyHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hmod)
    
    Global $hGui = GUICreate('Barcodescanner', 300, 100)
    Global $idCode = GUICtrlCreateInput('', 10, 30, 280, 30, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_NUMBER))
    GUICtrlSetFont(-1, 16, 400, 0, 'Courier New')
    GUISetState()
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    Exit
    
    Func _EvaluateKey($keycode)
        Switch $keycode
            Case 48 To 57 ; 0 - 9
                $sBuffer &= Chr($keycode)
            Case 13 ; RETURN
                ConsoleWrite(StringFormat('Barcode-Nummer = %i\r\n', $sBuffer))
                GUICtrlSetData($idCode, $sBuffer)
                $sBuffer = ''
            Case 27 ; ESC
                Exit
            Case Else
                $sBuffer = ''
        EndSwitch
    EndFunc   ;==>_EvaluateKey
    
    Func _KeyProc($nCode, $wParam, $lParam)
        Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
        If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam)
        If $wParam = $WM_KEYDOWN Then _EvaluateKey(DllStructGetData($tKEYHOOKS, 'vkCode'))
        Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam)
    EndFunc   ;==>_KeyProc
    
    Func OnAutoItExit()
        _WinAPI_UnhookWindowsHookEx($hKeyHook)
        DllCallbackFree($hKeyProc)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen

    Das hängt aber auch davon ab, wie Dein Scanner die Daten sendet (meist konfigurierbar). Meinen Scanner habe ich so eingestellt, dass er die Nummer und anschließend ein <RETURN> sendet.

    Damit klappt das mit obigen Script, dass die Nummer automatisch ins Inputfeld eingetragen wird.

  • Frage zum Ergebnisfenster von msg.exe

    • Oscar
    • 5. Juli 2018 um 14:16

    Hier mal meine Version (ohne externe UDFs):

    AutoIt
    #include <APIGdiConstants.au3>
    #include <Date.au3>
    #include <MsgBoxConstants.au3>
    #include <ScreenCapture.au3>
    #include <SendMessage.au3>
    #include <StaticConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIConstants.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPIRes.au3>
    #include <WindowsConstants.au3>
    
    OnAutoItExitRegister('_Cleanup')
    Global $hKeyProc, $hKeyHook
    
    _MsgBoxEx('Blablabla', 'Das ist ein Test mit ganz viel Text in der ersten Zeile' & @CRLF & 'und dann kommt noch eine Zeile.')
    
    Func _MsgBoxEx($sSender, $sText)
        Local $hDesktop, $iW, $iH, $hGui, $hChild, $idPic, $idOkBtn, $hHBitmap, $tAdjust, $hAdjust, $hMod, $tCursor, $hPrevImage
        $hDesktop = _WinAPI_GetDesktopWindow()
        $iW = _WinAPI_GetWindowWidth($hDesktop)
        $iH = _WinAPI_GetWindowHeight($hDesktop)
        $hGui = GUICreate('', $iW, $iH, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
        $idPic = GUICtrlCreatePic('', 0, 0, $iW, $iH)
        $hChild = GUICreate('', 640, 160, $iW / 2 - 320, $iH / 2 - 80, $WS_POPUP, Default, $hGui)
        GUISetBkColor(0x44AAFF)
        GUICtrlCreateLabel(StringFormat('Nachricht von: "%s"  (%s)', $sSender, _Now()), 20, 20, 620, 40)
        GUICtrlSetFont(-1, 16, 400, 0, 'Verdana', 5)
        GUICtrlCreateLabel($sText, 20, 60, 620, 50)
        GUICtrlSetFont(-1, 12, 400, 0, 'Verdana', 5)
        $idOkBtn = GUICtrlCreateButton('Ok', 540, 110, 80, 30)
        GUICtrlSetFont(-1, 12, 400, 0, 'Verdana', 5)
        $hHBitmap = _ScreenCapture_CaptureWnd('', $hDesktop, 0, 0, -1, -1, False)
        $tAdjust = _WinAPI_CreateColorAdjustment(0, 0, 2500, 2500, 2500, 0, 10000, -60, -60)
        $hAdjust = _WinAPI_AdjustBitmap($hHBitmap, -1, -1, $HALFTONE, $tAdjust)
        _WinAPI_DeleteObject($hHBitmap)
        GUISetState(@SW_SHOW, $hChild)
        GUISetState(@SW_SHOW, $hGui)
        $hPrevImage = _SendMessage(GUICtrlGetHandle($idPic), $STM_SETIMAGE, $IMAGE_BITMAP, $hAdjust)
        If $hPrevImage Then
            If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage)
        EndIf
        _WinAPI_DeleteObject($hAdjust)
        $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
        $hMod = _WinAPI_GetModuleHandle(0)
        $hKeyHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hMod)
        $tCursor = _WinAPI_GetWindowRect(GUICtrlGetHandle($idOkBtn))
        Do
            _WinAPI_ClipCursor($tCursor)
            If ProcessExists('taskmgr.exe') Then ProcessClose('taskmgr.exe')
        Until GUIGetMsg() = $idOkBtn
        GUIDelete($hChild)
        GUIDelete($hGui)
        _WinAPI_ClipCursor(0)
        _Cleanup()
    EndFunc
    
    Func _KeyProc($nCode, $wParam, $lParam)
        Local $tKEYHOOKS, $iFlags
        $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
        If $nCode >= 0 Then
            If $wParam = $WM_KEYDOWN Then
                If DllStructGetData($tKEYHOOKS, 'vkCode') = 91 Then Return 1
            Else
                $iFlags = DllStructGetData($tKEYHOOKS, 'flags')
                If $iFlags = $LLKHF_ALTDOWN Then Return 1
            EndIf
        EndIf
        Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam)
    EndFunc   ;==>_KeyProc
    
    Func _Cleanup()
        _WinAPI_UnhookWindowsHookEx($hKeyHook)
        DllCallbackFree($hKeyProc)
    EndFunc   ;==>_Cleanup
    Alles anzeigen
  • Script geht Nicht

    • Oscar
    • 4. Juli 2018 um 07:54

    Er soll erstmal aufklären, warum er hier zwei Accounts (HELPMEPLS und sooooooooshunter) anlegt. :(:thumbdown:

  • Progressbar

    • Oscar
    • 4. Juli 2018 um 05:21
    Zitat von claushendrik

    Wird die Progressbar vorher beendet dann soll die ausführende Batch to EXE auch beendet werden!

    Wie Bitnugger bereits geschrieben hat, wäre es sehr hilfreich, wenn Du die Batchdatei hier postest, dann kann man das komplett in AutoIt umsetzen und hat damit die volle Kontrolle über den Ablauf.

    Damit wäre dann auch eine richtige Progressbar möglich.

  • String Compare funktioniert nicht mit Array von Split String

    • Oscar
    • 3. Juli 2018 um 10:55

    Dein Beispiel strotzt vor Fehlern!

    Welchen Inhalt hat die Variable $file? Oder besser, welchen Inhalt hat diese Datei?

    Welchen Inhalt hat die Variable $date?

    Warum vergleichst Du mit $stringvariable statt mit $stringdate?

    StringSplit sollte man mit $STR_NOCOUNT aufrufen und dann die For...Next-Schleife von "0 to UBound($array) -1".

    Hier mal ein kleines, funktionierendes Beispiel:

    AutoIt
    #include <StringConstants.au3>
    
    $sDate = '2018/07/03' ; <- das gesuchte Datum
    $sFile = '2011/06/13,2014/12/24,2018/07/03,2017/07/03,2016/03/04' ; <- ich gehe mal davon aus, dass die Daten so vorliegen
    $aData = StringSplit($sFile, ",", $STR_NOCOUNT)
    For $i = 0 To UBound($aData) - 1
        $iRet = StringCompare($sDate, $aData[$i], 1)
        If $iRet = 0 Then MsgBox(0, "found", $aData[$i])
    Next
  • Progressbar

    • Oscar
    • 2. Juli 2018 um 18:28

    Da Du in "Programmieranfragen" gepostet hast, dachte ich, dass Du ein fertiges Script haben willst.

    Wenn Du es selbst machen willst, dann wäre "Hilfe & Unterstützung" richtiger gewesen.

    Aber abgesehen davon, erzähl' uns doch erstmal was Du erreichen willst.

    Wie willst Du zwei Progressbars mit "aufwärtssteigenden Balken" (was immer das sein soll) anzeigen lassen, wenn Du keine Prozentangabe berechnen kannst?

    Oder weißt Du, wann die Anwendungen beendet werden?

    Was sind das für Anwendungen? Wer startet sie? Wie lange laufen sie?

    Um genauer auf Deine Wünsche eingehen zu können, musst Du mehr Informationen liefern.

    Das mit dem Bild hinzufügen und das Icon ändern sind Kleinigkeiten, die wir später klären können.

  • Progressbar

    • Oscar
    • 1. Juli 2018 um 19:33

    Naja, wenn man nicht weiß, wann die Anwendungen beendet werden, kann man kein Prozentwert ausrechnen (für die Progressbar).

    Also muss man $PBS_MARQUEE verwenden. Dann könnte das Ganze so aussehen:

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <SendMessage.au3>
    #include <StaticConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIConstants.au3>
    #include <WindowsConstants.au3>
    
    Global $aLanguageText[][2] = [['Windowtitle', 'Fenstertitel'], ['Please wait...', 'Bitte warten...'], ['Some text', 'Irgendein Text'], ['Some more text', 'Noch mehr Text']]
    Global $iLanguage = (@OSLang = '0407' ? 1 : 0)
    
    Global $hGui = GUICreate($aLanguageText[0][$iLanguage], 640, 312, -1, -1, BitOR($WS_POPUP, $WS_CAPTION, $WS_SYSMENU))
    GUISetFont(10, 400, 0, 'Verdana')
    GUISetBkColor(0xCECAC2)
    GUISetIcon('shell32.dll', 16)
    Global $idPic = GUICtrlCreatePic('', 0, 0, 166, 312)
    _PicSetImage($idPic, _MeinBild())
    Global $idText1 = GUICtrlCreateLabel($aLanguageText[1][$iLanguage], 180, 80, 440, 20)
    Global $idText2 = GUICtrlCreateLabel($aLanguageText[2][$iLanguage], 180, 110, 440, 20, $SS_CENTER, $WS_EX_STATICEDGE)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    Global $idText3 = GUICtrlCreateLabel($aLanguageText[3][$iLanguage], 180, 140, 440, 20, $SS_CENTER, $WS_EX_STATICEDGE)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    Global $idProgress = GUICtrlCreateProgress(180, 200, 440, 25, $PBS_MARQUEE)
    GUISetState()
    GUICtrlSendMsg($idProgress, $PBM_SETMARQUEE, 1, 0)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    Func _PicSetImage($hCtrl, $sImgFile)
        Local $hBitmap, $hGfx, $hImage, $hBMP, $hPrevImage
        If Not IsHWnd($hCtrl) Then $hCtrl = GUICtrlGetHandle($hCtrl)
        _GDIPlus_Startup()
        $hBitmap = _GDIPlus_BitmapCreateFromScan0(166, 312)
        $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap)
        $hImage = _GDIPlus_BitmapCreateFromMemory($sImgFile)
        _GDIPlus_GraphicsDrawImage($hGfx, $hImage, 0, 0)
        $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)
        $hPrevImage = _SendMessage($hCtrl, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP)
        If $hPrevImage Then
            If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage)
        EndIf
        _WinAPI_DeleteObject($hBMP)
        _GDIPlus_GraphicsDispose($hGfx)
        _GDIPlus_BitmapDispose($hBitmap)
        _GDIPlus_BitmapDispose($hImage)
        _GDIPlus_Shutdown()
    EndFunc
    
    ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2015-09-19
    Func _MeinBild($bSaveBinary = False, $sSavePath = @ScriptDir)
        Local $MeinBild
        $MeinBild &= 'iVBORw0KGgoAAAANSUhEUgAAAKYAAAE4CAIAAABe8R+nAAAgAElEQVR4nNy9a6wtW1Ye9n1jzKq19z7n9m0CdPPohsjdNFhGauCHZdrxD8vY9MORJSOHBkOIEjmyYjCChEgJ+E8coSjBMWB+JJEdRX7E0GCiJASIbBI7iKdsQyM/6ObybEzzMM2995yz16PmHF9+zFm1ar323Xufve89x0NH+9SqVatq1hxzvB+T/+l3/iLeGAgAJKfP7TicVP1IiiQoAGFmEk1UGGVEsuROLGQBGisAMBCApXVkOLvOezOqrMxLl7Tp3nb55MmjVx8tV2vAiBRQBD0FTYkAJSkGlMIoFI+N/dkDRW9uUBBFKgCcMmPXk6RGAJDewFEewTcABMDtwYh+AKSRIgRoQrCDsO3PSRIEoGDnCUBRjhzmNHYCP/G7v7tZb9arTQkRcK+3sroEn18gqcgApCCRDGbmnsiC3am+d5TPH7b3zRXXjwjdnnGQJgpOQjSQVDKH1VcCUTmC6g8NnRnBkIqZdbYoRU8er175vceSIgCjGSWBrPMCQOPPnzsgFVEgAZGM7u7J3a1SNoBK+iTfSCqfYG9ZkAIEkI18g6RYKCMDlBmNSDSaaAQqvkmARgcBUAbADO7m3pXBXn2yfPXlZQRIc3eMD5VidySTWCFJQa/bPDwVaEMIjGT0xNQlN9BQ2mLeTvIbj/I99s5pxq2ei1FCGxnJHAoDHLAEp3FL5QDgaKh0JqmYJ3cfMl59fPnqq6v1htYlNIExijfbspRK5SQ1Yh16TlCOMGMyN2ffJ7eqlGwVpuk90mnGe+9wQpaDhkblVX1DkCTDaaBIEGGWDDQbUQ4A8irJCQqJESTlm5VefnT5yivLks37RWnLXmIAMjMhSJPAUaBI2sqXEwLoWQMzOpFS6hfuRlDKRVEqVWu2cJ89WW7tV1Vvn6icVSmXaCSMJjMnNar38HE1GwCCNrBwPZRHT8qjR+s8EOZgIlzIklCVQbKKhqMjf14IHEDnlhK7PrmRBuUiFjCgHXzjWWDsOL0sJskKwAAgSKtcnUYgnF7VLWsCoSrvFenrkC0vhyePS8mW+k7wTV4t0oVkUoaJlBmDAYaCB49+niAlpq5zozmlIhRJe4u2cq90yjgh/ej5qvjdAMbb77FxKW0puMpvA0aGDgZBM5DJ2plqTYEQKYaYjFSHi9DaTJ1LyKUUZ9cvzl/ZvOnlxy8/enwpkZ2VXKRIlorWQEyUHSEwSBqLwcjORIkRGVFuQean1oruSCcIK5AjOsqNdA7mxS3e/MJCKgURUR9moEsys/r0rSy/k3G8JhybiJgdVPub05UkCQOi4bvSN0Ejoq4PelPywuiKIRDm7LvzCFtdbh5dltVyWUo2LsxMFtUcEwqwldaHMJ+dZxHkhIMGFUBmsei964/T51F4PVB+YINxfnLvY6M5WNXXSIGgCIhmhCzBhFGzExDVqAsipUVKZ5dP1q8+Xj65xHq9VpBpro3H7KECiJ0zzwEYzgCM9nd0Hc7OsDhPGq7rSrqxxn7j66/67cjYm8omVAt7i29W31o9S8hIB4xwY73OKBjcOriZd0OOJ+vhyTLnTCK5w8wkhYqEiGD9ZZX8jPG5W3dehdE9ybtaCne3pCzKAJXOo+95fm79GTsvm+G693/D1DdOnHyGbwBmALb0beB0gdHMYYCN66Jiy4DU9d51Q45XH68eP1pvsoGJXl30VARIOqpgqwiu7GRmEWw9M5K93tNxbaBAhDF3HS8u0vlZopXI5fqofGNkefvIyfzV7K+P+lrDtzUVDzQ5zMkaMABFmFuB0QwSl6vhyZP1chNAB5Hbe9ITSJpZyVUV0GiFcdIVpuFJ8czKc2rdeaTEiwu7OO+SqxTEcAP3wRsny6sltYtvAFaP5/hWVOu5UiybYU4bAy1uHiVW6+WTy9UwBNgBSVVIk1IWQDOYRNHqOtvBN0DS5p7XZxbIoe/9wcP+7NyTAwEWJw3Xdgy/3hzs'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= 'cr1cp6lMYoJWkTjy5PaHs5b1QMopZIiTdUY41QC5U0IUWAF/gOIiBF3NplLm+QZC8TnWqfcS9i6Vtxg1FSSBWqCOLZbbySLfwRsZJ6IqhNDhVdylPY4/BGHfv2SbYVyu08u1XC5FGB4Bp4nNvXLoStjP7xaa1XiJ6rjdvFwokqV2FsxuOycfejih/FDMrsU+YXbOgClc3lm98LN5+VBwXsFmP09RbMkf5jmo1lCIDu8l39iD7nAHQ9M/S7ieqgPvtCs83Ap7TipSDJdJLhebDNXJudnKlrqUizn2lJfLopzQfMbNZjW9TBrEzgOBka/f1RpRMBBF1YqKEp5I9q7X/76j65a9AOEaAKNpWhXRc39uiuppeotFOAg6qRFSZwJZUq5G+IO2He+f8/HYGdJFRFU+fHgxK5Z4GAtmo8vL7Yi8GWsnaiIWEbV6hC96vMqGej8empTT+lb4QYK3ZZuQsKDpeMKT98FWnhcVMABntIBgtOJ9El//1e6xP1/z+jKVSYLuUdMYTJLVFy1uJexn+rHQGCRuaUm+OWy+2vSi/G2zCUk5WUyMZPUwc6DT0+6MEhGNbwOEz8Xkp9+WiNtco9gHyO2d7/q+01UYXk1lMhGGoQAl/CalAGDGApGCkjghfrwDVGaSQinTJGLhgUApk9vLPN9ucQupQGFclNcLJuL18D6nesrJxjuNlbOIEIaZKOGK+eWF3357pSMznhgkJWPxYRaURHeyCRwPeHl/dhd2Irw6r835llVbQ0RJiHDvYz4yMWQVpcfo9STyPTMSs7/nDe/l+byne0R4pE8lfYziXWZ8x/gMC52ZEiBdhNdrmaY8/CxDecP0OL5ARMy328FVixpzSjlb7UBRsWKq+AEKZtwvfRKdtYvOUm63R6we/i23YpDksodut5vX5g9cucbXfy8Swpb8fJnk5Zvrh8tVOtEGkLEozUJ6tJ/ewPIB6HQP4JasS7pjCgiVNep1LByFnpbXSJqEqpYitabr/atb2jeMvMuMBsn6WwrpLqFAdxsc3aSFe5AUiHVpps6RsVMp3YmkCvwFPYQn+nowJERxvdj1pbxMKsJw6aw6vSECMFOr7k2Nj0Desby9Rnr+fZ5kimKmQx6DqvcHrGixakea4q6Y0qyUyev8OQVD3zWS0TTMXl5HJZXPIJtJxvDYeCIiIsbBYYIs7uTCHi+T9iZp9fK+LmEXsYh5Ur2+yDcvJVOMEIRYuxWF9AHeMkbLPDK4NjOkSvgKxYiYb7PIxfpaZoBRxFo0LC9fRfq+YZAevSmrnp3rwV+u1sguB6WRPQAIQYZsZ8RHQ//jmzSbw0K0JCK8egTY4y2WcvRieHd839nmP1kfDVGzyxUfrsWK17l6dUHJQpH03EOWIYyALQ9YsPEUy3dazSLFzHMtZSKXFGr2bgOCIX4IK/izvEw+j61yLerXJuxpPBg31ki0VCSGenZjusJuiKyvlncI0r2i9Q4VMiLWFPOv2QgHANR0ml4+fIBa0INRRZQRiI7l0AXeZNwv8yPxTbdO30bTPHp2amnBDsAuxP3OAbqWkvpRCsiM81mDi5MvscmVDy5v5o5O1UlGhEB7EaVWuRdfVN04G6Z2fXm5Xq5ABKuoaErwADZWtlPjZjmjLCJwz8pgWOCuqnP9yS9eAzp/+60WhLsj7CIfXGYANr4yAcDJogao1zDBB1VYBD594kW1FXcgmYiiqmfhoWfYc1qhSrh4FpwySQAOqYoLkhqtxoOc54bXrIJIOEggIICU4KXO8vpK0UAn+EjjMZMbvk9oP7M7i2KeneSlFBHJQu2l2N/3+wh8CmdEIa3Ja33dSPEsng8GBGJkHQUsvCmxH0xFJK1O7jRr3BLnS++9Wujy1GSs7zetfD4CHV67U7jPCXt7u8zZSF0cwFlsxntDd8/Et8YsoEHSQ4BSbJouz+QMHd7zbV5+NqQIg7fKMquZmGk4gie2q3VlqZL1K1VUzIqGjk1ZFuPoKW082SKn5/eb7dk5'
        $MeinBild &= '1kSFw2t3+8NUm6najJTq7r5Bmv00v5D/wD0mM1HU6oywSV8u5XqdAF/F7978uGtosdDzXqbyYJyHSJwM1XCiVs43n0qxIqKk+5k4pq1iWk9aFheRaSpWtU/uh2Dti3oNafX0F12ibbV1GhuIimj3FgoJr157TeMvNLET6tKoY9BnEf1wma5XNeNiKufAv3Gkf/fTNjaZx87T45HBwh68VUwzi6lJZOnrs5cC0GMiArDsLayhy4Se2XZntz+/VDqWryZe7Q6HB0/c/ZSCWxKknuslInpffmh47jvG2Y4v2c8tKKIfrvryoUwmZOUWfh3LB02sP//0zu+aHwAgxARu7pznOk0TClVPeRixlCzIbRGmymmSWYDjruyH4/sIw109S/bbsXzTO2PA8sHCgjRiqYrQI+Y5RSGRc63jSwntKhoRYLxc7HKdigoksgoLcuE6Vu/wm4ydqDsi+ufwcoCqFgSd88x5djOmH/pwNFGtTaIFiJlCVaMbO3fnnzz3TLM4O98SuveqOXuU5jO8HC2lz71W90qKqYJyVgvkS7GphNB1KpeLvVwMEllTCtDR+DF05txIoyO671/nvVPxrF6lFmD1lqP7do+Q7QI9Uw3/hxwPxPXF1OqZViryGd06PmNkMHEp0/V6UdWI6uGLDpw+njfLxi1u8nGU986/SKm1qvr1xSLqd5/m0Jef/uynk/5uoyeNjGclEpG9wyJTHfDTb+K7715VBHZ1dxJqGjGPe2MDidPjDwqZhAECEh4RggBoyzKNtbnI6LLu0se33/4VkPAp5ktUCxB4DXHhy/ECndZx26Lg8lnTHqDI3EVKSzqZf+d6vb5cZGryL00MgNMSgwkQ2pz+AucMWYl8mroF6ndK3efo5buOl+51vkWxEd7LCafbMItjh68S3L3cNH5+v/vhmPKOt9reNoZTFgtxhshl9MvC+B81cj0XY4/FvYT3YKdoT7lcr6WkpxkkI8vo3t0jSfrpbI6W7oFb5fi1VC2676mbYP319fXlZQSbPrhDDtPuh4w00bdaK7vZPN4Hef3J/BcXQDtZusd2sZvubjhGdw1KmoDw2FBIU43T556YaO4eupjEFQ3iwhARA4S8vlyLmZlCPBGDwXSFP//Qw/HIrfLglZapq2Y595tfJlNdxCWS3ex8Eq9umMo0v74GqR2vBKvK+wSwH429FaYj6LI423U/gHf7r1rn8IollPFNRH9jVlvAy9IPnqDAhKJV1S7TlFGzzdiXNbA7Qo/I/Sa8d7Lquwn7QuJSz1FV0iPCZ6JAZRJFVgJ6DBgNlCLFLCJUivYwoh2ZWnnqHVK2zXSmH/OgPMt4+f6GrQ4M9v81fWXRz+/U6ExNO8NyrH3Tt7vNAAidgAlVUVRtyvJDTiZVZ95BsNKt0Qv+rvF+LI/NSi1AygydYrJ4kYHVGX1wH9ZJbbJwD4FCQsLHZI+HWP62otFxcSDsKWxsLQH3hoE7RKdHJo6rZH39h+t8utG5znybl5+sAyYUgalYwVQUWIqBAoDA2BiTj5Aejaxn81mU0vz6boOriKQ9a7fL5jlUmfXdWqnXhyEiJK2UMlHm190yHkJ3bFO2Oe2Re2NjLsimy4dkI70A/ScOoiQZDG+rrKqxCgdnevkZLy/DQ3chSmIokFkBM50uWorRazeqKKhkLjgO/VEPtPD78W69PBXTe6hnAuYQ44pH1A+pwNFUm1LEc9J99PXz1Ppd0Md2qnJ/vM90SdCRHW149wQe0qrWE1e1LKZCRNPASQbCu2E13j2BZfL3+eVvXUlv7gnAhkl7ie/qp08fbz+zD9eXi/Di9QZgOoONKhB6ielFX+cbsnAURQcGvM0i3CDWE2pg7bVcKl2liGohqQM6jG/eAr8WwLe+E/LxVqBF7TUiyJuKSqrCJ889y99eOch4VFRM6DfCzXC9TtMkJu5xY0xNZoKEMBLbCfAA3iLCKKNlhmQrlMK9LfwzDK6nI9erOkt1M6gqEee8nJKJLEadW1zB'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= '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'
        $MeinBild &= 'xP457qoJfpkKYE9XRtAs1KqqmoaHbL4eocqMmj666n3C3VPnyz4edJAB9f6Erz3eVfz6wWnPjC/ZGg+dSKQRN8V7G5pTLymfJGuNbpxJGTBSxXlwcxm09s8rV9eQQZbOp+zC3bJl02qtAKDB2HrVMhDynWr0582T2OhpeD/PPhufIb4dpzp0ub0dGU3342dTTRUl80yzdkaDfYP6SNX3JpTd0OGc3flYcFelsdWWJBBdWxNARGKUadOYtmgAooGhUMpCCfDFay5sOfr4CtiL6I/09aPbfm+J/fFYjDNNkMa+ztoCmIuSlGyPFhVdkkUWPd0NXeIPRZqw3bfRGRkcW32Pj0ajEMm2XUQhvhp5cv9FXts0skHnUWZTzy8H7ndlJ40v8ry+vhufycsX2RurvBrNDBdpjFvS6QJdbR0np52lm5pNSxLqRuPM/88kPJwh+smZaRSiiIpRzRZeLsr1f0qxspj29M2bf95Im3yfnt4/aKAuuxc5+Pzm+Cq8PF0LyQLQcqybzXKNQWMIVSCmiJAo5FtsMtMX9Ol9cD+GPeFARkhvgjVyZhLCbm7ZuAUEmuGwX1m2E9GuDX15Xv5uLD976puzYasFNAw0W6mqmqopVE8x6QGMz/b4Fg92aTuaul2Dd1MeVvBLz8Pa3fwrIHm/81Ee5xMU693jbSwfYUnSdHEiQ1qxcAAgbmghghAs7b2likG8E6totma0ROG0hSXdyrJg1S3D7jOvTs0oYqoeM9pOVxVxWWRpRYJMiXS3EyJitng+AIEDoICwSSCr3NehvGqvAqGCGbibV6oRmerALKJDhHuGZohD0gCRcp6FIA0XPRecrap7zn+UxQCAmyrUQyJ7L5Syw6UlFGIHF8E+t2b5sgPou8v2nomLZls0Wq1dmuLXlt1ySFHY/C+iRokIXwkQgcg0T+08d3nVYkALrKD2dG20FMI8fx/fmNtU+7F14wwP1Fa6CCAZnpYzAAyhh5BmEyAMmkgEYT0smqCgpPKZTQ5TX42yeXwf4WsA2biemS8+unF38tp4XGQfxH14zxzvLtu7PHirObSYS+kuIHpPnW0aXcYStnRwUthcHdj9VwsGm2gcjRcEmiUtoIlr0YTBKGDWXBKRyEIEHiKSRQuZspiuVNNUm6AOdF7eDKjIiCJSQlq1gRCiSj4wXxAiCIBSbyTZjGRKVgGIFhydumcwmtsB4JALNjr+s6dqh9x6ApHxAc+S7lPG+jyWP8Mgx69LFY31f5pIrXSHumTIVCdNmrtAhv8AZIn7EahKRKtiPZXLZt5NrTJFpKaDljZIbSXYIQK1bo7VnjKeGeQqotmeMNZFSWEeAqFYSxkRLXSXlm8GklT1CFQHkqrAQQiCIkA04iEgVZUME3GwDAR8rH0zbypRdSxS9SFffEfDx3UYEO9ELHse5CMZwZ1P5ejzTj4an9QUsMxryQxnooVBy/AfaE1EFjluqbgSnn6ZpdKvZtHrlt0DEYS3sA2AopAkvBl5jVSoM9EJkEhcTxrQbPUtM8FBtpC0RdAMktF8cVEz/E3y91gRfWMzTxdF1jwKjiFuG7U+fAfCLgShLF9lA5FN4ZphnU/owXt5+b2+f9YfbPEcN5q5KprWoxU6k234vHrSxv+MtIbK0mIpITGHa2p66cvujw4tyCBThIiEdIdPAQBT86ZkM5+Y0ea9pMMqpHNJ/FKALbhNgFoT8IFeNYUTgmB1NlksLXGazcez7Vuy8ZBWpk0FXo8x1YptD/b0wTaBxtFX2Ml6kxGvfFsXbx13O+ENLMedmBYnx2XFcgIt6KVr5wBdNBNUBYGxJP7OaKqRuV1NTGsMFLhcc9fn3FZXrK/qm4U2V3xe0xgHmys8X97aJAFADKP60RCMaPmNBABvNcpsuYqZ/N5aI4FoF2Y7jy6tYLHUtkTSXmaH21pPQ6zYdp39RDJXHh4/qyB1HzB4CvLFML6j8L7w7E3oBZYiVzsQDpePkcWIoXzPcnMRMepiY5eeZyQi'
        $MeinBild &= 'r7fXhV1FuFef6xwRlddchdSrVVr/w5D1oWM+mM9rxbOumQuAMM0yMgwIGb0QB1W66VBVlExGExdTAJEtsjpcGaKdUDua2TG/2rRWiBjgQdNpc2Q536bYArUtkTr28E7ifwzKe3X//wcSUYXXD17XLQAAAABJRU5ErkJggg=='
        Local $bString = _WinAPI_Base64Decode($MeinBild)
        If @error Then Return SetError(1, 0, 0)
        $bString = Binary($bString)
        If $bSaveBinary Then
            Local Const $hFile = FileOpen($sSavePath & "\MeinBild.png", 18)
            If @error Then Return SetError(2, 0, $bString)
            FileWrite($hFile, $bString)
            FileClose($hFile)
        EndIf
        Return $bString
    EndFunc   ;==>_MeinBild
    
    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
  • Zeit ändern per MouseWheel

    • Oscar
    • 30. Juni 2018 um 19:59

    Mich störte das verwenden von globalen Variablen im WindowProc. Das behindert einen beim Einsatz als UDF.

    Ich habe nun etwas rumgetrickst und die Maximalwerte als UserData den Labels mitgegeben. Ich hoffe mal, das HiWord davon kann man problemlos nutzen? Im LoWord liegt ja IMHO die Control-ID.

    Jedenfalls funktioniert es so bei mir:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIGdi.au3>
    #include <WindowsConstants.au3>
    
    Global $hGui = GUICreate('Zeit ändern per MouseWheel', 350, 200)
    Global Const $aMaxVal[3] = [23, 59, 59]
    Global $aidClock[3], $iUserData
    For $i = 0 To 2
        $aidClock[$i] = GUICtrlCreateLabel('00', 60 + $i * 80, 20, 50, 44)
        GUICtrlSetFont(-1, 32, 800, 0, 'Courier New')
        $iUserData = _WinAPI_GetWindowLong(GUICtrlGetHandle($aidClock[$i]), $GWL_USERDATA)
        _WinAPI_SetWindowLong(GUICtrlGetHandle($aidClock[$i]), $GWL_USERDATA, BitOR(BitShift($aMaxVal[$i], -16), $iUserData))
    Next
    GUICtrlCreateLabel(':', 112, 20, 26, 44)
    GUICtrlSetFont(-1, 32, 400, 0, 'Courier New')
    GUICtrlCreateLabel(':', 192, 20, 26, 44)
    GUICtrlSetFont(-1, 32, 400, 0, 'Courier New')
    Global $hProcNew = DllCallbackRegister('_NewWindowProc', 'ptr', 'hwnd;uint;wparam;lparam')
    Global $hProcOld = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcNew))
    GUISetState(@SW_SHOW, $hGui)
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcOld))
                DllCallbackFree($hProcNew)
                Exit
        EndSwitch
    WEnd
    
    Func _WinAPI_WindowFromPointEx($iX, $iY)
        Local $tPoint = DllStructCreate($tagPOINT)
        DllStructSetData($tPoint, "X", $iX)
        DllStructSetData($tPoint, "Y", $iY)
        Local $aResult = DllCall("user32.dll", "hwnd", "WindowFromPoint", "struct", $tPoint)
        If @error Then Return SetError(@error, @extended, 0)
        Return $aResult[0]
    EndFunc   ;==>_WinAPI_WindowFromPointEx
    
    Func _NewWindowProc($hWnd, $iMsg, $wParam, $lParam)
        Local Const $iWheelDelta = 120
        Local $iX, $iY, $hCtrl, $iMax, $iWheel, $iValue
        Switch $iMsg
            Case $WM_MOUSEWHEEL
                $iX = _WinAPI_LoWord($lParam) ; LoWord ($lParam) = Maus-X-Koordinate
                $iY = _WinAPI_HiWord($lParam) ; HiWord ($lParam) = Maus-Y-Koordinate
                $hCtrl = _WinAPI_WindowFromPointEx($iX, $iY) ; Handle vom Control-Element unter dem Mauszeiger
                If $hCtrl <> 0 Then
                    $iMax = _WinAPI_GetWindowLong($hCtrl, $GWL_USERDATA) ; die UserDaten des Control-Elements auslesen
                    If $iMax > 0xFFFF Then ; wenn ein Maximalwert vorhanden (oben gesetzt), dann...
                        $iMax = _WinAPI_HiWord($iMax) ; den Maximalwert auslesen
                        $iWheel = _WinAPI_HiWord($wParam) / $iWheelDelta ; HiWord(wParam) / WheelDelta ergibt down = -1, up = 1
                        $iValue = _WinAPI_GetWindowText($hCtrl) + $iWheel ; bisherigen Wert auslesen und Wheelwert (-1 oder 1) addieren
                        If $iValue > $iMax Then $iValue = 0 ; wenn neuer Wert groesser als Maximalwert, dann 0
                        If $iValue < 0 Then $iValue = $iMax ; wenn neuer Wert kleiner als 0, dann Maximalwert
                        _WinAPI_LockWindowUpdate($hWnd) ; WindowUpdate blockieren (verhindert das flackern beim aendern der Werte)
                        _WinAPI_SetWindowText($hCtrl, StringFormat('%02i', $iValue)) ; neuen Wert setzen
                        _WinAPI_LockWindowUpdate(0) ; WindowUpdate wieder freigeben
                    EndIf
                EndIf
        EndSwitch
        Return _WinAPI_CallWindowProc($hProcOld, $hWnd, $iMsg, $wParam, $lParam)
    EndFunc   ;==>_NewWindowProc
    Alles anzeigen
  • Zeit ändern per MouseWheel

    • Oscar
    • 30. Juni 2018 um 14:41
    Zitat von Bitnugger

    Nach mehrmaligen Switchen habe ich bemerkt, dass es immer 1-3 Sekunden dauert, bis sich die Fenster nach einem Klick auf den Close-Button schließen.

    Du hast in Deiner ersten Version zweimal SetWindowLong auf $hGui:

    Code
    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcOld))
    DllCallbackFree($hProcNew)
    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcOld2))

    Beim zweiten _WinAPI_SetWindowLong() muss $hGui2 drin stehen, so wie Du es in Deiner zweiten Version gemacht hast.

  • Zeit ändern per MouseWheel

    • Oscar
    • 30. Juni 2018 um 08:07
    Zitat von bazii

    Nur wie bist Du draufgekommen, das Mausrad zum stellen einer Uhr zu nutzen?

    Naja, bisher habe ich dafür immer das Date-Control (GuiCtrlCreateDate) verwendet, aber das mit dem reinklicken und dann immer Up/Down klicken fand ich ziemlich umständlich.

    Da kam mir dann die Idee, mit dem Mausrad. Der Mauszeiger bestimmt die Position und das Mausrad verändert den Wert. Das gefiel mir gut, weil man die Werte recht schnell ändern kann (ohne viel Geklicke).

    Aber nicht jede Maus hat ein Mausrad (bei den meisten allerdings mittlerweile schon) oder es wird ein Touchpad benutzt. Deswegen habe ich noch die Tastatursteuerung eingebaut.

  • SelfUpdate - ein Update fuer das eigene Programm

    • Oscar
    • 29. Juni 2018 um 19:17
    Zitat von autoiter

    Daher tendiere ich dazu bei einem Programm mit Updatefunktion mit dem Programm direkt eine Update.exe bereitzustellen und habe damit gute Erfahrungen gemacht. (Ist aber vllt. nur Voodoo).

    Das halte ich in der Tat für Voodoo!

    Ob nun Batch oder Exe ist vom Bedrohungspotential völlig egal. Mit beiden kannst Du Malware erstellen.

    Die Heuristiken der AV-Programme schlagen auch meist schon an, wenn Du irgendwas aus dem Netz nachlädst (meine Erfahrung).

  • SelfUpdate - ein Update fuer das eigene Programm

    • Oscar
    • 29. Juni 2018 um 18:43

    Bis vor Kurzem hatte ich mich mit dem Thema "Update über's Internet", für meine eigenen Programme, noch gar nicht beschäftigt.

    Ich hatte sie als ZIP-Archiv hier veröffentlicht und man musste für eine neue Version halt das ZIP-Archiv entpacken bzw. die alte Version damit überschreiben.

    Bei meiner "Digitaluhr v4" habe ich nun erstmals eine Update-Funktion eingebaut: Es gibt einen Button, der beim ersten anklicken auf meiner Homepage nachsieht, ob es eine neue Version gibt und falls ja, wird nach nochmaligen draufklicken das Update durchgeführt.

    Dabei war es natürlich enorm hilfreich, dass sich alle benötigten Ressourcen (Grafiken, Sounds, Fonts, etc.) mit in der Exe-Datei befinden (BASE64-codiert), denn so muss ich nur diese eine Exe-Datei updaten/austauschen.

    Problem beim updaten, ist die Tatsache, dass das Programm ja gerade ausgeführt wird. Man kann also nicht einfach so die Exe-Datei austauschen.

    Es gibt aber einige Beispiele im Netz, wie man mit Hilfe eines temporären Batchscripts, diesen Austausch vornehmen kann.

    Nachdem ich mir das alles zusammengesucht habe, dachte ich mir, ich fasse die benötigten Schritte mal zusammen, um es euch einfacher zu machen, falls ihr sowas auch vorhabt.

    Einleitung zu Ende, hier geht's richtig los:

    Wichtigste Vorraussetzung ist der Homepage-Speicherplatz (Webhosting). Ich weiß nicht, ob es etwas Brauchbares kostenlos gibt. Ich denke aber, dass man für eine eigene Domain wohl bezahlen muss. Auf jeden Fall braucht ihr halt Speicherplatz und die Möglichkeit dort Dateien hochzuladen (FTP).

    Und es sollte möglich sein, die Dateien von dort per HTTP oder HTTPS wieder herunterzuladen. Für dieses Beispiel-Programm stelle ich die erforderlichen Dateien auf meinem Webspace zur Verfügung. Das Testprogramm funktioniert also!

    Was muss auf den Server hochgeladen werden:

    1. Die neue Version von eurem Programm ("selfupdate_test.exe")

    2. Eine Textdatei (ANSI) mit der neuen Versionsnummer ("selfupdate_test_version.txt")

    3. Eine Binärdatei mit der SHA1-Checksumme des neuen Programms ("selfupdate_test_hash.bin").


    Zu Erstens ist das einfach das folgende Script als kompilierte Exe:

    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=selfupdate_test.exe
    #AutoIt3Wrapper_Res_Fileversion=1.1.0.0
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    MsgBox(0, 'Selfupdate Test', 'Update erfolgreich!' & @CRLF & 'Neue Version v1.1')

    Zu Zweitens erstellt man mit dem Editor eine Text-Datei und schreibt da nur die neue Versionsnummer rein z.B.: "1.1.0.0" (ohne die Anführungszeichen und ohne Zeilenumbruch).

    Zu Drittens könnt ihr dieses kleine Script verwenden, um eine Binärdatei mit der SHA1-Checksumme zu erzeugen:

    AutoIt
    #include <Crypt.au3>
    #include <FileConstants.au3>
    
    Global $sFilename, $dHash, $hFile
    FileChangeDir(@ScriptDir)
    $sFilename = 'selfupdate_test.exe'
    $dHash = _Crypt_HashFile($sFilename, $CALG_SHA1)
    $hFile = FileOpen('selfupdate_test_hash.bin', $FO_OVERWRITE + $FO_BINARY)
    If $hFile <> -1 Then
        FileWrite($hFile, $dHash)
        FileClose($hFile)
    EndIf
    Alles anzeigen

    Das Update-Script:

    Das eigentliche Update übernehmen dann die zwei Funktionen (ausführlich kommentiert) aus diesem Script. Das restliche Drumherum stellt eine kleine GUI dar, womit ich euer Programm andeuten will:

    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=SelfUpdate.exe
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Crypt.au3>
    #include <FileConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <InetConstants.au3>
    #include <Misc.au3>
    #include <MsgBoxConstants.au3>
    #include <StaticConstants.au3>
    #include <StringConstants.au3>
    
    If Not @Compiled Then Exit MsgBox($MB_ICONERROR, 'Fehler', 'Bitte das Script erst kompilieren!') ; das Update nur im kompilierten Zustand ausfuehren!
    
    #Region *** Links zu den Dateien, die auf dem eigenen Server liegen muessen ***
    Global Const $sUpdateURL = 'https://www.technik-hobby.de/software/selfupdate_test.exe' ; die URL zur neuen Version des Programms
    Global Const $sHashURL = 'https://www.technik-hobby.de/software/selfupdate_test_hash.bin' ; die URL fuer die SHA1-Checksumme des neuen Programms und
    Global Const $sVersionURL = 'https://www.technik-hobby.de/software/selfupdate_test_version.txt' ; die URL fuer die ANSI-Datei mit der neuen Versionsnummer ("1.1.0.0")
    #EndRegion *** Links zu den Dateien, die auf dem eigenen Server liegen muessen ***
    
    #Region *** Wichtige globale Variablen ***
    Global Const $sAppVersion = FileGetVersion(@ScriptFullPath) ; die Versionsnummer des Scripts auslesen (#AutoIt3Wrapper_Res_Fileversion)
    Global Const $aUpdateText[3] = ['Neue Version?', 'Version aktuell!', 'Update'] ; die Beschriftungen fuer den Update-Button
    Global $iUpdateStep = 0, $sNewVersion
    #EndRegion *** Wichtige globale Variablen ***
    
    #Region *** das eigene Programm ***
    Global $hGui = GUICreate('SelfUpdate', 320, 160)
    Global $idServerVersion = GUICtrlCreateLabel('', 90, 50, 140, 20, $SS_CENTER)
    Global $idUpdate = GUICtrlCreateButton($aUpdateText[$iUpdateStep], 90, 70, 140, 30)
    GUISetState()
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $idUpdate
                Switch $iUpdateStep ; der Button hat unterschiedliche Bedeutungen:
                    Case 0 ; beim ersten anklicken wird nach einer neuen Version gesucht
                        $sNewVersion = _CheckNewVersion($sVersionURL, $sAppVersion)
                        $iUpdateStep += @extended + 1 ; @extended hat den Wert 1, wenn eine neue Version vorliegt, ansonsten 0
                        If Not @extended Then GUICtrlSetState($idUpdate, $GUI_DISABLE)
                    Case 2 ; beim zweiten anklicken wird das Update ausgefuehrt (wenn die Server-Version neuer war)
                        _SelfUpdate($sUpdateURL, $sHashURL)
                EndSwitch
                GUICtrlSetData($idServerVersion, 'Server: v' & $sNewVersion)
                GUICtrlSetData($idUpdate, $aUpdateText[$iUpdateStep]) ; die Beschriftung des Update-Buttons aendern
        EndSwitch
    WEnd
    #EndRegion *** das eigene Programm ***
    
    #Region *** die beiden Funktionen fuer das Update ***
    Func _CheckNewVersion($sURL, $sOldVersion) ; fuehrt einen Test durch, ob die Serverversion neuer als die lokale Version ist
        Local $sNewVersion, $iRet
        $sNewVersion = BinaryToString(InetRead($sURL, $INET_FORCERELOAD)) ; die Textdatei mit der neuen Version vom Server holen
        If $sNewVersion = '' Then Return SetError(1, 0, $sOldVersion) ; wenn dabei ein Fehler aufgetreten ist, dann Funktion verlassen
        $iRet = _VersionCompare($sNewVersion, $sOldVersion) ; vergleichen, ob die Server-Version neuer als die Programmversion ist
        If $iRet < 1 Then Return SetError(2, 0, $sOldVersion) ; wenn nein, dann die alte Versionnummer zurueckgeben
        Return SetError(0, 1, $sNewVersion) ; wenn ja, dann die neue Versionsnummer zurueckgeben
    EndFunc   ;==>_CheckNewVersion
    
    Func _SelfUpdate($sURL, $sHashURL) ; hiermit wird die neue Serverversion heruntergeladen, die Checksumme ueberprueft und die Exe ausgetauscht
        If Not @Compiled Then Return SetError(1, 0, 0) ; wenn das Script nicht kompiliert wurde, Funktion verlassen
        Local $sBatchFile, $sUpdateFile, $sSelfFile, $iPID, $hFile, $sBatchScript, $dHashLocal, $dHashServer
        Local $iDlSize, $hDownload, $iDlRead, $iPercent, $iTimer = TimerInit()
        $sBatchFile = 'SelfUpdate.bat' ; die Batchdatei wird unten temporaer erstellt und dann wieder geloescht
        $sUpdateFile = 'SelfUpdate_new.exe' ; das ist der Dateiname fuer InetGet (heruntergeladene Datei)
        FileChangeDir(@ScriptDir) ; das WorkingDir aendern
        $iDlSize = InetGetSize($sURL, $INET_FORCERELOAD) ; die Dateigroesse holen
        ProgressOn('Update wird heruntergeladen', StringFormat('0 von %i Bytes (0%)', $iDlSize)) ; Progressfenster oeffnen
        $hDownload = InetGet($sURL, $sUpdateFile, $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND) ; Datei im Hintergrund herunterladen (Download-Handle)
        While Not InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE) ; Schleife ausfuehren, solange wie der Download andauert
            $iDlRead = InetGetInfo($hDownload, $INET_DOWNLOADREAD) ; bisher uebertragene Bytes
            $iPercent = Int(100 / $iDlSize * $iDlRead) ; Prozent ausrechnen
            ProgressSet($iPercent, StringFormat('%i von %i Bytes (%i%)', $iDlRead, $iDlSize, $iPercent)) ; Progressbar aktualisieren
            Sleep(10) ; ein kurzes Sleep, um den Prozessor zu entlasten
            If TimerDiff($iTimer) > 60000 Then ; wenn der Download laenger als 60 sek. dauert, Fehlermeldung
                InetClose($hDownload) ; Download-Handle schliessen
                ProgressOff() ; Progressfenster schliessen
                MsgBox($MB_ICONERROR, 'Fehler', 'Zeitfehler!') ; Fehlermeldung ausgeben
                Return SetError(2, 0, 0) ; Funktion verlassen
            EndIf
        WEnd
        If InetGetInfo($hDownload, $INET_DOWNLOADERROR) <> 0 Then ; wenn beim Download ein Fehler aufgetreten ist, dann...
            InetClose($hDownload) ; Download-Handle schliessen
            ProgressOff() ; Progressfenster schliessen
            MsgBox($MB_ICONERROR, 'Fehler', 'Downloadfehler!') ; Fehlermeldung ausgeben
            Return SetError(3, 0, 0) ; Funktion verlassen
        EndIf
        InetClose($hDownload) ; Download-Handle schliessen
        ProgressSet($iPercent, StringFormat('%i von %i Bytes (100%)', $iDlSize, $iDlSize, $iPercent)) ; die Progressbar auf 100% setzen
        Sleep(1000) ; kurz warten, damit der Benutzer das registriert
        ProgressOff() ; Progressfenster schliessen
        #Region *** optionaler Checksummen-Test ***
        ; Wenn der eigene Server kein HTTPS (S = secure/sicher) anbietet, koennte man hier noch, mit Hilfe von "_Crypt_HashFile",
        ; eine Datei-Checksumme erstellen und diese mit einer, vorher auf dem Server gespeicherten, Checksumme vergleichen:
        $dHashLocal = _Crypt_HashFile($sUpdateFile, $CALG_SHA1) ; Checksumme (binaer) von der heruntergeladenen Datei erstellen
        $dHashServer = InetRead($sHashURL, $INET_FORCERELOAD) ; Checksumme (binaer) vom Server holen
        If $dHashLocal <> $dHashServer Then ; wenn die Checksummen nicht uebereinstimmen, dann...
            MsgBox($MB_ICONERROR, 'Fehler', 'Checksummenfehler!') ; Fehlermeldung ausgeben
            Return SetError(4, 0, 0) ; Funktion verlassen
        EndIf
        #EndRegion *** optionaler Checksummen-Test ***
        ; Ab hier war der Download erfolgreich und es kann das Ueberschreiben der Exe-Datei stattfinden.
        $sSelfFile = @ScriptName ; das ist der Name von diesem Programm
        $iPID = @AutoItPID ; die PID von diesem Programm
        ; die Batchbefehle mit Stringformat zusammenstellen ("\r\n" = @crlf)
        $sBatchScript = StringFormat( _
                '@echo off\r\n' & _ ; keine Ausgabe in der Konsole
                ':loop\r\n' & _ ; Sprungmarke setzen
                'tasklist /nh /fi "pid eq %i" | find ":" > nul\r\n' & _ ; nach der PID von diesem Programm (%i = $iPID) suchen
                'if errorlevel 1 (\r\n' & _ ; wenn das Programm noch laeuft (":" wird nur gefunden, wenn nicht), dann...
                '  ping -n 2 localhost\r\n' & _ ; ca. 2 sek. warten, (ping wird als kurze Pause benutzt)
                '  goto loop\r\n' & _ ; bis es sich beendet hat (goto loop)
                ')\r\n' & _
                'del "%s"\r\n' & _ ;  das alte Programm (%s = $sSelfFile) wird geloescht
                'ren "%s" "%s"\r\n' & _ ; das neue Programm (%s = $sUpdatefile) wird in das alte Programm (%s = $sSelfFile) umbenannt
                'start "" "%s"\r\n' & _ ; das neue (alte) Programm (%s = $sSelfFile) wird gestartet
                'start /b "" cmd /c del "%~f0"&exit /b\r\n', _ ; die Batchdatei loescht sich selbst ("%~f0" ist der Dateiname vom Batchscript selbst)
                $iPID, $sSelfFile, $sUpdateFile, $sSelfFile, $sSelfFile)
        $hFile = FileOpen($sBatchFile, $FO_OVERWRITE) ; Batchdatei zum ueberschreiben oeffnen
        If $hFile = -1 Then ; wenn dabei ein Fehler aufgetreten ist, dann...
            MsgBox($MB_ICONERROR, 'Fehler', 'Batchdatei konnte nicht gespeichert werden!') ; Fehlermeldung ausgeben
            Return SetError(5, 0, 0) ; Funktion verlassen
        EndIf
        FileWrite($hFile, $sBatchScript) ; Batchscript in die Datei schreiben
        FileClose($hFile) ; die Batchdatei schliessen
        Run($sBatchFile, @ScriptDir, @SW_HIDE) ; und versteckt ausfuehren
        Exit ; dieses Programm beenden
    EndFunc   ;==>_SelfUpdate
    #EndRegion *** die beiden Funktionen fuer das Update ***
    Alles anzeigen

    Die Scripte findet ihr auch als Anhang (zum runterladen)!

    Dateien

    CreateChecksum.au3 357 Byte – 441 Downloads SelfUpdate.au3 8,77 kB – 501 Downloads selfupdate_test.au3 330 Byte – 446 Downloads
  • Sowohl Gruppen als auch einzelne Einträge in einer ListView darstellen

    • Oscar
    • 29. Juni 2018 um 15:41
    Zitat von chrisbyRRC

    Habt ihr ne Idee wie ich beides anzeigen lassen kann?

    Du erstellst zwei Listviews (das Eine versteckt, während das Andere angezeigt wird).

    So kannst Du umschalten.

  • Digitaluhr v4

    • Oscar
    • 26. Juni 2018 um 09:03

    Eben! Ich werde nicht allen AV-Programmen "hinterher rennen". Avira nutze ich hier selbst auf meinen Rechnern.

    Es gibt übrigens noch eine neue Version (Post#1). Ein kleiner Bug beim Update. Wenn die Digitaluhr aus dem Autostart gestartet wurde, stimmte das WorkingDir nicht mit dem ScriptDir überein und verursachte beim Update einen Fehler.

  • Digitaluhr v4

    • Oscar
    • 25. Juni 2018 um 13:19

    Es gibt eine neue Version (v4.3 siehe Post#1).

    Leider verursacht die Exe-Datei eine "false positive"-Meldung mit Avira-AntiVirus. Ich habe denen gerade ein Exemplar eingeschickt. Mal sehen, wann die antworten. :/

    Im ZIP-Archiv befinden sich aber alle Dateien, damit ihr euch selbst eine Exe-Datei erstellen könnt.

    Edit: Ok, das ging schnell! Hier die Antwort von Avira:

    Digitaluhr_Avira.png

  • schneller Wechsel zwischen 2 definierten - öfter wechselnden - Fenstern

    • Oscar
    • 23. Juni 2018 um 15:57
    Zitat von AutoMit

    vielleicht kann der Thread nach "Programmieranfragen - ohne Gegenleistung" verschoben werden.

    So, jetzt ist das Forum "Programmieranfragen - ohne Gegenleistung" wieder "beschreibbar". Deshalb habe ich den Thread jetzt verschoben.

  • schneller Wechsel zwischen 2 definierten - öfter wechselnden - Fenstern

    • Oscar
    • 23. Juni 2018 um 08:31
    Zitat von AutoMit

    vielleicht kann der Thread nach "Programmieranfragen - ohne Gegenleistung" verschoben werden.

    Das habe ich gerade versucht!

    Verschieben geht, aber dann kann man nicht auf die Beiträge antworten. In dem Unterforum muss irgendein Konfigurationsfehler vorliegen.

    Da müssen wir auf die Admins warten.

  • Warum wird das Script nicht pausiert

    • Oscar
    • 21. Juni 2018 um 18:08
    Zitat von hipfzwirgel

    Vielleicht kennt jemand den dazugehörigen Prozess

    "explorer.exe"

    Das bringt Dich also nicht weiter. Was willst Du denn erreichen?

    Zum ändern der Bildschirmauflösung muss man nicht die Systemsteuerung aufrufen.

  • Zeit ändern per MouseWheel

    • Oscar
    • 21. Juni 2018 um 17:24

    Naja, das ist ja keine unabhängige UDF. Soll ja nur ein Minimal-Beispiel sein.

    Und ob die WinProc-Lösung für Anfänger einfacher zu "lesen" ist, sei auch mal dahingestellt, aber ich will mal nicht so sein:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WinAPIGdi.au3>
    #include <WindowsConstants.au3>
    
    Global $hGui = GUICreate('Zeit ändern per MouseWheel', 350, 200)
    Global $aidClock[3]
    For $i = 0 To 2
        $aidClock[$i] = GUICtrlCreateLabel('00', 60 + $i * 80, 20, 50, 44)
        GUICtrlSetFont(-1, 32, 800, 0, 'Courier New')
    Next
    GUICtrlCreateLabel(':', 112, 20, 26, 44)
    GUICtrlSetFont(-1, 32, 400, 0, 'Courier New')
    GUICtrlCreateLabel(':', 192, 20, 26, 44)
    GUICtrlSetFont(-1, 32, 400, 0, 'Courier New')
    
    Global $hProcNew = DllCallbackRegister('_NewWindowProc', 'ptr', 'hwnd;uint;long;ptr')
    Global $hProcOld = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcNew))
    GUISetState(@SW_SHOW, $hGui)
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProcOld))
                DllCallbackFree($hProcNew)
                Exit
        EndSwitch
    WEnd
    
    Func _NewWindowProc($hWnd, $iMsg, $wParam, $lParam)
        Local Const $aMaxVal[3] = [23, 59, 59], $iWheelDelta = 120
        Local $iWheel, $aGuiInfo, $iIndex, $iValue
        Switch $iMsg
            Case $WM_MOUSEWHEEL
                $iWheel = _WinAPI_HiWord($wParam) / $iWheelDelta ; HiWord(wParam) / WheelDelta ergibt down = -1, up = 1
                $aGuiInfo = GUIGetCursorInfo($hWnd) ; $aGuiInfo[4] enthaelt die Ctrl-ID vom Control unter dem Mauszeiger
                $iIndex = $aGuiInfo[4] - $aidClock[0] ; minus der Ctrl-ID vom ersten Label ergibt 0...2 fuer die Clock-Label
                Switch $iIndex
                    Case 0 To 2 ; nur bei den Clock-Label reagieren
                        $iValue = GUICtrlRead($aidClock[$iIndex]) + $iWheel ; Wert auslesen und Wheelwert (-1 oder 1) addieren
                        If $iValue > $aMaxVal[$iIndex] Then $iValue = 0 ; wenn neuer Wert groesser als Maximalwert, dann 0
                        If $iValue < 0 Then $iValue = $aMaxVal[$iIndex] ; wenn neuer Wert kleiner als 0, dann Maximalwert
                        _WinAPI_LockWindowUpdate($hWnd) ; WindowUpdate blockieren (verhindert das flackern beim aendern der Werte)
                        GUICtrlSetData($aidClock[$iIndex], StringFormat('%02i', $iValue)) ; neuen Wert setzen
                        _WinAPI_LockWindowUpdate(0) ; WindowUpdate wieder freigeben
                EndSwitch
        EndSwitch
        Return _WinAPI_CallWindowProc($hProcOld, $hWnd, $iMsg, $wParam, $lParam)
    EndFunc   ;==>_NewWindowProc
    Alles anzeigen
  • Warum wird das Script nicht pausiert

    • Oscar
    • 21. Juni 2018 um 17:20

    Weil das an explorer.exe übergeben wird.

    Versuch's mal so:

    Code
    ShellExecuteWait("C:\Windows\System32\control.exe", "desk.cpl")
    WinWaitActive('Bildschirmauflösung')
    WinWaitClose('Bildschirmauflösung')

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™