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

  • Grafische Darstellung von Messwerten

    • Bitnugger
    • 21. Mai 2017 um 22:55
    Zitat von Frost0071

    Wow das sieht ja schon gut aus

    Ja, finde ich auch... ;)

    Zitat von Frost0071

    Aber was meinst Du mit Berechnungen?

    Nun, du sagtest, dass für jeden Sensor ein Wert von 0-1023 übergeben wird, welcher mit einer Formel, die abhängig vom Typ des Sensors ist, umgerechnet werden muss, um das Ergebnis dann in einer Progressbar anzuzeigen.

    In der Demo habe ich die Formeln für die Umrechnung gekürzt, so dass letztendlich nur noch ein Umrechnungsfaktor benötigt wird. Deine Aufgabe ist es nun, die zweite Demo zu testen und mir dann zu sagen, ob die Werte/Farben alle stimmen. Schau dir die zweite Demo einfach mal an, wenn dann noch Fragen offen sind, dann her damit.

    Problematisch ist noch die Positionierung der Controls - vor allem die Skala. Dieser Teil ist eine echte Herausforderung... weil sich die Parameter für die Berechnungen nicht analog zur Größe und den gesetzten Attributen der verwendeten Fonts ändern! :cursing:

    Dafür brauche ich noch ein wenig Zeit...

    Progress_Demo3
    AutoIt
    ;-- TIME_STAMP   2017-05-21 22:50:00   v 0.1
    
    
    #Region ;************ Includes ************
    #include-once
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <ColorConstantS.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <Array.au3>
    ;~ #include <Color.au3>;~~~
    ;~ #include <WinAPI.au3>;~~~
    #EndRegion ;************ Includes ************
    
    
    Opt('MustDeclareVars', 1)
    
    
    ; Progressbar #1									Progressbar #2
    ; $g_aProgressbars[0][0] = $id Progressbar				$g_aProgressbars[1][0] = $id Progressbar
    ; $g_aProgressbars[0][1] = $id Left Label CURRENT		$g_aProgressbars[1][1] = $id Left Label TEMP
    ; $g_aProgressbars[0][2] = $id Center Label PROGRESS	$g_aProgressbars[1][2] = $id Center Label PROGRESS
    ; $g_aProgressbars[0][3] = $id Right Label LOAD			$g_aProgressbars[1][3] = $id Right Label FLOW
    
    
    Global $g_hGuiProgressbars, $g_aShowHideProgressbars[2][2], $g_aProgressbars[2][4], $g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor
    Global Enum $enGreen, $enYellow, $enRed, $enBlue, $enProgress, $enProgressBk, $enLabel, $enScala, $enGUI, $enStrom = 0, $enFlow = 1
    ;                    green   , yellow  , red     , blue    , Progress, ProgressBk, Labels  , Scala   , GUI_Bk
    Global $g_aColors = [0x00FF00, 0xFFFF00, 0xFF0000, 0x0000FF, 0x00FF00, 0x2888A8, 0xDFDFDF, 0xCDADFF, 0x2F2428]
    Global $g_iProgressWinTransparency = 254, $g_iProgressBarTransparency = 148
    
    
    Global $g_hGui = GUICreate('MainGUI', 840, 580, -1, 200)
    GUISetBkColor($g_aColors[$enGUI], $g_hGui)
    ;~ GUISetBkColor(0xCDADFF, $g_hGui)
    Global $g_aClientSize = WinGetClientSize($g_hGui)
    
    
    Global $g_aSliders[3][4], $xs = 40, $ys = 110, $ws = $g_aClientSize[0] - 80, $hs = 132
    
    
    _CreateSpecialSlider(0, 'CURRENT', $enBlue, 'CTRL', $xs, $ys + 0, $ws, $hs)
    _CreateSpecialSlider(1, 'TEMP', $enGreen, 'ALT', $xs, $ys + 140, $ws, $hs)
    _CreateSpecialSlider(2, 'FLOW', $enYellow, 'SHIFT', $xs, $ys + 280, $ws, $hs)
    
    
    Global $idBtnSkala = GUICtrlCreateButton('Mit Skala', 2, $g_aClientSize[1] - 52, $g_aClientSize[0] - 4, 24)
    Global $idBtnShowProgressbars = GUICtrlCreateButton('Hide Progressbars', 2, $g_aClientSize[1] - 26, $g_aClientSize[0] - 4, 24)
    GUISetState(@SW_SHOW)
    
    
    Global $g_aDummys[12]
    $g_aDummys[0] = GUICtrlCreateDummy()
    For $i = 1 To UBound($g_aDummys) -1 Step 1
    	$g_aDummys[$i] = GUICtrlCreateDummy()
    Next
    Global Enum $g_idCTRLLEFT = $g_aDummys[0], $g_idCTRLRIGHT, $g_idCTRLRUP, $g_idCTRLRDOWN, $g_idALTLEFT, $g_idALTRIGHT, $g_idALTUP, $g_idALTDOWN, $g_idSHIFTLEFT, $g_idSHIFTRIGHT, $g_idSHIFTUP, $g_idSHIFTDOWN
    ; ^ = CTRL, ! = ALT, + = SHIFT
    Global $g_aAccelKeys[12][2] = [ _
    	["^{LEFT}", $g_idCTRLLEFT],  ["^{RIGHT}", $g_idCTRLRIGHT],  ["^{UP}", $g_idCTRLRUP], ["^{DOWN}", $g_idCTRLRDOWN], _	; CURRENT
    	["!{LEFT}", $g_idALTLEFT],   ["!{RIGHT}", $g_idALTRIGHT],   ["!{UP}", $g_idALTUP],   ["!{DOWN}", $g_idALTDOWN], _	; TEMP
    	["+{LEFT}", $g_idSHIFTLEFT], ["+{RIGHT}", $g_idSHIFTRIGHT], ["+{UP}", $g_idSHIFTUP], ["+{DOWN}", $g_idSHIFTDOWN]]	; FLOW
    Local $iAccelerators = GUISetAccelerators($g_aAccelKeys)
    
    
    _CreateProgressbars($g_hGui, 800, 96, 20, 15, True)
    $g_aShowHideProgressbars[0][0] = $g_hGuiProgressbars
    $g_aShowHideProgressbars[0][1] = $g_aProgressbars
    WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
    _CreateProgressbars($g_hGui, 800, 60, 20, 15, False)
    $g_aShowHideProgressbars[1][0] = $g_hGuiProgressbars
    $g_aShowHideProgressbars[1][1] = $g_aProgressbars
    
    
    GUISwitch($g_hGui)
    WinActivate($g_hGui)
    
    
    While True
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $g_idCTRLLEFT
    			_SetSensor(0, -1)
    		Case $g_idCTRLRIGHT
    			_SetSensor(0, +1)
    		Case $g_idCTRLRUP
    			_SetSensor(0, +10)
    		Case $g_idCTRLRDOWN
    			_SetSensor(0, -10)
    		Case $g_idALTLEFT
    			_SetSensor(1, -1)
    		Case $g_idALTRIGHT
    			_SetSensor(1, +1)
    		Case $g_idALTUP
    			_SetSensor(1, +10)
    		Case $g_idALTDOWN
    			_SetSensor(1, -10)
    		Case $g_idSHIFTLEFT
    			_SetSensor(2, -1)
    		Case $g_idSHIFTRIGHT
    			_SetSensor(2, +1)
    		Case $g_idSHIFTUP
    			_SetSensor(2, +10)
    		Case $g_idSHIFTDOWN
    			_SetSensor(2, -10)
    		Case $g_aDummys[0] To $g_aDummys[UBound($g_aDummys) -1]
    		Case $idBtnShowProgressbars
    			If BitAND(WinGetState($g_hGuiProgressbars), 2) = 2 Then ; Visible?
    				WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
    				GUICtrlSetData($idBtnShowProgressbars, 'Show Progressbars')
    			Else
    				WinSetState($g_hGuiProgressbars, '', @SW_SHOW)
    				GUICtrlSetData($idBtnShowProgressbars, 'Hide Progressbars')
    			EndIf
    		Case $idBtnSkala
    			Switch GUICtrlRead($idBtnSkala)
    				Case 'Mit Skala'
    					GUICtrlSetData($idBtnSkala, 'Ohne Skala')
    					WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
    					$g_hGuiProgressbars = $g_aShowHideProgressbars[0][0]
    					$g_aProgressbars    = $g_aShowHideProgressbars[0][1]
    					WinSetState($g_hGuiProgressbars, '', @SW_SHOW)
    					_SetProgress($g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor)
    ;~ 					GUISwitch($g_hGui)
    					WinActivate($g_hGui)
    				Case 'Ohne Skala'
    					GUICtrlSetData($idBtnSkala, 'Mit Skala')
    					WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
    					$g_hGuiProgressbars = $g_aShowHideProgressbars[1][0]
    					$g_aProgressbars    = $g_aShowHideProgressbars[1][1]
    					WinSetState($g_hGuiProgressbars, '', @SW_SHOW)
    					_SetProgress($g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor)
    ;~ 					GUISwitch($g_hGui)
    					WinActivate($g_hGui)
    			EndSwitch
    
    
    	EndSwitch
    WEnd
    
    
    Func _SetSensor($idSensor, $iValue)
    	Local $iSetSensor, $iAdd = 0, $iPercent, $iMittel = $iValue * 3, $aSensor = [$g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor]
    	Switch $idSensor
    		Case 0	; Strom
    			For $i = 0 To 2 Step 1
    				If $iAdd = $iMittel Then ExitLoop
    				Switch $iValue
    					Case -1, -10
    						While $aSensor[$i] -1 > -1
    							If $iAdd = $iMittel Then ExitLoop
    							$aSensor[$i] -= 1
    							$iAdd -= 1
    						WEnd
    					Case +1, +10
    						While $aSensor[$i] +1 < 1024
    							If $iAdd = $iMittel Then ExitLoop
    							$aSensor[$i] += 1
    							$iAdd += 1
    						WEnd
    				EndSwitch
    			Next
    			$iAdd = Int(($aSensor[0] + $aSensor[1] + $aSensor[2]) / 613.8)
    			$iPercent = Int(($aSensor[0] + $aSensor[1] + $aSensor[2]) / 3 / 10.23)
    			$iSetSensor = Int(($aSensor[0] + $aSensor[1] + $aSensor[2]) / 3)
    			GUICtrlSetData($g_aSliders[0][0], $iSetSensor)	; Group
    			GUICtrlSetData($g_aSliders[0][1], $iSetSensor)	; Slider
    			Return _SetProgress($aSensor[0], $aSensor[1], $aSensor[2], $aSensor[3], $aSensor[4])
    		Case 1	; Temp
    			Switch $iValue
    				Case -1, -10
    					While $aSensor[3] -1 > -1
    						If $iAdd = $iValue Then ExitLoop
    						$aSensor[3] -= 1
    						$iAdd -= 1
    					WEnd
    				Case +1, +10
    					While $aSensor[3] +1 < 1024
    						If $iAdd = $iValue Then ExitLoop
    						$aSensor[3] += 1
    						$iAdd += 1
    					WEnd
    			EndSwitch
    			GUICtrlSetData($g_aSliders[1][0], $aSensor[3])	; Slider
    			GUICtrlSetData($g_aSliders[1][1], $aSensor[3])	; Title
    			Return _SetProgress($aSensor[0], $aSensor[1], $aSensor[2], $aSensor[3], $aSensor[4])
    		Case 2	; Flow
    			Switch $iValue
    				Case -1, -10
    					While $aSensor[4] -1 > -1
    						If $iAdd = $iValue Then ExitLoop
    						$aSensor[4] -= 1
    						$iAdd -= 1
    					WEnd
    				Case +1, +10
    					While $aSensor[4] +1 < 1024
    						If $iAdd = $iValue Then ExitLoop
    						$aSensor[4] += 1
    						$iAdd += 1
    					WEnd
    			EndSwitch
    			GUICtrlSetData($g_aSliders[2][0], $aSensor[4])	; Slider
    			GUICtrlSetData($g_aSliders[2][1], $aSensor[4])	; Title
    			Return _SetProgress($aSensor[0], $aSensor[1], $aSensor[2], $aSensor[3], $aSensor[4])
    		Case Else
    			Return SetError(1)
    	EndSwitch
    EndFunc
    
    
    ; $g_aProgressbars[0][1] = $id Left Label	CURRENT
    ; $g_aProgressbars[0][2] = $id Center Label PROGRESS CURRENT
    ; $g_aProgressbars[0][3] = $id Right Label	LOAD
    ; $g_aProgressbars[1][1] = $id Left Label	TEMP
    ; $g_aProgressbars[1][2] = $id Center Label PROGRESS FLOW
    ; $g_aProgressbars[1][3] = $id Right Label	FLOW
    Func _SetProgress($iStromSensor1, $iStromSensor2, $iStromSensor3, $iTempSensor, $iFlowSensor)
    	If $iStromSensor1 > 1023 Or $iStromSensor1 < 0 Then Return False
    	If $iStromSensor2 > 1023 Or $iStromSensor2 < 0 Then Return False
    	If $iStromSensor3 > 1023 Or $iStromSensor3 < 0 Then Return False
    	If $iTempSensor   > 1023 Or $iTempSensor   < 0 Then Return False
    	If $iFlowSensor   > 1023 Or $iFlowSensor   < 0 Then Return False
    
    
    	$g_iStromSensor1 = $iStromSensor1
    	$g_iStromSensor2 = $iStromSensor2
    	$g_iStromSensor3 = $iStromSensor3
    	$g_iTempSensor   = $iTempSensor
        $g_iFlowSensor   = $iFlowSensor
    
    
    	Local Static $aProgressColor[2]
    	Local $iPercent, $iProgressColor, $aLabel[3]
    
    
    	For $iProgress = 0 To 1 Step 1
    		Switch $iProgress
    			Case $enStrom
    				$iPercent = Int(($iStromSensor1 + $iStromSensor2 + $iStromSensor3) / 3 / 10.23)
    				GUICtrlSetData($g_aProgressbars[$iProgress][0], $iPercent)
    				Switch $iPercent
    					Case 0 To 75
    						$iProgressColor = $g_aColors[$enGreen]
    					Case 76 To 90
    						$iProgressColor = $g_aColors[$enYellow]
    					Case Else
    						$iProgressColor = $g_aColors[$enRed]
    				EndSwitch
    				$aLabel[0] = StringFormat('CURRENT %.2fA', ($iStromSensor1 + $iStromSensor2 + $iStromSensor3) / 613.8) ; Ampere
    				$aLabel[1] = StringRight('  ' & $iPercent & '%', 4) ; Progress
    				$aLabel[2] = 'LOAD' ; LOAD
    			Case $enFlow
    				$iPercent = Int($iFlowSensor / 10.23)
    				GUICtrlSetData($g_aProgressbars[$iProgress][0], $iPercent)
    				Switch $iPercent
    					Case 0 To 30
    						$iProgressColor = $g_aColors[$enRed]
    					Case 31 To 50
    						$iProgressColor = $g_aColors[$enYellow]
    					Case Else
    						$iProgressColor = $g_aColors[$enGreen]
    				EndSwitch
    				$aLabel[0] = StringFormat('TEMP %2.2f°C', $iTempSensor / 20.46) ; TEMP
    				$aLabel[1] = StringRight('  ' & $iPercent & '%', 4) ; Progress
    				$aLabel[2] = 'FLOW ' & StringRight('    ' & StringFormat('%.2f l/min', $iFlowSensor / 0.568333333333333), 13) ; FLOW
    		EndSwitch
    
    
    		GUICtrlSetData($g_aProgressbars[$iProgress][1], $aLabel[0])
    		GUICtrlSetData($g_aProgressbars[$iProgress][2], $aLabel[1])
    		GUICtrlSetData($g_aProgressbars[$iProgress][3], $aLabel[2])
    		If $aProgressColor[$iProgress] <> $iProgressColor Then
    			$aProgressColor[$iProgress] = $iProgressColor
    			GUICtrlSetColor($g_aProgressbars[$iProgress][0], $iProgressColor)
    		EndIf
    	Next
    	Return  True
    EndFunc   ;==>_SetProgress
    
    
    ; n = 0-2 0 = Strom, 1 = Temp, 2 = Flow
    ; $g_aSliders[n][0] = Group
    ; $g_aSliders[n][1] = Slider
    ; $g_aSliders[n][2] = Title
    ; $g_aSliders[n][3] = Hint
    Func _CreateSpecialSlider($iID, $sTitle, $iColor, $sModifier, $x, $y, $w, $h)
    	Local Static $iXOR = 0x6F6F6F, $iXOR2 = 0xF6F6F6
    	$g_aSliders[$iID][0] = GUICtrlCreateGroup('0', $x, $y, $w, $h, $BS_CENTER, $WS_EX_TRANSPARENT)
    	DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0)
    	GUICtrlSetFont(-1, 14, 900, 0, 'Comic Sans MS')
    	GUICtrlSetColor(-1, $g_aColors[$iColor])
    	GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
    
    
    	$g_aSliders[$iID][1] = GUICtrlCreateSlider($x + 10, $y + 28, $w - 20, 32)
    	GUICtrlSetLimit(-1, 1023, 0) ; change min/max value
    	GUICtrlSetColor(-1, $g_aColors[$iColor])
    	GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
    
    
    	$g_aSliders[$iID][2] = GUICtrlCreateLabel($sTitle, $x + 10, $y + 61, $w - 20, 32, $SS_CENTER)
    	GUICtrlSetFont(-1, 18, 900, 0, 'Comic Sans MS')
    	GUICtrlSetColor(-1, $g_aColors[$iColor])
    	GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
    
    
    	$g_aSliders[$iID][3] = GUICtrlCreateLabel(StringFormat(' %5s+LEFT = -1    %5s+RIGHT = +1    %5s+UP = +10    %5s+DOWN = -10', $sModifier, $sModifier, $sModifier, $sModifier), $x + 10, $y + 94, $w - 20, 24, $SS_CENTER)
    	GUICtrlSetFont(-1, 12, 900, 0, 'Comic Sans MS')
    	GUICtrlSetColor(-1, $g_aColors[$iColor])
    	GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
    EndFunc   ;==>_CreateSpecialSlider
    
    
    Func _CreateProgressbars($hWnd, $iWidth, $iHeight, $iLeft, $iTop, $bScale = True)
    	$g_hGuiProgressbars = GUICreate('Progressbars', $iWidth, $iHeight, $iLeft, $iTop, $WS_POPUP, BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_MDICHILD), $hWnd)
    	GUISetBkColor($g_aColors[$enGUI], $g_hGuiProgressbars)
    ;~ 	GUISetBkColor(0x4F4428, $g_hGuiProgressbars)
    	GUISetState(@SW_SHOW)
    	WinSetTrans($g_hGuiProgressbars, '', $g_iProgressWinTransparency)
    
    
    	Local $y = 5, $h1, $aLabels = [['CURRENT 0,00A', '0%', 'LOAD'], ['TEMP  23,01°C', '0%', 'FLOW ' & StringRight('    ' & StringFormat('%.2f l/min', 0), 13)]]
    
    
    	Switch $iWidth
    		Case 0 To 250
    			Return SetError(1)
    		Case 251 To 350
    			Local $iFontSize = 5, $iFontSize1 = 7, $iFontSize2 = 6
    			$h1 = 10
    		Case 351 To 450
    			Local $iFontSize = 6, $iFontSize1 = 7, $iFontSize2 = 6
    			$h1 = 14
    		Case 451 To 550
    			Local $iFontSize = 7, $iFontSize1 = 8, $iFontSize2 = 7
    			$h1 = 16
    		Case 551 To 650
    			Local $iFontSize = 8, $iFontSize1 = 8, $iFontSize2 = 7
    			$h1 = 18
    		Case 651 To 750
    			Local $iFontSize = 9, $iFontSize1 = 9, $iFontSize2 = 8
    			$h1 = 20
    		Case Else
    			Local $iFontSize = 10, $iFontSize1 = 9, $iFontSize2 = 8
    			$h1 = 22
    	EndSwitch
    
    
    	For $l = 0 To 1 Step 1
    		$g_aProgressbars[$l][0] = GUICtrlCreateProgress(20, $y, $iWidth - 40, $h1, $PBS_SMOOTH)
    		DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0)
    		WinSetTrans(GUICtrlGetHandle($g_aProgressbars[$l][0]), '', $g_iProgressBarTransparency)
    		GUICtrlSetColor(-1, $g_aColors[$enProgress])
    		GUICtrlSetBkColor(-1, $g_aColors[$enProgressBk])
    
    
    		Local $aPos = ControlGetPos($g_hGuiProgressbars, '', $g_aProgressbars[$l][0]), $w = $aPos[2] / 3
    		$g_aProgressbars[$l][1] = GUICtrlCreateLabel($aLabels[$l][0], $aPos[0] + 5, $aPos[1] + 2, $w, $aPos[3] - 4)
    		GUICtrlSetFont(-1, $iFontSize, 900, 0, 'Courier New')
    		GUICtrlSetColor(-1, $g_aColors[$enLabel])
    		GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    
    
    		$g_aProgressbars[$l][2] = GUICtrlCreateLabel($aLabels[$l][1], $aPos[0] + ($aPos[2] / 3), $aPos[1] + 2, $w, $aPos[3] - 4, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER))
    		GUICtrlSetFont(-1, $iFontSize, 900, 0, 'Courier New')
    		GUICtrlSetColor(-1, $g_aColors[$enLabel])
    		GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    
    
    		$g_aProgressbars[$l][3] = GUICtrlCreateLabel($aLabels[$l][2], $aPos[0] - 5 + $aPos[2] - $w * 1.5, $aPos[1] + 2, $w * 1.5, $aPos[3] - 4, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
    		GUICtrlSetFont(-1, $iFontSize, 900, 0, 'Courier New')
    		GUICtrlSetColor(-1, $g_aColors[$enLabel])
    		GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    
    
    		; Dieser Teil ist eine echte Herausforderung... weil sich die Parameter für die Berechnungen nicht analog zur Größe der Fonts ändert! /-(
    		; ============================================================================================================================================================================================
    		If $bScale = True Then
    			Local $x = $aPos[0] - ($iFontSize1 - 1) * 2, $x1 = $x, $y = $aPos[1], $w = $iFontSize1 + 2, $h = $iFontSize1 + 2, $n = Round($aPos[2] / 10), $m = 1, $o = 0
    			For $i = 100 To 0 Step -10
    				GUICtrlSetFont(GUICtrlCreateLabel(' ' & Chr(241) & ' ', $x + $o, $y + $aPos[3], $w * 2.4, $h, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER)), $iFontSize1, 100, 0, 'Wingdings')
    				GUICtrlSetColor(-1, $g_aColors[$enScala])
    				GUICtrlSetFont(GUICtrlCreateLabel(StringFormat(' %3i%%', 100 - $i), $x + $o, $y + $aPos[3] + $iFontSize1, $w * 2.8, $h, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER)), $iFontSize2)
    				GUICtrlSetColor(-1, $g_aColors[$enScala])
    
    
    				If $i = 10 Then $o = -1
    				If $i = 60 Then $m = -1
    				$x += Round($n + $m)
    			Next
    		EndIf
    		; ============================================================================================================================================================================================
    		$y = ($bScale = True) ? $iFontSize1 * 5.5 : $iFontSize1 * 3.5
    	Next
    EndFunc   ;==>_CreateProgressbars
    Alles anzeigen

    Progress_Demo3.png Progress_Demo3_Skala.png

  • Bräuchte Hilfe bei der Umsetzung meiner IP Abfrage

    • Bitnugger
    • 18. Mai 2017 um 05:18
    AutoIt
    ;-- TIME_STAMP   2017-05-18 05:45:51   v 0.1
    
    
    #Region    ;************ Includes ************
    #include <StringConstants.au3>
    #include <Array.au3>
    #include <WinHttp.au3>
    #EndRegion ;************ Includes ************
    
    
    Global $g_sSpacer, $g_IP
    
    
    $g_IP = _ExtractIPFromSite('whoer.net')
    
    
    Switch @error
    	Case 1
    		ConsoleWrite("_WinHttpOpen           #Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)
    	Case 2
    		ConsoleWrite("_WinHttpConnect        #Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)
    	Case 4
    		ConsoleWrite("_WinHttpSimpleRequest  #Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)
    	Case 8
    		ConsoleWrite("StringRegExp($sSource) #Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)
    	Case 16
    		ConsoleWrite("StringRegExp($IP)      #Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF)
    	Case Else
    		$g_sSpacer = (@extended = 0) ? '! ~~~~~~~~~~~~~~~~~~~~~~~~~~' & @CRLF : '! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' & @CRLF
    		ConsoleWrite($g_sSpacer & '>    $IP = ' & $g_IP & @CRLF & $g_sSpacer)
    EndSwitch
    
    
    Func _ExtractIPFromSite($sHost)
    	Local $hSession, $hConnect, $sSource, $IP, $aRes
    
    
    	$hSession = _WinHttpOpen('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0')
    	$hConnect = _WinHttpConnect($hSession, $sHost)
    	$sSource  = _WinHttpSimpleRequest($hConnect, "GET")
    	_WinHttpCloseHandle($hSession)
    	_WinHttpCloseHandle($hConnect)
    
    
    	If $hSession = 0  Then Return SetError(1)
    	If $hConnect = 0  Then Return SetError(2)
    	If $sSource  = '' Then Return SetError(4)
    
    
    	$aRes = StringRegExp($sSource, '.*?clipboard">(.+)(?:<.*)', 1)	; eg. '87.149.209.188'
    	If Not IsArray($aRes) Then Return SetError(8)
    
    
    	$IP = $aRes[0]
    
    
    ;~	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    	; Wenn du nur auf IPv4 prüfen musst...
    ;~	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    	If Not StringRegExp($IP, '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b', $STR_REGEXPMATCH) Then Return SetError(16)
    
    
    ;~	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    	; Wenn du auch auf IPv6 prüfen musst...
    ;~	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;~ 	#include <FF.au3>
    ;~ 	$IP  = '2003:81:6e7e:5800:c816:2720:828c:c0f2'
    ;~ 	If Not __FFIsIP($IP) Then Return SetError(16)
    
    
    	Return SetError(0, StringInStr($IP, ':'), $IP)
    EndFunc   ;==>_ExtractIPFromSite
    
    
    ; #INTERNAL_USE_ONLY# ==========================================================
    ; Name ..........: __FFIsIP
    ; Description ...: IP4 check
    ; AutoIt Version : V3.3.0.0
    ; Syntax ........: __FFIsIP(ByRef $IP[, $bSubstring = False])
    ; Parameter(s): .: $IP          - IPV4 Address Or IPV6 (HexCompressed/6Hex4Dec/Hex4DecCompressed)
    ; Return Value ..: Success      - 1
    ;                  Failure      - 0
    ; Author(s) .....: Thorsten Willert
    ; Date ..........: Mon Sep 23 18:50:26 CEST 2013 @743 /Internet-Zeit/
    ; ==============================================================================
    Func __FFIsIP(ByRef $IP, $bSubstring = False)
    
    
        Local $sStart = "", $sEnd = ""
    
    
        If Not $bSubstring Then
            $sStart = '^'
            $sEnd = "$"
        EndIf
    
    
        $IP = StringStripWS($IP, 3)
    
    
        Return StringRegExp($IP, $sStart & '(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])' & $sEnd) Or _
        StringRegExp($IP, $sStart & '(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}' & $sEnd) Or _ ; IPV6
        StringRegExp($IP, $sStart & '((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)' & $sEnd) Or _ ; IPV6 HexCompressed
        StringRegExp($IP, $sStart & '((?:[0-9A-Fa-f]{1,4}:){6,6})(25[0-5]||2[0-4]\d||[0-1]?\d?\d)(\.(25[0-5]||2[0-4]\d||[0-1]?\d?\d)){3}' & $sEnd) Or _ ; IPV6 6Hex4Dec
        StringRegExp($IP, $sStart & '((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::((?:[0-9A-Fa-f]{1,4}:)*)(25[0-5]||2[0-4]\d||[0-1]?\d?\d)(\.(25[0-5]||2[0-4]\d||[0-1]?\d?\d)){3}' & $sEnd) ; IPV6 Hex4DecCompressed
    
    
    EndFunc   ;==>__FFIsIP
    Alles anzeigen
  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 16. Mai 2017 um 22:15

    In den beiden Ausgaben (Suchwort / Veränderung) vom AutoIT-Info-Tool ist dieses Wort aber nicht zu sehen...

    Was hat denn mein Script (Grid) an Ausgaben produziert? Ist das Wort da evtl. in der Ausgabe zu finden? Schiebe die komplette Ausgabe doch einfach mal hier als Datei hoch...

    Hochladen.png

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 16. Mai 2017 um 21:12

    Boar... dann verate uns doch einfach mal, welches Wort das ist...

  • Brauche Ideen für Zeitmessung zwischen 2 Rechnern

    • Bitnugger
    • 16. Mai 2017 um 18:24
    Zitat von chip

    Dann sparst dir den manuellen abgleich.

    Owe... dann hat er gar nichts mehr zu tun... und geht uns vor Langeweile evtl. noch ein... :D
    :ironie:

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 16. Mai 2017 um 17:44

    Wieso bitte lädst du die Dateien nicht direkt hier im Forum hoch, sondern auf einer Wald-und-Wiesen-Seite, die mit Werbung nerven will?

    Schau mal ob du hiermit was tun kannst...

    Grid
    AutoIt
    #Region    ;************ Includes ************
    #Include <Array.au3>
    #include <WinAPISys.au3>
    #EndRegion ;************ Includes ************
    
    
    ;-- TIME_STAMP   2017-05-16 18:17:02   v 0.1
    
    
    Global $g_aResult, $g_hWnd, $g_hLV, $g_hGRID
    
    
    $g_aResult = _Test1()	; sollte so funktionieren...
    If @error = 0 Then
    	ConsoleWrite("_Test1() --> $g_aResult --> " & $g_aResult & @CRLF & "!@ " & @TAB & "#Error: " & @error & @CRLF)
    	$g_aResult = _Test2()	; aber falls nicht...
    	If @error Then Exit ConsoleWrite("_Test2() --> $g_aResult --> " & $g_aResult & @CRLF & "!@ " & @TAB & "#Error: " & @error & @CRLF)
    EndIf
    
    
    _ArrayDisplay($g_aResult, '$g_aResult')
    
    
    AdlibRegister('_CheckWin')	; Window alle 250 ms auf Veränderungen prüfen...
    
    
    Do
    	Sleep(500)
    Until $g_hGRID = ''
    
    
    ConsoleWrite('$g_hGRID = ' & $g_hGRID & @CRLF)
    
    
    ConsoleWrite('Text from $g_hWnd....: ' & WinGetText($g_hWnd) & @CRLF)
    ConsoleWrite('Text from $g_hGRID...: ' & ControlGetText($g_hGRID, '', '') & @CRLF)
    
    
    Local $bVisible = False	; wir wollen auch die nicht sichtbaren in der Liste haben...
    Local $aChildWindows = _WinAPI_EnumChildWindows($g_hWnd, $bVisible)
    
    
    Local $FO = '> %5i %-13s %-32s %s\r\n'
    ConsoleWrite(StringFormat($FO, '0', 'Window handle', 'Window class name', 'WindowText'))
    ConsoleWrite(StringFormat($FO, '0', $g_hWnd, _WinAPI_GetClassName($g_hWnd), WinGetText($g_hWnd)))
    
    
    For $i = 1 To $aChildWindows[0][0] Step 1
    	ConsoleWrite(StringFormat($FO, $i, $aChildWindows[$i][0], $aChildWindows[$i][0], WinGetText($aChildWindows[$i][0])))
    Next
    
    
    Exit 0
    
    
    Func _Test1()
    	Local $hWnd = WinGetHandle('[TITLE:[1] Arbeiten-Automatik; CLASS:TfrmArbeitenAutomatik]')
    	If $hWnd = 0 Then Return SetError(1, 0, False)
    
    
    	Local $hLV  = ControlGetHandle($hWnd, '', '[CLASS:TListView; INSTANCE:1]')
    	If $hLV = 0 Then Return SetError(2, 0, False)
    
    
    	Return _GetListViewItems($hWnd, $hLV)
    EndFunc
    
    
    Func _Test2()
    	$iOpt1 = Opt('WinTitleMatchMode', 2)	; 2 = Match any substring in the title
    	Local $hWnd = WinGetHandle('[TITLE:Arbeiten-Automatik; CLASS:TfrmArbeitenAutomatik]')
    	Opt('WinTitleMatchMode', $iOpt1)
    
    
    	Local $hLV  = ControlGetHandle($hWnd, '', '[CLASS:TListView; INSTANCE:1]')
    	If $hLV = 0 Then Return SetError(2, 0, False)
    
    
    	Return _GetListViewItems($hWnd, $hLV)
    EndFunc
    
    
    Func _GetListViewItems($hWnd, $hLV)
    	$g_hWnd = $hWnd
    	$g_hLV  = $hLV
    
    
    	Local $iItemCount    = ControlListView($hLV, '', '', "GetItemCount")
    	Local $iSubItemCount = ControlListView($hLV, '', '', "GetSubItemCount")
    
    
    	ConsoleWrite('$hWnd          = ' & $hWnd & @CRLF)
    	ConsoleWrite('$hLV           = ' & $hLV  & @CRLF)
    	ConsoleWrite('$iItemCount    = ' & $iItemCount    & @CRLF)
    	ConsoleWrite('$iSubItemCount = ' & $iSubItemCount & @CRLF)
    
    
    	Local $aLVItems[$iItemCount][$iSubItemCount]
    	For $i = 0 To $iItemCount -1 Step 1
    		For $j = 0 To $iSubItemCount -1 Step 1
    			$aLVItems[$i][$j] = ControlListView($hLV, '', '', "GetText", $i, $j)
    		Next
    	Next
    EndFunc
    
    
    Func _CheckWin()
    	Local $hGRID = ControlGetHandle($g_hWnd, '', '[CLASS:TS3Grid; INSTANCE:1]')
    	If $hGRID Then
    		MsgBox(262208, 'TADA....', 'In dem Window hat sich was geändert!!!' & @CRLF & @CRLF & '$hGRID = ' & $hGRID)
    	EndIf
    
    
    	AdlibUnRegister('_CheckWin')
    
    
    	$g_hGRID = $hGRID
    EndFunc
    Alles anzeigen
  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 15. Mai 2017 um 20:52

    @alpines
    Ja klar... bei mir wären PixelChecksum / _ImageSearch natürlich auch die allerletze Wahl, weil die zu verarbeitenden Werte allesamt variabler Natur sind und das Ergebnis somit sehr unsicher ist!

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 15. Mai 2017 um 19:05
    Zitat von alpines

    Ich hätts ja sowieso ganz anders gemacht

    Jetzt hast du mich aber neugierig gemacht... wie anders? :D

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 15. Mai 2017 um 15:04

    @alpines
    Die Funktion wird doch bereits durch AdlibRegister('_Check') alle 250 ms aufgerufen...

    @*wudu*
    Etwa so...

    AutoIt
    Func _Check()
    	Local Static $iMsgBoxAnswer, $resultPosition = 1, $x = $g_aRegion[0] + $g_aRegion[2] / 2, $y = $g_aRegion[1] + $g_aRegion[2] / 2, $tolerance = 20, $iSearch
    
    
    	If $iSearch <> '' Then Return
    
    
    	$g_iCheckSum2 = PixelChecksum($g_aRegion[0], $g_aRegion[1], $g_aRegion[2], $g_aRegion[3])
    	If $g_iCheckSum1 = $g_iCheckSum2 Then Return
    
    
    	ConsoleWrite('$g_iCheckSum2 = 0x' & Hex($g_iCheckSum2, 8) & @CRLF)
    
    	; _Check erst wieder ausführen, wenn wir ein Ergebnis von _ImageSearch bekommen haben.
    	$iSearch = -1
    
    
    ;~ 	MsgBox(64, 'Achtung', 'Es hat sich was geändert!')
    
    
    ;~ Du kannst wahlweise das BMP oder GIF als Suchmaske verwenden... funktioniert beides, mit BMP geht es aber logischerweise schneller!
    ;~ 	$iSearch = _ImageSearch($g_sBMP, $resultPosition, $x, $y, $tolerance)
    	$iSearch = _ImageSearch($g_sGIF, $resultPosition, $x, $y, $tolerance)
    	ConsoleWrite('$iSearch = ' & $iSearch & @CRLF)
    	If $iSearch Then
    		$iMsgBoxAnswer = MsgBox(262180, 'Vorsicht', '>>>>>>>>> Aufpassen <<<<<<<<<' & @CRLF & @CRLF & 'Press "Yes" to continue or "No" to Exit')
    		Select
    			Case $iMsgBoxAnswer = 6 ;Yes
    				$iSearch = ''
    				$g_iCheckSum2 = -1
    			Case $iMsgBoxAnswer = 7 ;No
    				Exit
    		EndSelect
    	EndIf
    EndFunc
    Alles anzeigen
  • Ordner/Dateien verpacken mit Progressbar

    • Bitnugger
    • 15. Mai 2017 um 14:34

    Jede Methode hat ihre eigenen Fallen... ein Umweg ist allerdings immer nur ein Umweg - und niemals eine Verbesserung/Erleichterung.

    Mit einer Ausgabeumleitung in eine Datei schreibst du doch lediglich den Stdout in eine Datei - den du mit StdoutRead direkt in eine AutoIt-Variable kopieren kannst!

    Vorteile von StdoutRead:

    • Du brauchst du dich nicht mit einer zusätzlichen Datei rumschlagen, aus der du die Daten dann erst noch einlesen musst.
    • Du hast keine Dateien, die du entsorgen musst.

    Nachteile von StdoutRead:

    • Keine


    Wenn du es so machst, brauchst du das Working-Directory nicht unbedingt setzen...

    RunWait(@ComSpec & ' /c "program mit spaces im name.exe" -param1 -param2 > "f:\Umwege 2\out.txt"')

    ">>" Die aktuelle Ausgabe wird an das Ende einer bestehenden Datei angehangen.
    ">" Die aktuelle Ausgabe wird in eine vorhandene Datei geschrieben, bereits vorhandener Inhalt wird dabei überschrieben.

    In beiden Fällen gilt: Falls die Datei nicht existiert, wird eine neue Datei erzeugt.

  • _WinAPI_CreateFile / DllStructCreate: Wie groß muss der Puffer sein?

    • Bitnugger
    • 14. Mai 2017 um 17:14

    Ja, die Info hättest du schon viel eher bringen sollen. ;)

    Ich setze mich noch mal dran und tippere dir was... aber vorab noch ein Tip.

    AutoIt
    $InStr = String($InStr & BinaryToString(DllStructGetData($tBuffer, 1)))

    BinaryToString wandelt die Binärdaten doch bereits in einen String um... wieso also nochmals einen String in einen String konvertieren wollen?


    AutoIt
    $InStr &= BinaryToString(DllStructGetData($tBuffer, 1))

    So ist das viel eleganter...

    Meine zweite Frage hast du aber nicht beantwortet!

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 14. Mai 2017 um 17:00
    AutoIt
    If $iSearch <> 1 Then Exit

    So wäre es ja ok... :D

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 14. Mai 2017 um 15:17
    AutoIt
    If iSearch <> 1 Then Exit

    ?

    Habe mal eine kleine Demo dazu geschrieben... Erklärungen findest du im Script.

    Dateien

    PixelCheck.zip 231,28 kB – 202 Downloads
  • _WinAPI_CreateFile / DllStructCreate: Wie groß muss der Puffer sein?

    • Bitnugger
    • 14. Mai 2017 um 13:28

    a) Ist bei jedem Durchlauf immer nur ein Barcode in dem File ($Input) enthalten, oder mehrere? Wenn mehrere, willst du dann jeweils nur einen pro Durchlauf auslesen, oder sollen alle in einem Array übergeben werden?

    b) Wie lang ist der längstmögliche Barcode (inkl. der zwei möglichen Bytes für die Endekennung CR und / oder LF)

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 14. Mai 2017 um 07:24

    Es spielt doch keine Rolle, wie die Exe verpackt wurde... am Ende steht der User da und muss sie starten... und darauf vertrauen, dass sie keinen Mist macht.

    Zitat von *wudu*

    Und Virustotal.com gibt es ja auch noch.

    Sicher... aber ich sehe gar nicht ein, meine knapp bemessene Zeit dafür zu opfern und die Exe dort zu checken... denn in derselben Zeit hast du die Scripte auch in ein Archiv gepackt.
    Nun, wie auch immer, meine Meinung dazu kennst du jetzt...

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 14. Mai 2017 um 06:52
    Zitat von *wudu*

    Ich hätte mal eine kleine Testoberfläche gebastelt, weil es einfach nicht sauber läuft.

    Eine *exe zum Testen hochzuladen... nicht gerade die feine Art!

  • Oberfläche auf Veränderung prüfen

    • Bitnugger
    • 14. Mai 2017 um 03:47
    Zitat von BLinz

    GuiCtrlRead um den Text auszulesen.

    Das geht nur bei selbst erstellten Controls... da du hier ja nur die controlID angibst - für fremde Controls musst du ControlGetText nehmen.

  • _WinAPI_CreateFile / DllStructCreate: Wie groß muss der Puffer sein?

    • Bitnugger
    • 14. Mai 2017 um 03:24

    Dann lasse dir mal in der Do-Until Schleife Inhalt und Länge von $tBuffer und $nBytes anzeigen... denn wie es scheint kommen beim zweiten Durchlauf keine Daten mehr an...

    • weil $nBytes = "" oder <= 2 ist
    • weil $tBuffer leer ist / _WinAPI_ReadFile keine Daten einlesen konnte
    AutoIt
    ### [...] ###
    
    
    ; Erkennt eine Eingabe, wenn folgende Bedingungen erfüllt sind: Empfange Wert aus $Input, solange bis ein @CR erscheint.
    	; Je nach Barcodeleser wird ein @CR und / oder ein @LF an den übermittelten String gehangen. Diese Zeichen stören bei mir die Suche im Array.
    	Local $sRead
    	Do
    		ConsoleWrite('- $nBytes       = ' & $nBytes & @CRLF)
    		ConsoleWrite('> $tBuffer size = ' & DllStructGetSize($tBuffer) & @CRLF)
    		ConsoleWrite('> $tBuffer len  = ' & BinaryLen(DllStructGetData($tBuffer, 1)) & @CRLF)
    		ConsoleWrite('+ $tBuffer str  = ' & BinaryToString(DllStructGetData($tBuffer, 1)) & @CRLF)
    
    
    		_WinAPI_ReadFile($Input, DllStructGetPtr($tBuffer), 1, $nBytes)
    		$sRead = StringRegExpReplace(BinaryToString(DllStructGetData($tBuffer, 1)), '\R', '')
    		$instr &= $sRead
    	Until $sRead = ''
    
    
    ### [...] ###
    Alles anzeigen
  • Ordner/Dateien verpacken mit Progressbar

    • Bitnugger
    • 14. Mai 2017 um 02:17
    Zitat von dieselwiesel

    Local $sFolder = _FileListToArrayRec("c:\myprog", "*1;*2;*3;*4;*5||6", 2, 0, 1, 2)

    Wenn du bei $sMask die Verzeichnisse mit Include explizit angibst, ist es nicht nötig, ein Verzeichnis auf selber Ebene mit Exclude_Folders auszuschließen - sondern nur bei einem Unterverzeichnis innerhalb der Include.
    Local $sFolder = _FileListToArrayRec("c:\myprog", "*1;*2;*3;*4;*5", 2, 0, 1, 2)

    Sträflich ist jedoch: Du überprüfst gar nicht, ob 7z.exe einen Fehler meldet!

    Hier mal eine etwas optimierte Version für dich...

    _SevenZipAdd
    AutoIt
    #Region    ;************ Includes ************
    #Include <File.au3>
    #include <WinAPIShPath.au3>
    #EndRegion ;************ Includes ************
    
    
    ;-- TIME_STAMP   2017-05-14 02:44:28   v 0.1
    
    
    HotKeySet('{ESC}', '_Exit')
    
    
    ; Anzahl der zu archivierenden Dateien ermitteln
    Local $sError, $aList = _FileListToArrayRec('c:\myprog', "*||*6", 1, 1, 1, 2)
    If @error Then Exit MsgBox(262144, @ScriptName, '_FileListToArrayRec' & @CRLF & @CRLF & '#Error: ' & @error)
    ;~ _ArrayDisplay($aList, '$aList')
    
    
    ; ProgressBar einschalten
    ProgressOn('Progress Meter', 'Adding to archive', StringFormat('%3i% (%3i / %3i)', 0, $aList[0]))
    ProgressSet(0, StringFormat('%.2f%  (%3i / %3i)', 0, 0, $aList[0]))
    
    
    ; Dateien mit 7z.exe archivieren
    For $i = 1 To $aList[0] Step 1
    	; "c:\..." ? - unter Windows 10 kannst du hier als normaler User nicht schreiben...
    	$sError = _SevenZipAdd($aList[$i], 'c:\myprog.7z', $aList[0])
    	If @error Then Exit MsgBox(262144, @ScriptName, $sError)
    Next
    
    
    Sleep(3000)
    ProgressOff()
    
    
    Func _SevenZipAdd($sFile, $sArchiv, $iMax)
    	Local Static $iPerc = 0, $iCount = 0
    
    
    	$iPID = Run(StringFormat('7z.exe a -spf "%s" "%s"', $sArchiv, $sFile), '', @SW_HIDE, $STDERR_CHILD)
    	ProcessWaitClose($iPID)
    	Local $sError
    	Do
    		$sError &= StderrRead($iPID)
    	Until @error
    	If $sError <> '' Then Return SetError(1, 0, $sError)
    
    
    	$iCount += 1
    	$iPerc = 100 / $iMax * $iCount
    	; Wenn du keine Nachkommastellen angezeigt haben willst, dann '%.2f%' in '%3i%' ändern!
    	ProgressSet($iPerc, StringFormat('%.2f%  (%3i / %3i)', $iPerc, $iCount, $iMax), _WinAPI_PathCompactPath(WinGetHandle('[ACTIIVE]'), $sFile, 250))
    ;~ 	If $iPerc > 30 Then Exit
    EndFunc
    
    
    Func _Exit()
    	Exit
    EndFunc
    Alles anzeigen
  • _WinAPI_CreateFile / DllStructCreate: Wie groß muss der Puffer sein?

    • Bitnugger
    • 13. Mai 2017 um 13:00
    Zitat von Crusoe

    Vielen Dank für die rege Anteilnahme an meinem Problem

    Soll ab und an mal vorkommen, dass niemand online ist, der eine sinnvolle Anwort auf derart spezielle Fragen hat... :D

    Hier noch eine kleine Optimierung:

    AutoIt
    ### [...] ###
    
    
    ; Erkennt eine Eingabe, wenn folgende Bedingungen erfüllt sind: Empfange Wert aus $Input, solange bis ein @CR erscheint.
    	; Je nach Barcodeleser wird ein @CR und / oder ein @LF an den übermittelten String gehangen. Diese Zeichen stören bei mir die Suche im Array.
    	Local $sRead
    	Do
    		_WinAPI_ReadFile($Input, DllStructGetPtr($tBuffer), 1, $nBytes)
    		$sRead = StringRegExpReplace(BinaryToString(DllStructGetData($tBuffer, 1)), '\R', '')
    		$instr &= $sRead
    	Until $sRead = ''
    
    
    ### [...] ###
    Alles anzeigen

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™