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

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Bitnugger
    • 12. Juni 2017 um 20:47
    Zitat von BLinz

    shutdown /a setzt den Exit-Code korrekt.

    Jeep.. hat auch niemand bestritten... da er den Neustart nicht verhindern, sondern nur sicherstellen will, dass er zeitnah ausgeführt wird, ist in seinem Fall die native Lösung mit dem Makro @exitMethod die beste Option. :D

    Falls kein Neustart im Gange war, gibt shutdown die Meldung "Das Herunterfahren des Systems konnte nicht abgebrochen werden, da das System zurzeit nicht heruntergefahren wird.(1116)" aus und $iResult ist dann 1116.

    AutoIt
    #include <AutoItConstants.au3>
    
    
    OnAutoItExitRegister("_Exit")
    
    
    ; Blablabla...
    
    
    Func _Exit()
    	; Das Beenden evtl. hängender Prozesse erzwingen
    	If @exitMethod = $EXITCLOSE_BYSUTDOWN Then Run('shutdown.exe /r /f /t 0') ; 4 = close by Windows shutdown
    EndFunc
    Alles anzeigen
  • GDIPlus-HoverButton Problem

    • Bitnugger
    • 12. Juni 2017 um 20:24

    Kannst du, ist aber nicht notwendig, da globale Variablen an jeder beliebigen Stelle im Script geändert werden können.

    Byref ist sehr empfehlenswert, wenn große Datenmengen (Strings/Arrays) an eine Funktion übergeben werden, da in diesem Fall lediglich eine Referenz (ein Zeiger) auf die Variable an die Funktion übergeben wird. Ohne ByRef wird eine Kopie der Variable erstellt und an die Funktion übergeben, was vor allem bei sehr großen Arrays extrem viel Zeit kostet.

    Hier kannst du es selbst auf Deutsch nachlesen: https://autoit.de/onlinehilfe/keywords/Func.htm

    Du solltest dir allerdings dringend angewöhnen, globale Variablen auch als solche erkenntlich zu machen. Das ist vor allem bei einer späteren Fehlersuche ungemein hilfreich! (Huhu @Oscar ;) )

    Global $g_hGUI, $g_iBtnState = 0, ...

  • Grafische Darstellung von Messwerten

    • Bitnugger
    • 12. Juni 2017 um 19:48

    Ok, dann mache ich erst deine spezielle Version fertig... und später, wenn die letzten Details der "Mineraldatenbank" fertig sind, die ich dem User @Neight versprochen habe, werde ich das als UDF umsetzen. Er wartet schon ewig darauf, dass ich endlich fertig werde... besonders witzig ist, dass ich durch die Lösung für die Progressbar nun auch eine fiesen Bug in der Mineraldatenbank, mit dem ich schon seit Wochen zu kämpfen hatte, fixen konnte. :)

    Jetzt nochmal kurz zu den Details für die Progressbars... ich zähle mal in groben Zügen auf, was ich wie gedenke einzubauen... wenn etwas fehlt/nicht so ist wie du es dir gedacht hast/du noch Fragen hast, dann gib Bescheid.

    Progressbars erstellen:

    • Progressbars erstellen - mit oder ohne Skala
      Entsorgen kannst du die Progressbars dann einfach mit GuiDelete() - oder wenn es dir angenehmer ist, mit einer eigenen Funktion.
    • Schriftart, Farben und Transparenz für GUI und Controls frei wählbar.
      Die Schriftgröße der Controls (Labels) ist abhängig von der Größe des GUI, in dem die Progressbars erstellt werden und wird automatisch berechnet.
    • Progressbars/Skalen anzeigen/verstecken, Labeltexte, Position, Größe, Transparenz und Farben kannst du jederzeit mit einem Funktionsaufruf ändern.
      Die Größe der Skalen wird automatisch berechnet, der Marker (eg. ^) ist allerdings frei wählbar, kann aber nachträglich nicht geändert werden.
    • Für jeden Sensor gibt es eine eigene Funktion, mit der die übergebenen Werte vor dem Setzen der Progressbars (bei Bedarf korrigiert und) umgerechnet werden.

    Zwingend erforderliche Parameter:

    • $iWidth, $iHeight, $iLeft, $iTop - Position und Größe des GUI, in dem die Progresbars erstellt werden.

    Optionale Parameter:

    • $hWnd - Handle des Parent Windows
    • $bSkala (True|False) (Default = False), Schriftart (Default = Courier New), Farben und Transparenz für GUI und Controls - kann als Array oder String ("|" als Trennzeichen) übergeben werden
    • Bereiche für die verschiedenen Farben der Progressbalken (Rot/Gelb/Grün) (max. 10 Bereiche)
      $aRangeCurrent[$iMin01, $iMax01, $iColor01, $iMin02, ...]
      $aRangeFlow[$iMin01, $iMax01, $iColor01, $iMin02, ...]

    Hinzu kommen noch ein paar Variablen, die du als Rückgabewert beim Erstellen der Progressbars bekommst, von denen du dann evtl. auch einige per Funktionsaufruf ändern kannst.
    Das Setzen der Progressbalken wird ebenfalls per Funktionsaufruf erledigt - wenn es nicht zu kompliziert wird, für jeden Label (Strom/Temp/Flow) separat.

    Updatefrequenz für die Progressbalken:
    Das Progress-Control ist relativ "träge" und braucht mindestens 20 ms, um seine Position zu ändern. Bei Werten darunter nimmt das Flackern der Labels deutlich zu! Empfohlener Wert: 50+ ms

    So, und jetzt bist du dran... :D

  • GDIPlus-HoverButton Problem

    • Bitnugger
    • 12. Juni 2017 um 14:25
    Zitat von autoiter

    Dann müsste auch deine Abfrage funktionieren.

    Was es aber nicht tut...

    Für "ButtonHover" gibt es übrigens mindestens zwei UDFs... im Anhang findest du die, die ich dafür verwende...

    @Friesel
    Dein Ansatz ist sehr kurz und einfach, aber "Polling" ist immer eine schlechte Lösung... viel besser (effizienter) ist es, die entsprechende Message auszuwerten, so wie es die UDF macht.

    Dateien

    ButtonHover.zip 29,7 kB – 332 Downloads
  • Grafische Darstellung von Messwerten

    • Bitnugger
    • 12. Juni 2017 um 11:18

    So, ich habe nun alle echten Probleme in den Griff bekommen, der Rest ist nur noch Routine und Fleißarbeit. Nun überlege ich, wie ich dir das Erstellen der Progressbars am einfachsten gestalten kann, aber auch, ob ich nicht doch besser eine UDF daraus mache.

    Entgegen dem was ich in Post #21 sagte, ist Transparenz nur für die Hintergrundfarbe nötig, um die Labels immer sichtbar zu halten, kann bei Bedarf aber auch für die GUI verwendet werden.

    Was wäre dir lieber... eine Version speziell zugeschnitten auf deine Anfrage, oder eine Version in Form einer UDF, um die Progessbars auch für andere Scripte nutzbar zu machen?

    Die spezielle Version hätte ich in 2-3 Tagen fertig, die UDF in 1-2 Wochen.

  • Installiertes und gestartetes Mozrepl läuft nicht

    • Bitnugger
    • 12. Juni 2017 um 02:13

    Dann hast du sicher nicht die aktuelle FF.au3... bei mir läuft dein (leicht geändertes) Script aus Post #1 mit dieser Version ohne Mucken.

    AutoIt
    ;-- TIME_STAMP   2017-06-12 02:10:56   v 0.1
    
    
    #include <FF.au3>
    
    
    If _FFConnect() Then
    	If _FFTabAdd("http://www.google.de") Then
    		MsgBox(64,"","www.google.de is loaded")
    	Else
    		MsgBox(64,"","Can't open www.google.de")
    	EndIf
    	Sleep(3000)
    
    
    	; Opens the browser-history in the current tab
    	_FFOpenURL("chrome:history")
    Else
    	MsgBox(64,"Error","Can't connect to FireFox")
    EndIf
    Alles anzeigen

    In der FFEx.au3 sind auch noch zwei Fehler, die @Oscar entdeckt hat.

    AutoIt
    Func _FFGetValueById($sID, $iFilter = 0)
    	;_FFGetValue($sID, "id", 0, $iFilter)
    	Return _FFGetValue($sID, "id", 0, $iFilter)	; Dank an Oscar für den Tip!
    EndFunc   ;==>_FFGetValueById
    AutoIt
    Func _FFGetValueByName($sName, $iIndex = 0, $iFilter = 0)
    	;_FFGetValue($sName, "name", $iIndex, $iFilter)
    	Return _FFGetValue($sName, "name", $iIndex, $iFilter)	; Dank an Oscar für den Tip!
    EndFunc   ;==>_FFGetValueByName
  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Bitnugger
    • 11. Juni 2017 um 00:25

    Es ist ja nicht sein Script, dass den Neustart verhindert - vermutlich ein Installer, der von dem Setup-/Update-Prozess gestartet wurde, den er mit seinem Script gestartet hat.

    Windows sendet eine Broadcast-Message an alle Prozesse, damit sie sich beenden. Wenn der Installer oder ein anderes Programm den Neustart blockieren, kann er bei Bedarf mit seinem Script darauf reagieren und mit Shutdown nach x Sekunden den Neustart erzwingen.

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Bitnugger
    • 10. Juni 2017 um 23:15

    Wenn Windows einen Neustart ausführt, wird ein Signal an alle Prozesse gesendet, damit sie sich ordendlich beenden können. In dem Fall ist @exitMethod = 4 und er kann dann mit dem ShutDown-Befehl einen Neustart ohne weitere Zeitverzögerung erzwingen.

    shutdown.exe /r /f /t 0

  • Bildschirmaktualisierung ohne Flackern

    • Bitnugger
    • 10. Juni 2017 um 17:51
    Zitat von AutoItler

    die Tatsache, dass unter win10 beim PC-Start sporadisch dieses "keiner-weiß-woher-Icon" "Alle Systemsteuerungselemente..." auftaucht, ...

    Den Desktop mit Send('{F5}') zu aktualisieren ist ganz sicher keine Lösung...

    Schau mal hier, ob dir das hilft: ... nach Windows 10-Upgrade von 8.1: fehlerhaftes Desktop-Icon oben links "Alle Systemsteuerungselemente"

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Bitnugger
    • 10. Juni 2017 um 17:31
    AutoIt
    ;-- TIME_STAMP   2017-06-10 17:28:10   v 0.1
    
    
    #include <AutoItConstants.au3>
    
    
    OnAutoItExitRegister("_Exit")
    
    
    ; ...
    
    
    Func _Exit()
    	Switch @exitMethod
    		Case $EXITCLOSE_NORMAL	; 0
    			ConsoleWrite('exitMethod = Natural closing' & @CRLF)
    		Case $EXITCLOSE_BYEXIT ; 1
    			ConsoleWrite('exitMethod = close by Exit function' & @CRLF)
    		Case $EXITCLOSE_BYCLICK ; 2
    			ConsoleWrite('exitMethod = close by clicking on exit of the systray' & @CRLF)
    		Case $EXITCLOSE_BYLOGOFF ; 3
    			ConsoleWrite('exitMethod = close by user logoff' & @CRLF)
    		Case $EXITCLOSE_BYSUTDOWN ; 4
    			ConsoleWrite('exitMethod = close by Windows shutdown' & @CRLF)
    			; Das willst du wissen...
    	EndSwitch
    	Exit
    EndFunc
    Alles anzeigen
  • Schriftgröße anhand von Breite, Höhe (und DPI) berechnen

    • Bitnugger
    • 8. Juni 2017 um 07:57

    Schau mal ob du hiermit etwas anfangen kannst...

    ReSizeCtrl_Demo
    AutoIt
    ;-- TIME_STAMP   2017-06-08 07:57:00   v 0.1
    
    
    #Region ;************ Includes ************
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    ;~ #include <MsgBoxConstants.au3>;~~~
    #include <WindowsConstants.au3>
    ;~ #include <WinAPI.au3>;~~~
    #include <WinAPIGdi.au3>
    #include <WinAPIDiag.au3>
    #EndRegion ;************ Includes ************
    
    
    ; Primary display native resolution
    ; https://technet.microsoft.com/en-us/library/dn528846.aspx
    Global Const $iAppDPI = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics', 'AppliedDPI')
    Global Const $fScale = Round(96 / $iAppDPI, 2)
    ; DPI 	Scale factor
    ;  96	100
    ; 120	125
    ; 144	150
    ; 192	200
    
    
    Example()
    
    
    Func Example()
    	Local $hGUI = GUICreate("String height & width.", 650, 650)
    	GUISetState(@SW_SHOW, $hGUI)
    	GUISetBkColor(0x1F1F2F, $hGUI)
    
    
    	Local $sText = "This is  some text ßäöüÄÖÜ" ; The text we want to find the height & width of.
    	Local $h22 = 22 * $fScale, $h24 = 24 * $fScale, $h28 = 28 * $fScale, $h32 = 32 * $fScale
    	Local $iStyle = BitOR($GUI_SS_DEFAULT_LABEL, $WS_BORDER, $SS_LEFT)
    
    
    	; So nicht!
    	Local $aStringDimension = GetStringDimensions($hGUI, $sText) ; Retrieve a 1 dimensional array with $aArray[0] = width & $aArray[1] = height.
    	Local $idLabel1 = GUICtrlCreateLabel($sText, 10, 10, $aStringDimension[0], $aStringDimension[1], $iStyle)
    	GUICtrlSetColor(-1, 0xFFFF00)
    
    
    	Local $idLabel2 = GUICtrlCreateLabel($sText, 10, 50, $aStringDimension[0], $aStringDimension[1], $iStyle)
    	GUICtrlSetFont($idLabel2, $h22, 200, 0, 'Courier New')
    	GUICtrlSetColor(-1, 0xFF0F0F)
    
    
    	Local $idLabel3 = GUICtrlCreateLabel($sText, 10, 100, $aStringDimension[0], $aStringDimension[1], $iStyle)
    	GUICtrlSetFont($idLabel3, $h24, 400, 6, 'Arial Black')
    	GUICtrlSetColor(-1, 0x0F0FFF)
    
    
    	Local $idLabel4 = GUICtrlCreateLabel($sText, 10, 150, 100, 100, $iStyle)
    	GUICtrlSetFont($idLabel4, $h28, 600, 8, 'Comic Sans MS')
    	GUICtrlSetColor(-1, 0x0FFF0F)
    
    
    	Local $idLabel5 = GUICtrlCreateLabel($sText, 10, 275, 100, 100, $iStyle)
    	GUICtrlSetFont($idLabel5, $h32, 900, 14, 'Impact')
    	GUICtrlSetColor(-1, 0xCDFFAF)
    
    
    	Local $FO = '%-8s = %i\r\n%-8s = %.2f\r\n%-8s = %.2f\r\n%-8s = %.2f\r\n%-8s = %.2f\r\n%-8s = %.2f\r\n'
    	Local $sInfo = StringFormat($FO, '$iAppDPI', $iAppDPI, '$fScale', $fScale, '$h22', $h22, '$h24', $h24, '$h28', $h28, '$h32', $h32)
    	Local $idEdit = GUICtrlCreateEdit($sInfo, 10, 400, 630, 230)
    	GUICtrlSetFont(-1, $h22, 600, 0, 'Courier New')
    	GUICtrlSetColor(-1, 0xCF2F4F)
    	GUICtrlSetBkColor(-1, 0x4F3F5F)
    
    
    	Sleep(1111)
    
    
    	_ReSizeCtrl($idLabel1)
    	_ReSizeCtrl($idLabel2)
    	_ReSizeCtrl($idLabel3)
    	_ReSizeCtrl($idLabel4)
    	_ReSizeCtrl($idLabel5)
    
    
    	Local $msg
    	While 1
    		$msg = GUIGetMsg()
    		Switch $msg
    			Case $GUI_EVENT_CLOSE
    				ExitLoop
    		EndSwitch
    	WEnd
    EndFunc   ;==>Example
    
    
    Func _ReSizeCtrl($hCtrl)
    	If Not IsHWnd($hCtrl) Then $hCtrl = GUICtrlGetHandle($hCtrl)
    	Local $idCtrl = _WinAPI_GetDlgCtrlID($hCtrl)
    	Local $hParent = _WinAPI_GetParent($hCtrl)
    	Local $aPos = ControlGetPos($hCtrl, '', ''), $w = $aPos[2], $h = $aPos[3]
    	Local $aStringDimension = GetStringDimensions($hCtrl, ControlGetText($hCtrl, '', ''))
    
    
    	While $w <> $aStringDimension[0] Or $h <> $aStringDimension[1]
    		If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
    
    
    		Select
    			Case $h + 5 < $aStringDimension[1]
    				$h += 5
    			Case $h - 5 > $aStringDimension[1]
    				$h -= 5
    			Case $w + 5 < $aStringDimension[0]
    				$w += 5
    			Case $w - 5 > $aStringDimension[0]
    				$w -= 5
    
    
    			Case $h < $aStringDimension[1]
    				$h += 1
    			Case $h > $aStringDimension[1]
    				$h -= 1
    			Case $w < $aStringDimension[0]
    				$w += 1
    			Case $w > $aStringDimension[0]
    				$w -= 1
    		EndSelect
    
    
    		Switch $idCtrl
    			Case 0
    				; https://www.autoitscript.com/forum/topic/79942-controlmove-bug-or-what/
    				ControlMove($hCtrl, '', '', $aPos[0], $aPos[1], $w, $h)
    				_WinAPI_RedrawWindow($hCtrl)
    			Case Else
    				GUICtrlSetPos($idCtrl, $aPos[0], $aPos[1], $w, $h)
    		EndSwitch
    	WEnd
    EndFunc   ;==>_ReSizeCtrl
    
    
    Func GetStringDimensions($hWnd, $sText)
    	Local $hDC = _WinAPI_GetDC($hWnd) ; Get the device context handle of the current window.
    	Local $hFont = _SendMessage($hWnd, $WM_GETFONT) ; Retrieve the font with which the control is currently drawing its text.
    	Local $iBreakExtra = 1, $iBreakCount = 1
    	Local $bAPI = _WinAPI_SetTextJustification($hDC, $iBreakExtra, $iBreakCount)
    	Local $hSelectObject = _WinAPI_SelectObject($hDC, $hFont) ; Select the object of the context device.
    	Local $tSIZE = _WinAPI_GetTextExtentPoint32($hDC, $sText) ; Retrieve the height & width of a string.
    	Local $tTEXTMETRIC = _WinAPI_GetTextMetrics($hDC)
    	Local $iPad = 0, $iItalic = DllStructGetData($tTEXTMETRIC, 'tmItalic')
    	If $iItalic Then
    ;~ 		_WinAPI_DisplayStruct($tTEXTMETRIC, $tagTEXTMETRIC)
    		$iPad = DllStructGetData($tTEXTMETRIC, 'tmInternalLeading')
    	EndIf
    
    
    	_WinAPI_SelectObject($hDC, $hSelectObject)
    	_WinAPI_ReleaseDC($hWnd, $hDC) ; Release the device context.
    	Local $aReturn[2] = [DllStructGetData($tSIZE, 1) + $iPad, DllStructGetData($tSIZE, 2)] ; Set an array with the width & height of the string.
    	Return $aReturn
    EndFunc   ;==>GetStringDimensions
    Alles anzeigen
  • Kleines Desktop-Spiel (ChipHunter)

    • Bitnugger
    • 6. Juni 2017 um 23:41
    Zitat von autoiter

    Dafür bietet Windows ja selbst etwa eine Lautstärkeregelung.

    Zum einen wird das Spiel mit dem Style $WS_POPUPWINDOW und dem ExStyle $WS_EX_TOPMOST gestartet, zum anderen greift die Lautstärkeregelung bei dem Spiel eh nicht und die Master-Volume deswegen zu ändern, ist für mich keine Option.

  • Kleines Desktop-Spiel (ChipHunter)

    • Bitnugger
    • 6. Juni 2017 um 22:56

    Wäre schön wenn die Lautstärke konfigurierbar wäre...

  • GUI Studie

    • Bitnugger
    • 2. Juni 2017 um 15:40
    Zitat von oliver4friends
    AutoIt
    $gsw_list = GUICtrlCreateListView('Install|Program|Version|Kommentar', 1, 50 + 15, 732, 320, $LVS_SHOWSELALWAYS, $LVS_SINGLESEL)
        _GUICtrlListView_SetExtendedListViewStyle($gsw_list, BitOR($LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES))

    In Zeile 26 hast du einen Fehler...

    AutoIt
    $gsw_list = GUICtrlCreateListView('Install|Program|Version|Kommentar', 1, 50 + 15, 732, 320, BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_SHOWSELALWAYS, $LVS_SINGLESEL))
        _GUICtrlListView_SetExtendedListViewStyle($gsw_list, BitOR($LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES))
  • Grafische Darstellung von Messwerten

    • Bitnugger
    • 1. Juni 2017 um 18:12
    Zitat von Frost0071

    Ist es möglich dieses Fenster auch später so darzustellen wie im Screenshot oben von mir?

    Ja sicher doch... in der Demo habe ich das Fenster mit Rahmen erstellt, damit du es auch mit der Maus schließen kannst. Du kannst es auch einfach mit GuiDelete($g_hGuiProgressbars) schließen.

    Wenn die Progressbars mit Skala angezeigt werden, muss das Fenster aber etwas breiter sein.

  • Listview-Datenbank v3

    • Bitnugger
    • 31. Mai 2017 um 05:45
    Zitat von BLinz

    sieht aus wie der Rahmen einer Group

    Ist es auch... und es liegt am Resizing.

    Wenn du nach dem Schließen der Gruppe ("schließen" finde ich treffender) unter Zeile 105 noch ein GUICtrlSetResizing() einfügst, stimmt es mit der Optik wieder...

    AutoIt
    GUICtrlCreateGroup('', -99, -99, 1, 1) ; die Gruppe beenden
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKTOP + $GUI_DOCKLEFT)
  • SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen

    • Bitnugger
    • 28. Mai 2017 um 02:50
    Zitat von BugFix

    Wenn noch keines vorhanden ist, ist auch der Registry- Eintrag für Kontextmenü (neue au3-Datei) nicht vorhanden. Somit ist die Erstellung eines Templates funktionslos.

    Dann kann man den Registrierungsschlüssel doch hinzufügen...

    PersonalizeAU3Template.au3
    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    
    #RequireAdmin
    
    
    ;-- TIME_STAMP   2017-05-28 02:43:27   v 0.1
    
    
    _FileCreateTemplate()
    
    
    Func _FileCreateTemplate()
    	RegRead('HKCR\.au3', '')
    	If @error Then Exit _
    		MsgBox(262192, @ScriptName, 'Fehler: Der Registrierungsschlüssel "HKCR\.au3" ist ' & (@error = -1 ? 'leer' : 'nicht vorhanden') & '!')
    
    
    
    
    	Local $sCreator = _GetAU3Property('UDFCreator', @UserName)
    	Local $sWrite = _
    		"#cs ----------------------------------------------------------------------------" & @CRLF & @CRLF & _
    		" AutoIt Version:  " & @AutoItVersion & @CRLF & _
    		" Author:          " & ($sCreator = "Your Name" ? @UserName : $sCreator) & @CRLF & @CRLF & _
    		" Script Function: AutoIt script." & @CRLF & @CRLF & _
    		"#ce ----------------------------------------------------------------------------" & @CRLF & @CRLF & _
    		"; Script Start - Add your code below here" & @CRLF
    
    
    	Local $sFileName = @WindowsDir & "\ShellNew\Template.au3"
    	If Not FileExists($sFileName) Then
    		Switch MsgBox(262196, @ScriptName, _
    				'Fehler: Es wurde kein Template für *.au3 gefunden!' & @CRLF & @CRLF & _
    				'Soll ein Template inkl. des benötigten Registrierungsschlüssels erzeugt werden?' & @CRLF & @CRLF & _
    				'Template' & @CRLF & _
    				'  ' & $sFileName & @CRLF & @CRLF & _
    				'Registrierungsschlüssel' & @CRLF & _
    				'  Schlüssel' & @TAB & ': "HKCR\.au3\ShellNew\FileName"' & @CRLF & _
    				'  Typ' & @TAB & @TAB & ': "REG_SZ"' & @CRLF & _
    				'  Wert' & @TAB & @TAB & ': "Template.au3"')
    			Case 6 ;Yes
    					RegWrite('HKCR\.au3\ShellNew', 'FileName', 'REG_SZ', 'Template.au3')
    					If @error Then Exit MsgBox(262192, @ScriptName, 'Fehler: RegWrite() - Du musst das Script als Administrator starten!')
    			Case 7 ;No
    				Exit
    		EndSwitch
    	EndIf
    
    
    	Local $fH = FileOpen($sFileName, 2+128)	; $FO_OVERWRITE (2), $FO_UTF8 (128) (with BOM)
    	Local $iSucc = FileWrite($fH, $sWrite)
    	FileClose($fH)
    	Exit MsgBox(($iSucc = 1 ? 262208 : 262192), ($iSucc = 1 ? 'Fertig!' : 'Fehler!'), ($iSucc = 1 ? _
    		'Das personalisierte Template wurde erfolgreich geschrieben.' : 'Das Template konnte nicht geschrieben werden.'))
    EndFunc
    
    
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GetAU3Property
    ; Description ...: Gets a property value (one-line entry only!). Ask order: 1. SciTEUser.properties 2. au3.properties
    ; Syntax ........: _GetAU3Property($sProperty[, $sDefault = ''])
    ; Parameters ....: $sProperty           - The property name
    ;                  $sDefault            - [optional] A value to use, if none property set. Default is ''.
    ; Return values .: The value of the property (or the default value)
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _GetAU3Property($sProperty, $sDefault='')
    	Local $sPathUserProp = @LocalAppDataDir & "\AutoIt v3\SciTE\SciTEUser.properties"         ; C:\Users\[USER]\AppData\Local\AutoIt v3\SciTE\SciTEUser.properties
    	Local $sPathAU3Prop = StringTrimRight(@AutoItExe, 11) & "SciTE\properties\au3.properties" ; C:\Program Files (x86)\AutoIt3\SciTE\properties\au3.properties
    	Local $sRead = '', $sValueReturn = $sDefault, $aMatch
    	Local $sPattern = $sProperty & "=([^\r\n]+)"
    	If FileExists($sPathUserProp) Then $sRead = FileRead($sPathUserProp)
    	$aMatch = StringRegExp($sRead, $sPattern, 1)
    	If @error Then
    		If FileExists($sPathAU3Prop) Then $sRead = FileRead($sPathAU3Prop)
    		$aMatch = StringRegExp($sRead, $sPattern, 1)
    		If Not @error Then $sValueReturn = $aMatch[0]
    	Else
    		$sValueReturn = $aMatch[0]
    	EndIf
    	Return $sValueReturn
    EndFunc
    Alles anzeigen
  • SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen

    • Bitnugger
    • 27. Mai 2017 um 15:50

    Ja, in der Tat... eine gute Idee. :)

    Zitat von BugFix

    _FileCreateTemplate()

    Hm, verstehe nur nicht so ganz, wieso du das Script beendest, wenn keine Template.au3 vorhanden ist? Bei diesem Funktionsnamen hätte ich angenommen, dass eine erstellt wird, falls nötig.

  • SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen

    • Bitnugger
    • 27. Mai 2017 um 03:30

    @autoiter
    Ich war so frei und habe ein paar Korrekturen/Änderungen an deinem Script vorgenommen... damit es auch bei mir läuft. ;)

    AutoIt
    ;-- TIME_STAMP   2017-05-27 03:24:44   v 0.1
    
    
    #RequireAdmin
    
    
    _Do_UTF8_BOM()
    
    
    Func _Do_UTF8_BOM()
    	Local $aFilePath, $sUserFilePath, $sFilePath, $sNewFilename, $sStartScript, $sNewLine, $sChangeFile, $sNewFileString, $sStartScriptString, $iBackup, $hFile, $aSplit, $sString
    
    
    	$sFilePath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE" & ((@AutoItX64 = 1) ? "\Wow6432Node" : "") & "\AutoIt v3\AutoIt", "InstallDir") & '\SciTE\lua\'
    
    
    	$aFilePath = StringRegExp(FileRead(EnvGet('SCITE_USERHOME') & '\SciTEUser.properties'), 'Lua.User.Scripts.Path=.+', 1)
    	If IsArray($aFilePath) Then
    		$sUserFilePath = StringSplit($aFilePath[0], '=', 2)[1] & '\'
    	Else
    		$sUserFilePath = $sFilePath
    	EndIf
    
    
    	$sStartScript = 'SciTEStartup.lua'
    	$sNewFilename = 'new_as_utf8bom.lua'
    
    
    	$sStartScriptString = FileRead($sFilePath & $sStartScript)
    	If @error Then Exit MsgBox(0, '', 'Abbruch - Fehler beim Einlesen: ' & $sFilePath & $sStartScript)
    
    
    	$sNewLine = (StringInStr($sStartScriptString, 'LoadUserLuaFile') > 0) ? 'LoadUserLuaFile("new_as_utf8bom.lua")' : 'LoadLuaFile("new_as_utf8bom.lua", "' & StringReplace($sFilePath, '\', '\\') & '")'
    	$sChangeFile = 'C:\Windows\ShellNew\Template.au3'
    
    
    	$sNewFileString = '-- TIME_STAMP   2017-05-27 01:38:27 \' & _
    			  'NewFile = EventClass:new(Common) \' & _
    			  'function NewFile:OnUpdateUI(filename) \' & _
    			  '	   if props["FileName"] == "" then \' & _
    			  '	   	   -- set to UTF-8 with BOM \' & _
    			  '	   	   scite.MenuCommand(153) -- 153 = IDM_ENCODING_UTF8 \' & _
    			  '	   end \' & _
    			  '	   return nil  -- default processing \' & _
    			  'end'
    
    
    	FileWrite($sUserFilePath & $sNewFilename, StringReplace($sNewFileString, ' \', @CRLF))
    	If @error Then Exit MsgBox(0, '', 'Abbruch - Fehler beim Schreiben: ' & $sUserFilePath & $sNewFilename)
    
    
    
    
    	$iBackup = FileCopy($sFilePath & $sStartScript, $sFilePath & $sStartScript & '.' & StringFormat('%s%s%s_%s%s%s', @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC) & '.bak')
    	If Not $iBackup Then Exit MsgBox(0, '', 'Abbruch - Fehler beim Erstellen des Backups: ' & $sFilePath & $sStartScript)
    
    
    	If Not StringInStr($sStartScriptString, $sNewLine) Then
    		$hFile = FileOpen($sFilePath & $sStartScript, 2)
    		If $hFile = -1 Then Exit MsgBox(0, '', $sFilePath & $sStartScript & ' konnte nicht geöffnet werden')
    		$aSplit = StringSplit($sStartScriptString, 'if os.getenv', 3)
    		FileWrite($hFile, $aSplit[0] & $sNewLine & @CRLF & 'if os.getenv' & $aSplit[1])
    		FileClose($hFile)
    	EndIf
    
    
    	$sString = FileRead($sChangeFile)
    	If @error Then Exit MsgBox(0, '', 'Abbruch - Fehler beim Löschen: ' & $sChangeFile)
    	$hFile = FileOpen($sChangeFile, 130)
    	FileWrite($hFile, StringReplace($sString, 'myName', @UserName))
    	FileClose($hFile)
    
    
    	MsgBox(0, '', 'Neue Skripte werden nun mit UTF8+BOM Zeichensatz erstellt', 4)
    EndFunc   ;==>_Do_UTF8_BOM
    Alles anzeigen
  • Grafische Darstellung von Messwerten

    • Bitnugger
    • 24. Mai 2017 um 19:22
    Zitat von Frost0071

    Etwas ist mir beim rummspielen schon aufgefallen und zwar wenn die Balken ihre Farbe ändern oder auch kurz davor verschwinden die "Zahlen"

    Zeilen 171, 172 und 172 auskommentieren/löschen, Zeilen 164, 165 und 166 aktivieren.

    Das Verschwinden beruht auf der einfachen Tatsache, dass ein Control in den Vordergrund geholt wird, sobald es angesprochen wird und somit alle darunterliegenden Controls an den überlappenden Stellen überdeckt.

    Ich kenne ein paar Methoden, die dem entgegenwirken:

    • Die Hintergrundfarbe eines Controls auf "unsichtbar" setzen, damit darunterliegende Controls durchscheinen können
    • Die Transparenz eines Controls ändern, damit darunterliegende Controls durchscheinen können
    • Über den Controls ein Child-Window mit transparentem Hintergrund erstellen, in diesem dann die Control mit transparenter Hintergrundfarbe erstellen, die nicht überdeckt werden sollen.

    Hier wird auf einen Blick erkennbar, dass der Kernpunkt bei allen Methoden die Transparenz ist, welche naturbedingt aber (leider) auch den (unerwünschten) Nebeneffekt mit sich bringt, dass sie sich auf die Farben der sich überlappenden Controls auswirkt. Hier muss man also mit den Transparenzen/Farben experimentieren, um ein ansprechendes Ergebnis zu erhalten.

    Ein völlig anderer Weg wäre, die komplette Progressbar mit GDIplus zu erstellen, wofür es bereits eine UDF von @progandy gibt. Leider stürzen beide Examples bei mir (Windows 10 X64) schon nach kuzer Zeit ab.

    Ich experimentiere noch...

    Zitat von Frost0071

    Und dann hätte ich noch gern die Farbe der Anzeige geändert

    Anzeige --> Progressbar
    Farben und Transparenzen kannst du in der Demo mit den globalen Variablen $g_aColors, $g_iProgressWinTransparency und $g_iProgressBarTransparency bestimmen. Beim Erzeugen des Child-Windows für die Progressbars besorge ich mir nun die Hintergrundfarbe des Parent-Windows. Die brauchst du also nur dann ändern, wenn es nicht dieselbe Hintergrundfarbe haben soll.

    Im Laufe des Abends, spätestens aber morgen, schiebe ich eine aktualisierte Version der Demo hoch... muss da aber erst noch ein paar Sachen korrigieren.

    Zitat von Frost0071

    Jetzt noch mal zu den Werten. Müssen diese fest programmiert werden von Dir zwegs Umrechnung?

    Nein... in der Demo verwende ich der Einfachheit halber fixe Werte, in der fertigen Version ist die Umrechnung selbstverständlich anpassbar - die Sensorwerte werden dann entweder an eine Funktion übergeben, welche die korrigierten Werte als Ergebnis liefert, oder die Umrechnungsfaktoren werden als globale Variablen/Konstanten deklariert.

    Zitat von Frost0071

    Und das es so eine Herausforderung ist war mich echt nicht bewusst

    Wenn du für die Progressbars keine Skala brauchst, würde sich die Herausforderung damit auf 30% reduzieren... :D

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™