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

Beiträge von BugFix

  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • BugFix
    • 27. Juli 2022 um 07:21
    Zitat von gert_nrw_71

    ich suche eine Möglichkeit über AutoIT die Eingabe über einen Barcodescanner direkt in eine Variable zu speichern, ohne über eine Inputbox oder sonstige Eingabefelde zu gehen.

    Ich habe bisher nur mit einem Barcodescanner gearbeitet. Aber egal, ob über Bluetooth oder USB angeschlossen - er wird als Eingabegerät behandelt.

    Das erfordert somit, dass vor dem Übertragen des Scanner Speichers (oder dem direkten Scan) sich der Cursor in einem Eingabefeld befindet.

    Alternativ kann man (zumindest bei meinem Scanner) einen Hotkey vor dem Übertragen der Daten senden lassen. Damit öffne ich z.B. eine Excel Tabelle, in die dann alle Daten des Scanners in die Zellen einer Spalte untereinander eingetragen werden.

    Soweit mir bisher bekannt ist, benötigt der Scanner ein Eingabefeld in einem aktiven Fenster um seine Daten zu übertragen. Da geht nix mit im Hintergrund arbeiten.

  • Gui - unsichtbar, nur Anzeigen von Control

    • BugFix
    • 26. Juli 2022 um 15:18

    Das "Verstecken" der Gui lässt sich mit _WinAPI_CombineRgn durchführen. Das ist alles etwas sperrig und deshalb habe ich das mal in eine UDF verpackt.

    Mit Aufruf der Funktion _GuiBGInvisible wird eine Ctrl-ID oder ein Array von IDs übergeben. Diese Ctrl werden dann ohne Gui - also frei schwebend - angezeigt.

    Optional kann eine Funktion übergeben werden, die anhand der ID das entsprechende Ctrl von der Anzeige ausschließt. Die Funktion muss als einzigen Parameter die $ID führen und True/False (ni. anzeigen / anzeigen) zurück geben.

    AutoIt: GuiBGInvisible.au3
    ;-- TIME_STAMP   2022-07-26 14:55:41   v 0.1
    
    
    #include-once
    #include <WinAPIGdi.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPISysInternals.au3>
    #include <WindowsConstants.au3>
    
    
    ; #FUNCTION# =======================================================================================
    ; Name ..........: _GuiBGInvisible
    ; Description ...: Makes the entire window area invisible, only the passed control is displayed.
    ; Parameter(s)...: $_hGui             The Gui handle
    ; ...............: $_vCtrlAdd         One or an array of control IDs
    ; ....[optional].: $_fCondIgnoreCtrl  Function to exclude controls from display based on the passed ID.
    ; ...............:                    "MyFunc_Exclude($ID)" must return true/false. (Default: Null, no func)
    ; Return values .: None
    ; Author ........: BugFix
    ; ==================================================================================================
    Func _GuiBGInvisible($_hGui, $_vCtrlAdd, $_fCondIgnoreCtrl=Null)
        Local $aWin = WinGetPos($_hGui)
        Local $combined_rgn = _WinAPI_CreateRectRgn($aWin[0], $aWin[1], $aWin[0]+$aWin[2], $aWin[1]+$aWin[3])
        _AddCtrlRegion($combined_rgn, $_vCtrlAdd, $_fCondIgnoreCtrl)
        _WinAPI_SetWindowRgn($_hGui, $combined_rgn)
        _WinAPI_DeleteObject($combined_rgn)
    EndFunc  ;==>_GuiBGInvisible
    
    
    Func _AddCtrlRegion($_full_rgn, $_vCtrlID, $_fCondIgnoreCtrl=Null)
        Local $iHtit = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
        Local $iFrame = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME)
        Local $ctrl_pos, $ctrl_rgn
        Local $hParent = Null, $iStyle = Null
        If IsArray($_vCtrlID) Then
            For $i = 0 To UBound($_vCtrlID) -1
                If $hParent = Null Then $hParent = _WinAPI_GetParent(GUICtrlGetHandle($_vCtrlID[$i]))
                If $iStyle = Null Then $iStyle = _WinAPI_GetWindowLong($hParent, $GWL_STYLE)
                If IsFunc($_fCondIgnoreCtrl) Then
                    If $_fCondIgnoreCtrl($_vCtrlID[$i]) Then ContinueLoop
                EndIf
                $ctrl_pos = ControlGetPos($hParent, "", $_vCtrlID[$i])
                If __GuiHasCaptionbar($hParent) Then
                    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0]+$iFrame, $ctrl_pos[1]+$iHtit+$iFrame, $ctrl_pos[0] + $ctrl_pos[2]+$iFrame, $ctrl_pos[1] + $ctrl_pos[3]+$iHtit+$iFrame)
                Else
                    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
                EndIf
                _WinAPI_CombineRgn($_full_rgn, $_full_rgn, $ctrl_rgn, $RGN_OR)
                _WinAPI_DeleteObject($ctrl_rgn)
            Next
        Else
            If IsFunc($_fCondIgnoreCtrl) Then
                If $_fCondIgnoreCtrl($_vCtrlID) Then Return
            EndIf
            $hParent = _WinAPI_GetParent(GUICtrlGetHandle($_vCtrlID))
            $iStyle = _WinAPI_GetWindowLong($hParent, $GWL_STYLE)
            $ctrl_pos = ControlGetPos($hParent, "", $_vCtrlID)
            If __GuiHasCaptionbar($hParent) Then
                $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0]+$iFrame, $ctrl_pos[1]+$iHtit+$iFrame, $ctrl_pos[0] + $ctrl_pos[2]+$iFrame, $ctrl_pos[1] + $ctrl_pos[3]+$iHtit+$iFrame)
            Else
                $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
            EndIf
            _WinAPI_CombineRgn($_full_rgn, $_full_rgn, $ctrl_rgn, $RGN_OR)
            _WinAPI_DeleteObject($ctrl_rgn)
        EndIf
    EndFunc  ;==>_AddCtrlRegion
    
    
    Func __GuiHasCaptionbar($_hGui)
        Local $iStyle = _WinAPI_GetWindowLong($_hGui, $GWL_STYLE)
        Select
            Case BitAND($iStyle, $WS_CAPTION) = $WS_CAPTION
                Return True
            Case BitAND($iStyle, $WS_MAXIMIZEBOX) = $WS_MAXIMIZEBOX
                Return True
            Case BitAND($iStyle, $WS_MINIMIZEBOX) = $WS_MINIMIZEBOX
                Return True
            Case BitAND($iStyle, $WS_POPUPWINDOW) = $WS_POPUPWINDOW
                Return False
            Case BitAND($iStyle, $WS_BORDER) = $WS_BORDER
                Return False
            Case BitAND($iStyle, $WS_POPUP) = $WS_POPUP
                Return False
        EndSelect
    EndFunc  ;==>__GuiHasCaptionbar
    Alles anzeigen
    AutoIt: GuiBGInvisible_Example.au3
    ;-- TIME_STAMP   2022-07-26 15:17:29
    
    #include "GuiBGInvisible.au3"
    
    
    #cs
        Gui unsichtbar, nur übergebene Control anzeigen.
        Ggf. Control durch Exclude-Funktion ignorieren (nicht anzeigen).
    #ce
    
    
    _Example1()
    
    _Example2()
    
    _Example3()
    
    
    Func _Example1()
        Local $aCtrl[5]
        Local $GUI = GUICreate('Test', 400, 300)
        For $i = 0 To 4
            $aCtrl[$i] = GUICtrlCreateButton('Button ' & $i+1, 10, 10+$i*30, 100, 20)
        Next
    
        _GuiBGInvisible($GUI, $aCtrl)
    
        GUISetState()
        While True
            Switch GUIGetMsg()
                Case $aCtrl[0]  ; nur noch Button2 sichtbar
                    _GuiBGInvisible($GUI, $aCtrl[1])
                Case $aCtrl[1]  ; alle Button wieder sichtbar
                    _GuiBGInvisible($GUI, $aCtrl)
                Case $aCtrl[2], $aCtrl[3], $aCtrl[4]
                    Return GUIDelete($GUI)
            EndSwitch
        WEnd
    EndFunc
    
    
    Func _Example2()
        Local $aCtrl[5]
        Local $GUI = GUICreate('Test', 400, 300, -1, -1, $WS_POPUP)
        For $i = 0 To 4
            $aCtrl[$i] = GUICtrlCreateButton('Button ' & $i+1, 10, 10+$i*30, 100, 20)
        Next
    
        _GuiBGInvisible($GUI, $aCtrl)
    
        GUISetState()
        While True
            Switch GUIGetMsg()
                Case $aCtrl[0], $aCtrl[1], $aCtrl[2], $aCtrl[3], $aCtrl[4]
                    Return GUIDelete($GUI)
            EndSwitch
        WEnd
    EndFunc
    
    
    Func _Example3()
        Local $aCtrl[5]
        Local $GUI = GUICreate('Test', 400, 300, -1, -1, BitOR($WS_CAPTION,$WS_POPUPWINDOW))
        For $i = 0 To 4
            $aCtrl[$i] = GUICtrlCreateButton('Button ' & $i+1, 10, 10+$i*30, 100, 20)
        Next
    
        _GuiBGInvisible($GUI, $aCtrl, _Exclude)  ; "Button 2 & 4" nicht anzeigen
    
        GUISetState()
        While True
            Switch GUIGetMsg()
                Case $aCtrl[0], $aCtrl[1], $aCtrl[2], $aCtrl[3], $aCtrl[4]
                    Return GUIDelete($GUI)
            EndSwitch
        WEnd
    EndFunc
    
    Func _Exclude($ID)
        Return (StringRegExp(GUICtrlRead($ID), '2|4') <> 0)
    EndFunc  ;==>_Ignore
    Alles anzeigen

    Dateien

    GuiBGInvisible.au3 4,04 kB – 243 Downloads GuiBGInvisible_Example.au3 1,94 kB – 230 Downloads
  • Colortable

    • BugFix
    • 25. Juli 2022 um 17:36
    Zitat von oh-ha

    nur bei mir kommt ein Error, wenn ich die linke oder aber rechte Maustaste drücke.

    Das ist kein Fehler: Exit code: 1

    Das Ergebnis des Clicks ist in der Zwischenablage!

    Mit linker Maustaste wird der Farbwert (Hexwert) und mit rechter Maustaste die Zuweisung zur Farbvariable in die Zwischenablage kopiert und das Fenster geschlossen.

  • Colortable

    • BugFix
    • 25. Juli 2022 um 10:40

    Neue Version mit ausgeblendetem Fensterhintergrund in Post #1

  • [Erledigt] Kann man bei SciTE den Compiler austauschen, der mit Ctrl+F7 aufgerufen wird?

    • BugFix
    • 25. Juli 2022 um 08:36
    Zitat von Alina

    wenn ein zweiter Compiler bei SciTE über eine Tastenkombination zur Verfügung stehen könnte.

    Erst mal grundlegend:

    Die hinterlegten Aufrufe für Starten <F5>, Kompilieren <Ctrl+F7> und Erstellen <F7> findest du in der au3.properties.

    Jeweils als

    command.go...

    command.compile...

    command.build...

    Die Hotkeys für diese Befehle sind in allen Programmiersprachen, für die du SciTE nutzt, identisch und deshalb fix hinterlegt. Daher tauchen diese auch in der *.properties nicht auf.

    Die o. a. Aufrufe nutzen den AutoIt3Wrapper und sind somit für dich nur bedingt nützlich. Du musst schauen, welche Kommandozeilenparameter dein Compiler erwartet und dir entsprechend den Aufrufstring erstellen.

    Vorstellbar wäre z.B. "Pfad_Compiler.exe /in Pfad_zu_kompilierende_Au3"  (Für /out wird meist automatisch der Dateiname von /in als exe genutzt. Evtl. brauchst du auch keine Schlüsselwörter und nur die Reihenfolge der Parameter ist maßgebend.)

    In deiner SciTEUser.properties musst du nun dafür einen eigenen Befehlsblock mit Hotkey definieren:

    .properties
    command.name.49.$(au3)=Extra Compiler
    command.49.$(au3)="PFAD_COMPILER" /in "$(FilePath)"
    command.mode.49.$(au3)=savebefore:yes,subsystem:windows
    command.shortcut.49.$(au3)=FREIER_HOTKEY

    Falls der Compiler ohne Fenster startet, also ein reines Kommandozeilentool ist, verwende in der Zeile "command.mode" subsystem:console.

    Die hier verwendete Befehlsnummer (49) musst du ggf. anpassen und eine bei dir freie Nummer nutzen.

    Aber nochmal der Hinweis: Wenn der Compiler nicht von Jos freigegeben ist, halte ich dessen Nutzung für illegal.

  • [Erledigt] Kann man bei SciTE den Compiler austauschen, der mit Ctrl+F7 aufgerufen wird?

    • BugFix
    • 24. Juli 2022 um 00:11
    Zitat von Alina

    Ja, ich möchte einen anderen Compiler langfristiger ausprobieren.

    Es geht rein darum weiter au3-Dateien her zu stellen

    :?:

    Ein anderer AutoIt Compiler?

    Wo stammt der denn her?

    Und nicht ganz unwichtig: Ist er autorisiert? - Kann ich mir nicht vorstellen.

  • [Erledigt] Kann man bei SciTE den Compiler austauschen, der mit Ctrl+F7 aufgerufen wird?

    • BugFix
    • 23. Juli 2022 um 08:34
    Zitat von Alina

    Kann man bei SciTE den Compiler austauschen, der mit Ctrl+F7 aufgerufen wird? Was noch besser wäre, wenn ein zweiter Compiler bei SciTE über eine Tastenkombination zur Verfügung stehen könnte.

    Hast du einen anderen AutoIt Compiler? ;)

    Oder möchtest du für eine andere Sprache SciTE als Editor nutzen und auch Kompilieren?

    Ja, das ist durchaus möglich und für die reine Compileranweisung auch unkompliziert. Wenn du zusätzlich Features wie Syntax Highlighting, Abbrev etc. möchtest ist es deutlich mehr Aufwand.

  • Colortable

    • BugFix
    • 23. Juli 2022 um 08:24
    Zitat von Alina

    Dient es dazu zu sehen welche Farben man hat?

    Nein, beim Schreiben des Skriptes soll es dir vereinfachen Farben für die Fläche / Controls zu wählen.

    Bei Mehrfachnutzung der Farbe sinnvoll als Variablenzuweisung mit Farbnamen, oder den Farbwert direkt in eine Funktion einsetzen.

  • Colortable

    • BugFix
    • 22. Juli 2022 um 19:48
    Zitat von Oscar

    Gefällt mir, aber warum der Hook?

    Ursprünglich wollte ich eine Tastenkombination mit Maus nutzen, dafür hatte ich den Hook. Habe es dann doch auf R-/L-Klick begrenzt und nur den Rest gelöscht.

    Aber klar, so reichen die GUI_EVENT_.

  • Colortable

    • BugFix
    • 22. Juli 2022 um 18:32

    Bevor ihr mich steinigt - natürlich weiß ich, dass es Farbtabellen, Farbmixer, Wizards etc. en masse gibt, hab ja selbst einige erstellt. ^^

    Warum habe ich nun trotzdem was Neues gemacht? Ich werde älter, die Augen schwächer und da wollte ich die Farben auf großen Flächen sehen und auch gern eine gängige Auswahl auf einen Blick.
    Ich habe die Farben etwas gruppiert.

    Das dient dazu, beim Gestalten von Programmen schnell die passenden Farben für Gui und/oder Controls zu finden.

    Mit Mausklick links wird der Hexwert (z.B. 0xE0FFFF) und mit Mausklick rechts die Zuweisung (z.B. $LightCyan = 0xE0FFFF) in die Zwischenablage kopiert. Anschließend wird das Fenster geschlossen.

    EDIT 2022-07-25:

    - Umgestellt auf Msg-Events für Maus-Up

    - Fensterhintergrund ausgeblendet (kann deaktiviert werden durch Auskommentieren der Zeile #204)

    AutoIt: ColorTable.au3
    ;-- TIME_STAMP   2022-07-25 10:13:35   v 0.1
    
    
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPIHObj.au3>
    #include <WindowsConstants.au3>
    
    
    Global $aColors[][2] = [ _
    ["Maroon",0x800000],       _
    ["DarkRed",0x8B0000],      _
    ["Brown",0xA52A2A],        _
    ["FireBrick",0xB22222],    _
    ["Crimson",0xDC143C],      _
    ["IndianRed",0xCD5C5C],    _
    ["Red",0xFF0000],          _
    ["OrangeRed",0xFF4500],    _
    ["Tomato",0xFF6347],       _
    ["Coral",0xFF7F50],        _
    ["LightCoral",0xF08080],   _
    ["Salmon",0xFA8072],       _
    ["DarkSalmon",0xE9967A],   _
    ["LightSalmon",0xFFA07A],  _
    ["DarkOrange",0xFF8C00],   _
    ["Orange",0xFFA500],       _
    ["DarkGoldenrod",0xB8860B], _
    ["Goldenrod",0xDAA520],    _
    ["Gold",0xFFD700],         _
    ["Yellow",0xFFFF00],       _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ["SaddleBrown",0x8B4513],  _ ; new block
    ["Sienna",0xA0522D],       _
    ["Chocolate",0xD2691E],    _
    ["Peru",0xCD853F],         _
    ["SandyBrown",0xF4A460],   _
    ["RosyBrown",0xBC8F8F],    _
    ["Tan",0xD2B48C],          _
    ["BurlyWood",0xDEB887],    _
    ["Wheat",0xF5DEB3],        _
    ["Moccasin",0xFFE4B5],     _
    ["PeachPuff",0xFFDAB9],    _
    ["NavajoWhite",0xFFDEAD],  _
    ["Bisque",0xFFE4C4],       _
    ["BlanchedAlmond",0xFFEBCD], _
    ["PapayaWhip",0xFFEFD5],   _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ["DarkGreen",0x006400],    _ ; new block
    ["Green",0x008000],        _
    ["ForestGreen",0x228B22],  _
    ["SeaGreen",0x2E8B57],     _
    ["MediumSeaGreen",0x3CB371], _
    ["MediumAquamarine",0x66CDAA], _
    ["LimeGreen",0x32CD32],    _
    ["Lime",0x00FF00],         _
    ["Chartreuse",0x7FFF00],   _
    ["LawnGreen",0x7CFC00],    _
    ["GreenYellow",0xADFF2F],  _
    ["MediumSpringGreen",0x00FA9A], _
    ["SpringGreen",0x00FF7F],  _
    ["LightGreen",0x90EE90],      _
    ["PaleGreen",0x98FB98],       _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ["Olive",0x808000],        _
    ["DarkOliveGreen",0x556B2F],  _ ; new block
    ["OliveDrab",0x6B8E23],       _
    ["YellowGreen",0x9ACD32],  _
    ["DarkSeaGreen",0x8FBC8F],    _
    ["Teal",0x008080],            _
    ["DarkCyan",0x008B8B],        _
    ["LightSeaGreen",0x20B2AA],   _
    ["DarkTurquoise",0x00CED1],   _
    ["MediumTurquoise",0x48D1CC], _
    ["Turquoise",0x40E0D0],       _
    ["Aquamarine",0x7FFFD4],      _
    ["Aqua",0x00FFFF],            _
    ["Cyan",0x00FFFF],            _
    ["PaleTurquoise",0xAFEEEE], _
    ["LightCyan",0xE0FFFF], _
    ["Azure",0xF0FFFF], _
    ["AliceBlue",0xF0F8FF], _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ["DarkKhaki",0xBDB76B], _ ; new block
    ["Khaki",0xF0E68C], _
    ["PaleGoldenrod",0xEEE8AA], _
    ["LemonChiffon",0xFFFACD], _
    ["LightGoldenrodYellow",0xFAFAD2], _
    ["Cornsilk",0xFFF8DC], _
    ["LightYellow",0xFFFFE0], _
    ["Beige",0xF5F5DC], _
    ["Ivory",0xFFFFF0], _
    ["Honeydew",0xF0FFF0], _
    ["MintCream",0xF5FFFA], _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ["MidnightBlue",0x191970],    _ ; new block
    ["Navy",0x000080],            _
    ["DarkBlue",0x00008B],        _
    ["MediumBlue",0x0000CD],      _
    ["Blue",0x0000FF],            _
    ["RoyalBlue",0x4169E1],       _
    ["DodgerBlue",0x1E90FF],      _
    ["DeepSkyBlue",0x00BFFF],     _
    ["CornflowerBlue",0x6495ED],  _
    ["SkyBlue",0x87CEEB],         _
    ["LightSkyBlue",0x87CEFA],    _
    ["LightSteelBlue",0xB0C4DE],  _
    ["DarkSlateBlue",0x483D8B],   _
    ["SlateBlue",0x6A5ACD],       _
    ["MediumSlateBlue",0x7B68EE], _
    ["SteelBlue",0x4682B4],       _
    ["CadetBlue",0x5F9EA0],       _
    ["PowderBlue",0xB0E0E6],      _
    ["LightBlue",0xADD8E6],       _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ['',0xF0F0F0],  _
    ["Indigo",0x4B0082],          _ ; new block
    ["BlueViolet",0x8A2BE2], _
    ["MediumPurple",0x9370DB], _
    ["DarkViolet",0x9400D3], _
    ["DarkOrchid",0x9932CC], _
    ["MediumOrchid",0xBA55D3], _
    ["Orchid",0xDA70D6], _
    ["Purple",0x800080], _
    ["DarkMagenta",0x8B008B], _
    ["MediumVioletRed",0xC71585], _
    ["PaleVioletRed",0xDB7093], _
    ["DeepPink",0xFF1493], _
    ["HotPink",0xFF69B4], _
    ["Fuchsia",0xFF00FF], _
    ["Magenta",0xFF00FF], _
    ["Violet",0xEE82EE], _
    ["Plum",0xDDA0DD], _
    ["Thistle",0xD8BFD8], _
    ["Lavender",0xE6E6FA], _
    ["Pink",0xFFC0CB], _
    ["LightPink",0xFFB6C1], _
    ["MistyRose",0xFFE4E1],    _
    ["LavenderBlush",0xFFF0F5], _
    ["Black",0x000000], _ ; new block
    ["DarkSlateGray",0x2F4F4F], _
    ["SlateGray",0x708090], _
    ["LightSlateGray",0x778899], _
    ["DimGray",0x696969], _
    ["Gray",0x808080], _
    ["DarkGray",0xA9A9A9], _
    ["Silver",0xC0C0C0], _
    ["LightGray",0xD3D3D3], _
    ["Gainsboro",0xDCDCDC], _
    ["AntiqueWhite",0xFAEBD7], _
    ["Linen",0xFAF0E6],        _
    ["OldLace",0xFDF5E6],      _
    ["FloralWhite",0xFFFAF0],  _
    ["Snow",0xFFFAFA], _
    ["GhostWhite",0xF8F8FF], _
    ["WhiteSmoke",0xF5F5F5], _
    ["White",0xFFFFFF] _
    ]
    
    Global $aLabel[UBound($aColors)], $w = 185, $x = -$w, $y = -30
    
    Global $hGui = GUICreate('', 1489, 715, @DesktopWidth-1489, 0, 0x80000000)
    GUISetFont(12, 400, Default, 'Consolas')
    For $i = 0 To UBound($aColors) -1
        $x = Mod($i, 23) = 0 ? ($x+$w+1) : $x
        $y = Mod($i, 23) = 0 ? 1 : ($y+30+1)
        $aLabel[$i] = GUICtrlCreateLabel($aColors[$i][0], $x, $y, $w, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
        _GuiCtrl_SetColorContrast(-1, $aColors[$i][1])
    Next
    
    _GuiHole($hGui)     ; Auskommentieren für sichtbaren Fensterhintergrund
    
    GUISetState()
    
    Global $gMsg, $IDclick, $aColorClick, $sClip
    
    
    While True
        $gMsg = GUIGetMsg()
        Switch $gMsg
            Case -3
                Exit
            Case $GUI_EVENT_PRIMARYUP, $GUI_EVENT_SECONDARYUP
                $IDclick = GUIGetCursorInfo($hGui)[4]
                $aColorClick = _GetColor($IDclick)
                If $aColorClick[0] <> '' Then
                    $sClip = '$' & $aColorClick[0] & ' = 0x' & Hex($aColorClick[1],6)
                    If $gMsg = $GUI_EVENT_PRIMARYUP Then $sClip = '0x' & Hex($aColorClick[1],6)
                    Exit ClipPut($sClip)
                EndIf
        EndSwitch
    WEnd
    
    
    Func _GetColor($_ID)
        Local $index = $_ID - $aLabel[0]
        Local $aRet[] = [$aColors[$index][0],$aColors[$index][1]]
        Return $aRet
    EndFunc
    
    
    ; #FUNCTION# =======================================================================================
    ; Name ..........: _GuiCtrl_SetColorContrast
    ; Description ...: Sets the background color for a control and depending on its brightness the
    ; ...............: appropriate contrast color for the text.
    ; Parameter(s)...: $_ID           The control ID
    ; ...............: $_BkCol        The background color
    ; ....[optional].: $_ColOnDark    The text color if BG is dark (Default: -1, almost white)
    ; ....[optional].: $_colOnBright  The text color if BG is bright (Default: -1, very deep blue)
    ; Return values .: Success  1
    ; ...............: Failure  0
    ; Author ........: BugFix
    ; ==================================================================================================
    Func _GuiCtrl_SetColorContrast($_ID, $_BkCol, $_ColOnDark=-1, $_colOnBright=-1)
        $_ColOnDark = $_ColOnDark = -1 ? 0xFAFAFA : $_ColOnDark
        $_colOnBright = $_colOnBright = -1 ? 0x000088 : $_colOnBright
        GUICtrlSetBkColor($_ID, $_BkCol)
        ; get contrast
        Local $R = BitAND(BitShift($_BkCol, 16), 0xFF)
        Local $G = BitAND(BitShift($_BkCol, 8), 0xFF)
        Local $B = BitAND($_BkCol, 0xFF)
        Local $Brightness = Sqrt($R^2*0.299 + $G^2*0.587 + $B^2*0.114)
    ;~     Local $iCol = $Brightness < 128 ? $_ColOnDark : $_colOnBright
        Local $iCol = $Brightness < 140 ? $_ColOnDark : $_colOnBright
        Return GUICtrlSetColor($_ID, $iCol)
    EndFunc
    
    
    Func _GuiHole($h_win)
        Local $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
        _AddCtrlRegion($combined_rgn, $aLabel)
        _WinAPI_SetWindowRgn($h_win, $combined_rgn)
        _WinAPI_DeleteObject($combined_rgn)
    EndFunc   ;==>_GuiHole
    
    
    Func _AddCtrlRegion($full_rgn, $ctrl_id)
        Local $ctrl_pos, $ctrl_rgn
        If IsArray($ctrl_id) Then
            For $i = 0 To UBound($ctrl_id) -1
                If GUICtrlRead($ctrl_id[$i]) = '' Then ContinueLoop
                $ctrl_pos = ControlGetPos($hGui, "", $ctrl_id[$i])
                $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
                _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
                _WinAPI_DeleteObject($ctrl_rgn)
            Next
        Else
            $ctrl_pos = ControlGetPos($hGui, "", $ctrl_id)
            $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
            _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
            _WinAPI_DeleteObject($ctrl_rgn)
        EndIf
    EndFunc   ;==>_AddCtrlRegion
    Alles anzeigen

    color_table.PNG color_table_hole.PNG

    DL bisher: 15

    Dateien

    ColorTable.au3 8,83 kB – 362 Downloads
  • Farbänderung von Label bei AdlibRegistering

    • BugFix
    • 21. Juli 2022 um 18:20

    Zu einem ähnlichem Problem von dir (aber Aufgabenstellung: checke und zeige Änderung) hatte ich bereits hier ein Bsp. gepostet. Kannst du doch anpassen.

    Übrigens:

    NIE Globale Variablen in einer Funktion deklarieren und schon gar nicht immer wieder dieselbe Variable neu deklarieren: 1-mal am Skriptstart deklarieren, danach nur noch Wertzuweisung.

  • LimeSurvey Remote API json

    • BugFix
    • 21. Juli 2022 um 11:38
    Zitat von gmmg

    bzw. diese Datensätze in 2 Variablen.

    Beide in je ein Array splitten - die Arrays haben dann dieselbe Größe.

    - In einer Schleife über Array_mit_Zusatz iterieren

    - je Item:

    - Inhalt bis "firstname" abschneiden

    - Item von Array_ohne_Zusatz (hat identischen Index an dieser Position) vor "firstitem" einfügen: $a_m_Zusatz[$i] = $a_o_Zusatz[$i] & "$a_m_Zusatz[$i] ab <firstname>" - das zusätzliche Semikolon dazwischen beachten

  • GUICtrlCreateIcon mit png-Datei

    • BugFix
    • 21. Juli 2022 um 11:15
    Zitat von DOheim

    musste das aber wieder verwerfen, weil dort der Befehl FileRead so verändert wurde, dass man beispielsweise eine Bitmap-Datei nicht mehr einlesen konnte - so wie sie ist. Sie wird in Hex-Zeichen umgewandelt.

    Wie sieht denn deiner Meinung nach eine (Bitmap)-Datei aus, so wie sie ist :?:

    Meinst du den Schwachsinn, den ein (zum Lesen von Text-Dateien gedachter) Editor ausspuckt, weil dieser krampfhaft versucht eine binäre Datei als Text zu interpretieren?

    Kannst du doch haben:

    AutoIt: Hier dieselbe Anzeige, wie NPP (aber nicht druckbare Zeichen als Symbole)
    Local $p = "C:\Users\BugFix\Pictures\flowers24x24.png"
    Local $fh = FileOpen($p, 16) ; $FO_BINARY (16)
    Local $read = BinaryToString(FileRead($fh))
    FileClose($fh)
    
    ; Datei enthält mit Sicherheit Chr(0)-Werte, die würden als Stringende interpretiert werden - also umwandeln
    $read = StringReplace($read, Chr(0), '[NULL]')
    
    ; Vielleicht möchtest du CR und LF auch als Zeilenumbrüche anzeigen (Edit verlangt normal CRLF):
    ; dazu alle bereits vorhandenen CR, LF, CRLF in ein Ersatzzeichen umwandeln und dann dieses mit CRLF ersetzen
    Local $tmp = '%%µµ%%'
    $read = StringReplace(StringReplace(StringReplace($read, @CRLF, $tmp), @LF, $tmp), @CR, $tmp)
    $read = StringReplace($read, $tmp, @CRLF)
    
    GUICreate('Anzeigen BinaryToString', @DesktopWidth-90, @DesktopHeight-60)
    GUISetFont(14, 400, Default, 'Courier New')
    GUICtrlCreateButton('', -10, -10, 1, 1)    ; catch focus
    GUICtrlCreateEdit($read, 10, 10, @DesktopWidth-100, @DesktopHeight-70, BitOR(0x0800,0x0040,0x0080,0x0004,0x00100000,0x00200000))
    GUICtrlSetColor(-1, 0x00D02B)
    GUICtrlSetBkColor(-1, 0x001D45)
    GUISetState()
    
    Do
    Until GUIGetMsg() = -3
    Alles anzeigen

    Wenn du bestimmte Aufgaben mit FileRead vorhast, ist primär wichtig, die Datei im entsprechenden Modus zu öffnen! Dazu sollte man einfach mal einen Blick auf die Parameterbeschreibungen der Funktion werfen.

    Deine obige Aussage zu FileRead ist definitiv falsch.

  • LimeSurvey Remote API json

    • BugFix
    • 21. Juli 2022 um 10:52
    Zitat von gmmg

    Das heißt ich Exportiere beide Dateien (einmal mit, einmal ohne Zusatzfelder) und hole mir entwerder aus der Datei ohne Zusatzfelder die 3 Ergbebnisse zu jeweiliger Zeile oder versuche die irgendwie anders zusammenzufügen.

    ohne Zusatzfeld

    "9";"2022-06-23 16:18:07";"1";"de";"1139653681";"XiL38ODU1PR1gGa";"2022-06-23 16:17:50";"2022-06-23 16:18:07";"";"5";"5";"5"

    mit Zusatzfeld

    "9";"2022-06-23 16:18:07";"1";"de";"1139653681";"XiL38ODU1PR1gGa";"2022-06-23 16:17:50";"2022-06-23 16:18:07";"";"";"";"" .........

    sind ja identisch bis (bei mit Zusatzfeld) zum Semikolon vor 'firstname', nur dass die Inhalte leer sind

    Ich würde so vorgehen:

    - bis zu diesem Semikolon ( #12, Position = StringInStr, occurence=12) in "mit Zusatzfeld" löschen

    - gesamten String "ohne Zusatzfeld" an dieser Position einfügen

  • mehrere Zeiten wenn abgelaufen für OBS

    • BugFix
    • 19. Juli 2022 um 08:28
    Zitat von WhiteHorse

    es ist ja möglich das ich zb ESC drücke und er macht die GUI zu und schließt alles.

    Das kannst du aber deaktivieren: AutoitSetOption('GUICloseOnESC', 0) ; 0 = ESC sendet kein Event zum Beenden der GUI

    Zitat von WhiteHorse

    Ist das denn auch machbar das ich ESC gedrückt halten muss sagen wir mal 3 sec um alles zu schließen

    Würde ich nicht empfehlen. Die einfachere Lösung ist die Nutzung eines an die GUI gebundenen Hotkeys (Accelerator-Key)

    AutoIt
    AutoitSetOption('GUICloseOnESC', 0)
    
    Global $hGui = GUICreate('Test')
    Global $DummyEscExit = GUICtrlCreateDummy()
    
    Global $aAccelerators[][] = [['+{ESC}', $DummyEscExit]] ; "SHIFT+ESCAPE" zum Beenden
    GUISetAccelerators($aAccelerators)
    
    GUISetState()
    
    While True
        Switch GUIGetMsg()
            Case -3, $DummyEscExit
                Exit
        EndSwitch
    WEnd
    Alles anzeigen
  • Zahlen suche im bestimmten bereich

    • BugFix
    • 18. Juli 2022 um 11:51
    Zitat von Jayjo

    die Spalten sind in einen SRP System

    Und wie kommst du zu den Werten? Copy & Paste, Export in Datei?

    Zitat von Jayjo

    ich möchte halt nicht jede Zahl in den code eingeben

    Darum brauchst du die Daten in einem Array, das du dann durchläufst.

    Übrigens solltest du dir nicht jede Info aus der Nase ziehen lassen. Wir helfen gerne, aber dazu brauchen wir natürlich alle relevanten Informationen.

    Deine nächsten Schritte:

    - aus meinem Code eine Funktion erstellen

    - deine SRP-Daten in ein Array überführen

    - Array durchlaufen

    Bei Fragen melden, aber bitte mit nachvollziehbaren Daten, also z.B. dein Skript und ein Satz Testdaten.

  • Zahlen suche im bestimmten bereich

    • BugFix
    • 18. Juli 2022 um 11:36
    Zitat von Jayjo

    Also ich habe 3 Spalten

    - in einem Array ? oder

    - in einer Textdatei / csv-Datei oder

    - bereits in ein Listview eingefügt ?

    Zitat von Jayjo

    das die Zahlen entweder in diesen Bereich liegen oder außerhalb

    Es muss jede Zahl nacheinander geprüft werden, ob sie die Bedingung (z.B. >=1 UND <= 299) erfüllt.

    Also meinen Code von oben in eine Funktion packen und nacheinander jede Zahl aus deinen Spalten an diese Funktion übergeben.

    Wenn du die Daten in einer Datei vorliegen hast, solltest du diese in ein Array einlesen und darin durch die Spalten iterieren.

  • Zahlen suche im bestimmten bereich

    • BugFix
    • 18. Juli 2022 um 11:10
    Zitat von Jayjo

    $iSearch = 1-299 eingeben also er soll halt die Zahlen scannen die im Min und Max. wert

    Du musst dich etwas genauer ausdrücken.

    - was hast du als Ausgangswert(e)

    - was soll das Ergebnis sein

    Was soll denn mit den Zahlen zwischen 1-299 passieren? Oder womit willst du diese Vergleichen? Momentan verstehe ich noch nicht, was du möchtest.

  • Zahlen suche im bestimmten bereich

    • BugFix
    • 18. Juli 2022 um 10:36

    Die einfachste Lösung:

    AutoIt
    Global $iMin = 1
    Global $iMax = 299
    
    Global $iSearch = 13
    
    If ($iSearch >= $iMin) And ($iSearch <= $iMax) Then
        ConsoleWrite('Zahl ist im Bereich' & @CRLF)
    Else
        ConsoleWrite('Zahl liegt ausserhalb des Bereichs' & @CRLF)
    EndIf

    Wenn du die Prüfung mehrfach ausführen möchtest, solltest du dieses innerhalb einer Funktion lösen, der du übergibst: Prüfwert, Minwert, Maxwert und die dir True oder False zurückgibt.

  • Automatische DriveSpace Kontrolle

    • BugFix
    • 18. Juli 2022 um 09:55
    Zitat von casi4712

    okay, dann hatte ich wohl gedacht er aktualisiert das automatisch wenn ich AdlibRegister nehme, war wohl ein Denkfehler,

    :?::?:

    Natürlich macht AdlibRegister das, das ist doch der Sinn des Registrierens einer Funktion für ein Zeitintervall.

    Ich habe das hier mal als Bsp. umgesetzt:

    AutoIt
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    
    OnAutoItExitRegister(_Exit)
    
    Global $Drive2Check = 'C:\'                 ; zu überprüfendes Laufwerk
    Global Enum $VeryGood, $Good, $Critical     ; Speicherstatus
    Global $aStatus[] = [0,60,85]               ; % für Status-Stufen (0-59, 60-84, ab 85)
    
    Global $hGui = GUICreate('Check Space [' & StringTrimRight($Drive2Check, 1) & ']', 270, 70, @DesktopWidth-280, 10)
    Global $cbOntop = GUICtrlCreateCheckbox(' GUI jetzt minimieren - Einblenden bei neuer Stufe', 10, 10, 250)
    Global $lbSpace = GUICtrlCreateLabel(' ', 10, 40, 250, 20, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    
    _Testspace()    ; erstmaliger Aufruf zur Anzeige beim Start
    GUISetState()
    
    AdlibRegister(_Testspace, 5000)
    
    While True
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $cbOntop
                GUISetState(@SW_MINIMIZE)
            Case $GUI_EVENT_RESTORE
                GUICtrlSetState($cbOntop, $GUI_UNCHECKED)
        EndSwitch
    WEnd
    
    Func _Exit()
        Exit
    EndFunc
    
    
    Func _Testspace()
        Local Const $aColor[][2] = [[0x00FF7F,0x000088],[0xFFFF00,0x000088],[0xFF0000,0xFAFAFA]] ; Status-Color [BG,Text]
        Local $totalMB = DriveSpaceTotal($Drive2Check)
        Local $freeMB = DriveSpaceFree($Drive2Check)
        Local $Percent = Floor(($freeMB / $totalMB) * 100)
        Local Static $lastValue = 0
        Local Static $lastStatus = -1
        Local $Status
        If $lastValue = $Percent Then Return    ; keine Veränderung zur letzten Prüfung
        $lastValue = $Percent
        GUICtrlSetData($lbSpace, $Percent & '% [' & _FormatByte($freeMB*1024*1024, '', False, 2) & ' frei]')
        If $lastStatus <> $Status Then          ; Farbe nur setzen bei geändertem Status
            Select
                Case $Percent < $aStatus[$Good]
                    $Status = $VeryGood
                Case $Percent < $aStatus[$Critical]
                    $Status = $Good
                Case Else
                    $Status = $Critical
            EndSelect
            GUICtrlSetColor($lbSpace, $aColor[$Status][1])
            GUICtrlSetBkColor($lbSpace, $aColor[$Status][0])
            If BitAND(GUICtrlRead($cbOntop), $GUI_CHECKED) Then
                GUISetState(@SW_SHOW)
                GUICtrlSetState($cbOntop, $GUI_UNCHECKED)
            EndIf
            $lastStatus = $Status
        EndIf
    EndFunc
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _FormatByte
    ; Description ...: Formats a given value of bytes with highest or given unit, optional as structure with all units
    ; Parameters ....: $_iByte    The value of bytes to format
    ; ...............: $_sUnit    (Default = '', unit of highest value) or count of given unit (TB, GB, MB, KB, Byte)
    ; ...............: $_fStruct  Returns a structure with .TB .GB .MB .KB .Byte (Default = False)
    ; ...............: $_sDigit   Number of decimal digits (Default = '3') as string!
    ; Return values .: The formatted string or the structure.
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _FormatByte($_iByte, $_sUnit='', $_fStruct=False, $_sDigit='3')
        Local Static $aByte[5][2] = [[0x10000000000],[0x40000000],[0x100000],[0x400],[0x1]]
        Local Static $tBytes = DllStructCreate('int TB;int GB;int MB;int KB;int Byte;')
        Local Static $aUnit[5] = ['TB','GB','MB','KB','Byte']
        Local $iModulo = $_iByte, $iHighest = 4
        For $i = 0 To 3
            $aByte[$i][1] = $iModulo >= $aByte[$i][0] ? Floor($iModulo/$aByte[$i][0]) : 0
            $iModulo = $aByte[$i][1] > 0 ? Mod($iModulo,$aByte[$i][0]) : $iModulo
            $iHighest = $aByte[$i][1] > 0 ? ($i < $iHighest ? $i : $iHighest) : $iHighest
        Next
        $aByte[4][1] = $iModulo
        If $_fStruct Then
            $tBytes.TB   = $aByte[0][1]
            $tBytes.GB   = $aByte[1][1]
            $tBytes.MB   = $aByte[2][1]
            $tBytes.KB   = $aByte[3][1]
            $tBytes.Byte = $aByte[4][1]
            Return $tBytes
        EndIf
        $_sUnit = StringInStr('TB GB MB KB Byte', $_sUnit) ? $_sUnit : ''
        $_sUnit = $_sUnit = '' ? $aUnit[$iHighest] : $_sUnit
        Local $iUserUnit = Floor(StringInStr('TB GB MB KB Byte', $_sUnit)/3)
        If Number($_sDigit) < 0 Then $_sDigit = '0'
        Local $sFormat = '%.' & $_sDigit & 'f %s'
        Return StringFormat($sFormat, $_iByte/$aByte[$iUserUnit][0], $aUnit[$iUserUnit])
    EndFunc  ;==>_FormatByte
    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™