1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • Splash Font automatisch anpassbar

    • Oscar
    • 2. August 2022 um 15:51

    Wenn die Größe des Fensters an den Text angepasst werden soll, sollte man auch die Größe berechnen:

    AutoIt
    #include <GDIPlus.au3>
    #include <WinAPIGdiDC.au3>
    #include <WinAPISysInternals.au3>
    
    Global $sFile = "C:\Users\Administrator\Downloads\Aufgaben\Datei"
    Global $sFontname = 'Arial', $sFontSize = 16
    Global $sText = StringFormat('"%s" wurde geschrieben.', $sFile)
    Global $tRect = _CalcTextSize($sText, $sFontname, $sFontSize)
    
    SplashTextOn('Bitte warten', $sText, Ceiling($tRect.Width), Ceiling($tRect.Height) + 24, -1, -1, 20, $sFontname, $sFontSize)
    sleep(5000)
    
    Func _CalcTextSize(ByRef $sText, ByRef $sFontname, $iFontSize)
        Local $hDC, $hGraphic, $hFormat, $hFamily, $tLayout, $hFont, $aInfo
        _GDIPlus_Startup()
        $hDC = _WinAPI_GetWindowDC(0)
        $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)
        $hFormat = _GDIPlus_StringFormatCreate(0x1000) ; 0x1000 = wrapping to the next line is disabled
        $hFamily = _GDIPlus_FontFamilyCreate($sFontname)
        $tLayout = _GDIPlus_RectFCreate(0, 0, @DesktopWidth, @DesktopHeight)
        $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize)
        $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_StringFormatDispose($hFormat)
        _GDIPlus_GraphicsDispose($hGraphic)
        _WinAPI_ReleaseDC(0, $hDC)
        _GDIPlus_Shutdown()
        Return $aInfo[0]
    EndFunc
    Alles anzeigen
  • Barcode-Scanner (Tastatur-Emulation) und Tastatur gleichzeitig benutzen

    • Oscar
    • 31. Juli 2022 um 17:15

    Damit man das Script leichter findet, mache ich mal ein extra Thema dafür auf.

    Problem:

    Wenn man einen Barcode-Scanner besitzt, der eine Tastaureingabe emuliert und man zusätzlich aber auch ein oder mehrere Eingabefelder für andere Daten haben will, so ist es schwierig die Eingabe von Barcode-Scanner nur in dem dafür vorgesehenen Eingabefeld einzutragen. Normalerweise wird der Barcode einfach als Tastatureingabe gesendet und landet somit in dem Eingabefeld, das gerade den Eingabefokus besitzt.

    Lösung:

    Es gibt eine Möglichkeit, die Eingabe vom Barcode-Scanner zu erkennen. Dafür muss man das InputDevice registrieren (der DeviceName dient dabei der Unterscheidung).

    Mein Script habe ich ausführlich kommentiert, sodass hoffentlich verständlich wird, wie man sein eigenes Script anpassen muss, um diese Lösung verwenden zu können.

    AutoIt
    #include <APISysConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    
    ; In der Variablen "$g_sDevName" sollte der DeviceName von eurem Barcode-Scanner drinstehen.
    ; Wenn nach Scriptstart der Barcode-Scanner benutzt wird, steht der DeviceName im unteren Feld.
    ; Mit dem Button [Copy] kann man den DeviceName benutzen und in die Zwischenablage kopieren, um ihn dann hier einzufuegen.
    Global $g_sDevName = '' ; z.B. '\\?\HID#VID_13BA&PID_0018#6&238b7016&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}'
    
    ; Hier den Postfix-Code von eurem Scanner eintragen. Bei meinem Scanner ist das @CR = 0x0D (Hex).
    Global $g_iPostfix = 0x0D
    
    #Region *** Ein Fenster fuer den Scanner-Test erstellen ***
    Global $g_hGui = GUICreate('Barcode-Scanner Test', 640, 130)
    GUISetBkColor(0xBBBBBB)
    
    GUICtrlCreateGroup('Barcode', 5, 5, 290, 50)
    Global $g_idLabel = GUICtrlCreateLabel('', 15, 20, 270, 26, $SS_CENTER) ; fuer die Ausgabe vom Barcode-Scanner
    GUICtrlSetFont(-1, 18, 400, 0, 'Arial')
    GUICtrlSetBkColor(-1, 0xAAFFEE)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    
    GUICtrlCreateGroup('Tastatur', 345, 5, 290, 50)
    Global $g_idInput = GUICtrlCreateInput('', 355, 20, 270, 26) ; ein Input, fuer eine Eingabe von der Tastatur
    GUICtrlSetFont(-1, 14, 400, 0, 'Arial')
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    
    GUICtrlCreateGroup('DeviceName', 5, 80, 630, 42)
    Global $g_idDevName = GUICtrlCreateLabel('', 15, 95, 560, 18, $SS_CENTER)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    Global $g_idCopy2Clip = GUICtrlCreateButton('Copy', 580, 90, 50, 28)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
    GUICtrlSetTip(-1, 'Benutze diesen DeviceName und' & @CRLF & 'kopiere ihn in die Zwischenablage.')
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    #EndRegion *** Ein Fenster fuer den Scanner-Test erstellen ***
    
    #Region *** das InputDevice registrieren ***
    Global $tRID = DllStructCreate($tagRAWINPUTDEVICE)
    $tRID.UsagePage = 0x01
    $tRID.Usage = 0x06
    $tRID.Flags = $RIDEV_INPUTSINK
    $tRID.hTarget = $g_hGui
    _WinAPI_RegisterRawInputDevices($tRID)
    GUIRegisterMsg($WM_INPUT, 'WM_INPUT')
    #EndRegion *** das InputDevice registrieren ***
    
    GUISetState(@SW_SHOW, $g_hGui)
    
    GUICtrlSetState($g_idInput, $GUI_FOCUS)
    
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $g_idCopy2Clip
                $g_sDevName = GUICtrlRead($g_idDevName)
                ClipPut($g_sDevName)
                GUICtrlSetData($g_idInput, '')
                GUICtrlSetState($g_idInput, $GUI_FOCUS)
                GUICtrlSetBkColor($g_idDevName, 0xCCFFCC)
                Sleep(500)
                GUICtrlSetBkColor($g_idDevName, 0xEEEEEE)
        EndSwitch
    WEnd
    
    Func WM_INPUT($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local Static $sBuffer = ''
        Local $tRIM, $tDevInfo
        $tRIM = DllStructCreate($tagRAWINPUTHEADER)
        If Not _WinAPI_GetRawInputData($lParam, $tRIM, DllStructGetSize($tRIM), $RID_HEADER) Then Return
        $tDevInfo = DllStructCreate('wchar name[256]')
        If Not _WinAPI_GetRawInputDeviceInfo($tRIM.hDevice, $tDevInfo, 256, $RIDI_DEVICENAME) Then Return
        GUICtrlSetData($g_idDevName, $tDevInfo.name)
        If $tDevInfo.name = $g_sDevName Then ; hier wird getestet, ob die Eingabe vom Barcode-Scanner kommt
            If $tRIM.Type = $RIM_TYPEKEYBOARD Then ; sicherstellen, dass eine Tastatur-Emulation erfolgt
                $tRIM = DllStructCreate($tagRAWINPUTKEYBOARD)
                If _WinAPI_GetRawInputData($lParam, $tRIM, DllStructGetSize($tRIM), $RID_INPUT) Then
                    Switch $tRIM.Message
                        Case $WM_KEYDOWN
                            If $tRIM.VKey = $g_iPostfix Then ; wenn der Postfix gesendet wurde (evtl. oben anpassen)
                                ; steht hier der gesendete Barcode in der Variablen $sBuffer.
                                ; Hier kann man $sBuffer an eine globale Variable uebergeben und/oder
                                GUICtrlSetData($g_idLabel, $sBuffer) ; im Label anzeigen lassen.
                                $sBuffer = '' ; Buffer leeeren, fuer naechsten Code
                                ConsoleWrite('--- New Code ---' & @CRLF) ; nur zum debuggen
                            Else ; alle anderen Zeichen werden in $sBuffer uebernommen
                                $sBuffer &= Chr($tRIM.VKey)
                                ConsoleWrite('Char: ' & Chr($tRIM.VKey) & @CRLF) ; nur zum debuggen
                            EndIf
                    EndSwitch
                    _ClearKeyBuffer() ; die Eingabe vom Barcode-Scanner aus dem Msg-Queue loeschen
                EndIf
            EndIf
        EndIf
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_INPUT
    
    Func _ClearKeyBuffer()
        Local Const $tagMSG = 'hwnd hwnd;uint message;wparam wParam;lparam lParam;dword time;long X;long Y;dword lPrivate'
        Local Const $PM_REMOVE = 0x0001
        Local $tMsg = DllStructCreate($tagMSG), $ret
        Do
            $ret = DllCall('user32.dll', 'bool', 'PeekMessageW', _
                    'struct*', $tMsg, _
                    'hwnd', $g_hGui, _
                    'uint', $WM_KEYFIRST, _
                    'uint', $WM_KEYLAST, _
                    'uint', $PM_REMOVE)
        Until $tMsg.message = 0x0101 Or $tMsg.message = 0
    EndFunc   ;==>_ClearKeyBuffer
    Alles anzeigen

    Dateien

    !BarcodeScanner.au3 4,85 kB – 234 Downloads
  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • Oscar
    • 31. Juli 2022 um 08:25
    Zitat von Alina

    Aber ich brauche dqa nichts änderen, das läuft auch ohne das ich den DeviceName abändere.

    Jein!

    Wenn Du da nicht den richtigen Devicenamen einträgst, dann wird der Barcode im Input angezeigt (was ein Zeichen dafür ist, dass die Funktion den Code nicht bearbeitet hat, sieh mal in die Consolenausgabe).

    Der Barcode soll aber oben im Label angezeigt werden. Das Input-Control dient nur dazu, aufzuzeigen, dass gleichzeitig auch noch eine Eingabe von Tastatur möglich ist.

  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • Oscar
    • 29. Juli 2022 um 19:13

    So, noch etwas konstruktives!

    Ich konnte den Msg-Queue von der Scanner-Eingabe "befreien", somit braucht man kein Dummy-Input mehr:

    AutoIt
    #include <APISysConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    
    ; hier muss der DeviceName von eurem Scanner drinstehen
    ; beim auskommentieren von Zeile 41 wird der DeviceName beim scannen angezeigt.
    Global $g_sDevName = '\\?\HID#VID_13BA&PID_0018#6&238b7016&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}'
    
    Global $g_hGui = GUICreate('BarcodeScanner', 300, 120)
    Global $g_idLabel = GUICtrlCreateLabel('', 5, 5, 290, 30) ; fuer die Ausgabe vom Barcode-Scanner
    GUICtrlSetFont(-1, 16)
    Global $g_idInput = GUICtrlCreateInput('', 5, 40, 290, 30) ; zum testen ein Input, fuer eine Eingabe von der Tastatur
    GUICtrlSetFont(-1, 16)
    
    Local $tRID = DllStructCreate($tagRAWINPUTDEVICE)
    $tRID.UsagePage = 0x01
    $tRID.Usage = 0x06
    $tRID.Flags = $RIDEV_INPUTSINK
    $tRID.hTarget = $g_hGui
    _WinAPI_RegisterRawInputDevices($tRID)
    
    GUIRegisterMsg($WM_INPUT, 'WM_INPUT')
    GUISetState(@SW_SHOW)
    GUICtrlSetState($g_idInput, $GUI_FOCUS)
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    Exit
    
    Func WM_INPUT($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local Static $sBuffer = ''
        Local $devType, $devName, $tRIM, $tText
        $tRIM = DllStructCreate($tagRAWINPUTHEADER)
        If Not _WinAPI_GetRawInputData($lParam, $tRIM, DllStructGetSize($tRIM), $RID_HEADER) Then Return
        $devType = $tRIM.Type
        $tText = DllStructCreate('wchar data[256]')
        If Not _WinAPI_GetRawInputDeviceInfo($tRIM.hDevice, $tText, 256, $RIDI_DEVICENAME) Then Return
        $devName = $tText.data
    ;~     ConsoleWrite(StringFormat("DevName: '%s'\r\n", $devName))
        If $devName = $g_sDevName Then ; hier wird getestet, ob die Eingabe vom Barcode-Scanner kommt
            If $devType = $RIM_TYPEKEYBOARD Then ; sicherstellen, dass eine Tastatur-Emulation erfolgt
                $tRIM = DllStructCreate($tagRAWINPUTKEYBOARD)
                If _WinAPI_GetRawInputData($lParam, $tRIM, DllStructGetSize($tRIM), $RID_INPUT) Then
                    Switch $tRIM.Message
                        Case $WM_KEYDOWN
                            If $tRIM.VKey = 13 Then ; wenn VKey = 13 (@CR) wird bei meinem Barcode-Scanner als Postfix gesendet (evtl. anpassen)
                                GUICtrlSetData($g_idLabel, $sBuffer) ; Buffer im Label anzeigen
                                $sBuffer = '' ; Buffer leeeren, fuer naechsten Code
                                ConsoleWrite('--- New Code ---' & @CRLF) ; nur zum debuggen
                            Else ; alle anderen Zeichen werden in den Buffer uebernommen
                                $sBuffer &= Chr($tRIM.VKey)
                                ConsoleWrite('Char: ' & Chr($tRIM.VKey) & @CRLF) ; nur zum debuggen
                            EndIf
                    EndSwitch
                    _ClearKeyBuffer() ; die Eingabe vom Barcode-Scanner aus dem Msg-Queue loeschen
                EndIf
            EndIf
        EndIf
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_INPUT
    
    Func _ClearKeyBuffer()
        Local Const $tagMSG = 'hwnd hwnd;uint message;wparam wParam;lparam lParam;dword time;long X;long Y;dword lPrivate'
        Local Const $PM_REMOVE = 0x0001
        Local $tMsg = DllStructCreate($tagMSG), $ret
        Do
            $ret = DllCall('user32.dll', 'bool', 'PeekMessage', 'struct*', $tMsg, 'hwnd', $g_hGui, 'uint', $WM_KEYFIRST, 'uint', $WM_KEYLAST, 'uint', $PM_REMOVE)[0]
        Until $tMsg.message = 0x0101 Or $tMsg.message = 0
    EndFunc
    Alles anzeigen

    Dateien

    !BarcodeScanner.au3 3,11 kB – 148 Downloads
  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • Oscar
    • 29. Juli 2022 um 14:58
    Zitat von BugFix

    Ich habe keine Ahnung was und wie auf C64 programmiert wurde. Aber vllt. hat da jemand nen Plan und kann das umsetzen.

    Das ist Assembler-Code und beim C64 konnte man damit direkt auf den Speicher zugreifen.

    Aber ich glaube kaum, dass das hier weiter hilft. :rofl:

  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • Oscar
    • 29. Juli 2022 um 13:59
    Zitat von BugFix

    Probiere mal _WinAPI_SetKeyboardState und sende damit ein leeres 256-Byte Array.

    Nee, weder "-1" noch das leere Array verhindern das durchreichen der Zeichen.

  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • Oscar
    • 29. Juli 2022 um 05:12
    Zitat von gert_nrw_71

    da die Eingabe über eine Inputbox erfolgt ?

    Das ist falsch!

    Bei meinem Script ist das Input nur zur Verdeutlichung, dass zusätzlich auch noch eine Eingabe per Tastatur möglich ist.

    Der Barcode befindet sich komplett in der Variable $sBuffer, nachdem das Postfix gesendet wurde (siehe Kommentare im Script).

    Was Du dann damit machst, liegt nur bei Dir.

  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • Oscar
    • 28. Juli 2022 um 18:58
    Zitat von Velted

    hat schon mal jemand versucht, die Scannereingaben über _WinAPI_RegisterRawInputDevices() abzugreifen?

    Das ließ mir keine Ruhe!

    Die Idee ist gut, weil man damit auch ohne Präfix auskommt. Ich habe mal ein Script erstellt:

    AutoIt
    #include <APISysConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    
    ; hier muss der DeviceName von eurem Scanner drinstehen
    ; beim auskommentieren von Zeile 47 wird der DeviceName beim scannen angezeigt.
    Global $g_sDevName = '\\?\HID#VID_13BA&PID_0018#6&238b7016&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}'
    
    Global $g_hForm = GUICreate('BarcodeScanner', 300, 120)
    Global $g_idLabel = GUICtrlCreateLabel('', 5, 5, 290, 30) ; fuer die Ausgabe vom Barcode-Scanner
    GUICtrlSetFont(-1, 16)
    Global $g_idInput = GUICtrlCreateInput('', 5, 40, 290, 30) ; zum testen ein Input, fuer eine Eingabe von der Tastatur
    GUICtrlSetFont(-1, 16)
    Global $g_idDummy = GUICtrlCreateInput('', 0, 0, 0, 0) ; Dummy-Input, um die Scannereingabe umzulenken
    
    Local $tRID = DllStructCreate($tagRAWINPUTDEVICE)
    DllStructSetData($tRID, 'UsagePage', 0x01)
    DllStructSetData($tRID, 'Usage', 0x06)
    DllStructSetData($tRID, 'Flags', $RIDEV_INPUTSINK)
    DllStructSetData($tRID, 'hTarget', $g_hForm)
    _WinAPI_RegisterRawInputDevices($tRID)
    
    GUIRegisterMsg($WM_INPUT, 'WM_INPUT')
    GUISetState(@SW_SHOW)
    GUICtrlSetState($g_idInput, $GUI_FOCUS)
    
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
    Func WM_INPUT($hWnd, $iMsg, $wParam, $lParam)
        #forceref $iMsg, $wParam
        Local Static $sBuffer = ''
        Local $devType, $devName, $tRIM, $tText, $hFocus
        Switch $hWnd
            Case $g_hForm
                $tRIM = DllStructCreate($tagRAWINPUTHEADER)
                If _WinAPI_GetRawInputData($lParam, $tRIM, DllStructGetSize($tRIM), $RID_HEADER) Then
                    $devType = $tRIM.Type
                Else
                    ConsoleWrite("Device Header Retrieval Failed" & @CRLF)
                    Return
                EndIf
                $tText = DllStructCreate('wchar data[256]')
                If _WinAPI_GetRawInputDeviceInfo($tRIM.hDevice, $tText, 256, $RIDI_DEVICENAME) Then
                    $devName = $tText.data
    ;~                 ConsoleWrite(StringFormat("DevName: '%s'\r\n", $devName))
                Else
                    ConsoleWrite('Device Name Retrieval Failed' & @CRLF)
                EndIf
                If $devName = $g_sDevName Then ; hier wird getestet, ob die Eingabe vom Barcode-Scanner kommt
                    If $devType = $RIM_TYPEKEYBOARD Then ; sicherstellen, dass eine Tastatur-Emulation erfolgt
                        GUICtrlSetState($g_idDummy, $GUI_FOCUS) ; Focus auf das Dummy-Input setzen
                        $tRIM = DllStructCreate($tagRAWINPUTKEYBOARD)
                        If _WinAPI_GetRawInputData($lParam, $tRIM, DllStructGetSize($tRIM), $RID_INPUT) Then
                            If $tRIM.Message = $WM_KEYUP Then ; wenn KEYUP
                                If $tRIM.VKey = 13 Then ; wenn VKey = 13 (@CR) wird bei meinem Barcode-Scanner als Postfix gesendet (evtl. anpassen)
                                    GUICtrlSetData($g_idLabel, $sBuffer) ; Buffer im Label anzeigen
                                    $sBuffer = '' ; Buffer leeeren, fuer naechsten Code
                                    ConsoleWrite('--- New Code ---' & @CRLF) ; nur zum debuggen
                                    GUICtrlSetState($g_idInput, $GUI_FOCUS) ; Focus wieder auf das Input fuer die Tastatur
                                Else ; alle anderen Zeichen werden in den Buffer uebernommen
                                    $sBuffer &= Chr($tRIM.VKey)
                                    ConsoleWrite('Char: ' & Chr($tRIM.VKey) & @CRLF) ; nur zum debuggen
                                EndIf
                            EndIf
                        EndIf
                    EndIf
                EndIf
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_INPUT
    Alles anzeigen

    Ich habe nur nicht herausbekommen, wie man die Zeichen (die man vom Scanner abfängt) aus dem Tastaturpuffer löschen kann. Sie werden immer an das aktive Input-Control gesendet (auch bei einem "Return 0").

    Deswegen habe ich einen Workaround mit einem Dummy-Input eingebaut.

    So funktionieren zumindest beide Eingaben "gleichzeitig".

    Dateien

    !BarcodeScanner.au3 3,17 kB – 291 Downloads
  • Barcode in Variable scannen ohne den Inhalt irgendwo anzuzeigen

    • Oscar
    • 28. Juli 2022 um 05:17
    Zitat von Alina

    Reden wir nun von so einen Scanner oder über RFID Scanner?

    Eigentlich egal, wenn beide eine USB-Tastatur emulieren.

    Das Problem, bei gleichzeitiger Benutzung von Scanner und normaler Tastatur ist, dass man erkennen muss, welche Eingabe woher kommt.

    Wenn der Scanner ein Prä-/Postfix sendet, kann man alle Eingaben vom Prä- bis zum Postfix abfangen (Tastatur-Hook) und entsprechend verwenden. Andy hat das oben bereits erwähnt.

  • String vervielfachen

    • Oscar
    • 22. Juli 2022 um 19:09

    Du suchst: _StringRepeat()

  • Colortable

    • Oscar
    • 22. Juli 2022 um 18:43

    Schön gemacht! :thumbup:

    Gefällt mir, aber warum der Hook?

    GUIGetMsg gibt doch $GUI_EVENT_PRIMARYUP und $GUI_EVENT_SECONDARYUP zurück:

    AutoIt
    ;-- TIME_STAMP   2022-07-22 19:00:00
    
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.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
    
    GUISetState()
    
    Global $aInfo, $aColorClick
    While True
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $GUI_EVENT_PRIMARYUP
                $aInfo = GUIGetCursorInfo($hGui)
                If Not @error Then
                    $aColorClick = _GetColor($aInfo[4])
                    ClipPut('0x' & Hex($aColorClick[1],6))
                    Exit
                EndIf
            Case $GUI_EVENT_SECONDARYUP
                $aInfo = GUIGetCursorInfo($hGui)
                If Not @error Then
                    $aColorClick = _GetColor($aInfo[4])
                    ClipPut('$' & $aColorClick[0] & ' = 0x' & Hex($aColorClick[1],6))
                    Exit
                EndIf
        EndSwitch
    WEnd
    
    Func _GetColor($_ID)
        Local $index = $_ID - $aLabel[0]
        Local $aRet[] = [$aColors[$index][0], $aColors[$index][1]]
        Return $aRet
    EndFunc   ;==>_GetColor
    
    ; #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   ;==>_GuiCtrl_SetColorContrast
    Alles anzeigen
  • Array Sortieren nach Länge der Texte

    • Oscar
    • 22. Juli 2022 um 13:39

    Ja: Strings nach Länge sortieren (_ArraySortStringLen)

  • mehrere Zeiten wenn abgelaufen für OBS

    • Oscar
    • 21. Juli 2022 um 19:14
    Zitat von WhiteHorse

    soll ich da ein neues Thema aufmachen oder kann ich hier weiter schreiben was ist besser?

    Wenn es nichts zu diesem Thema ist, dann ein neues aufmachen.

  • GUICtrlCreateIcon mit png-Datei

    • Oscar
    • 20. Juli 2022 um 18:32

    Sorry, aber Uralt-Versionen von AutoIt werde ich nicht supporten.

  • mehrere Zeiten wenn abgelaufen für OBS

    • Oscar
    • 19. Juli 2022 um 13:19

    Man könnte beim "normalen" beenden auch noch eine Abfrage einbauen:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    
    Global $hGui = GUICreate('Test')
    Global $DummyEscExit = GUICtrlCreateDummy()
    
    Global $aAccelerators[][] = [['+{ESC}', $DummyEscExit]] ; "SHIFT+ESCAPE" zum Beenden ohne Nachfrage
    GUISetAccelerators($aAccelerators)
    
    GUISetState()
    
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                If MsgBox($MB_YESNO + $MB_DEFBUTTON2, 'Test', 'Programm wirklich beenden?', 0, $hGui) = $IDYES Then Exit
            Case  $DummyEscExit
                Exit
        EndSwitch
    WEnd
    Alles anzeigen
  • Freunde & Frust X(

    • Oscar
    • 9. Juli 2022 um 15:14
    Zitat von Alina

    aber bei einigen Steckern ist alles okay, bei anderen nicht.

    Es muss nicht zwangsläufig ein Defekt vorliegen.

    Schau dir mal die funktionierenden Stecker genauer an. Es gibt 3 ud 4polige Versionen von den 3,5mm Klinkenstecker/-buchsen.

    Wenn Du einen 4poligen Stecker in eine 3polige Buchse (oder umgekehrt) steckst, wird die Soundkarte Probleme machen.

  • HP Bioseinstellung mit WMI ändern

    • Oscar
    • 30. Juni 2022 um 14:24

    Hast Du es mal so probiert:

    AutoIt
    #include <StringConstants.au3>
    Local $sPwd2 = "IchBinEinPasswort" ; <- hier das Passwort (UTF-8)
    ;~ $sPwd2 = StringToBinary($sPwd2, $SB_UTF16LE) ; <- nach UTF-16 entweder so
    $sPwd2 = StringToBinary($sPwd2, $SB_UTF16BE) ; <- nach UTF-16 oder so
    Local $wbemFlagReturnImmediately = 0x10
    Local $wbemFlagForwardOnly = 0x20
    Local $strComputer = "localhost"
    Local $strReturn
    Local $hblupp = "x"
    
    $objWMIService = ObjGet("winmgmts:{impersonationlevel=impersonate}//" & $strComputer & "\root\HP\InstrumentedBios")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM HP_BiosSettingInterface", "WQL", _
            $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    If IsObj($colItems) Then
    
        For $objItem In $colItems
    
            $objItem.SetBiosSetting($strReturn, "TPM Activation Policy", "No prompts", "<utf-16/>" & $sPwd2)
    
        Next
    
        Switch $strReturn
            Case 0
                $hblupp = "Success"
            Case 1
                $hblupp = "Not Supported"
            Case 2
                $hblupp = "Unspecified Error"
            Case 3
                $hblupp = "Timeout"
            Case 4
                $hblupp = "Failed"
            Case 5
                $hblupp = "Invalid Parameter"
            Case 6
                $hblupp = "Access Denied"
            Case Else
                $hblupp = "..."
        EndSwitch
    
        ToolTip("SetBiosSetting() returned: " & $strReturn & " = " & $hblupp, Default, Default, "ausgabeReturnwert", 1, 6)
        Sleep(10000)
    
    EndIf
    Alles anzeigen
  • Kürzen bei mehrfachem StringRegExpReplace in direkter Folge ???

    • Oscar
    • 26. Juni 2022 um 12:52
    Zitat von Alina

    Ja, es soll nach "hex" aussehen, aber es ist wirklich nur dafür da, etwas noch mehr zu "verstecken".

    Entschuldige, aber eine Verschlüsselung, die auf verstecken basiert, übersteht keinen ernsthaften Angriff.

    Schon gar nicht, wenn sie in AutoIt geschrieben ist.

    Du solltest in Erwägung ziehen, eine vorhandene sichere Verschlüsselung zu verwenden.

  • Kürzen bei mehrfachem StringRegExpReplace in direkter Folge ???

    • Oscar
    • 26. Juni 2022 um 09:58
    Zitat von Alina

    @@ Vorher =

    9026230723930410930234332531610232133013323321070341302343325109326340321434130819113315514910921321021219570240259341325124340341307322126194174258174


    @@ Nachher =

    90262307239304A9302343325316A232D30D32332A7034D02343325A932634032E34D0819B33F5E9A92D2A2C1957024025934D25C434034D07322C6194174258174


    Kleiner Nebeneffekt, der String wird kürzer.

    Da stellt sich mir die Frage: Was soll das sein/werden?

    Wenn da jeweils zwei Chars eine Zahl darstellen, warum dann als String speichern?

    Als Byte-Array würde das Ganze nur die Hälfte an Speicher brauchen.

  • Kürzen bei mehrfachem StringRegExpReplace in direkter Folge ???

    • Oscar
    • 25. Juni 2022 um 19:23

    Achtung! Hier lauert ein anderer Fehlerteufel!

    Was passiert, wenn die Zeichenkette folgendermaßen lautet: "0201150114"?

    Dann werden die "11" durch "B" ersetzt, obwohl es eigentlich "15" = "F" und "14" = "E" wären.

    Wenn hier eine Wandlung nach Hex erfolgen soll, dann erstmal ein Array mit jeweils 2 Stellen erstellen und erst danach umwandeln.

    Also:

    Code
    #include <Array.au3>
    $sText = "0201150114"
    $aText = StringRegExp($sText, '(.{2})', 3)
    _ArrayDisplay($aText)

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™