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

Beiträge von Haldi

  • Barcode Scanner mit Etiketten Drucker

    • Haldi
    • 15. Juni 2023 um 15:38
    Zitat von Kanashius

    Ansonsten kannst du auch einfach nach Zeile 47 ein ConsoleWrite($iKeyCode&@crlf) einfügen.

    Ohhh.... Das ist eine geniale idee.

    Das mit den ASCI -> Char hab ich im internet gefunden für 0-9 und A-z aber Shift war da nicht dabei.

    Macht ja auch sinn wenn das 0 ist.

    Die Methode mit ElseIf hat funktioniert!

    Tausend dank.


    Ich kann eigentlich das ganze P-Touch mit ControlClicks steuern. Machts recht bequem.

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIvkeysConstants.au3>
    OnAutoItExitRegister('OnAutoItExit')
    
    Global $fileName = "[PoC_3.lbx]", $windowName = "P-touch Editor - "&$fileName
    
    HotKeySet('{ESC}', '_exit')
    
    Global $sStart = StringUpper("TZProduktion-")
    Global $arBuffer[200], $iBufferEnd = 0, $bBufferMatch = False, $arStart = StringSplit($sStart, "", BitOR(1, 2))
    
    Global $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hKeyHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hmod)
    
    Global $iWidth = 300, $iHeigt = 200
    Global $hGui = GUICreate('Barcodescanner', $iWidth, $iHeigt)
    Global $idBarcode = GUICtrlCreateLabel('', 10, 10, $iWidth-20, 30)
    GUISetState(@SW_SHOW) ;HIER FENSTER VERSTECKEN.
    
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _exit()
        EndSwitch
    WEnd
    
    Func _barcodeFound($sBarcode)
        ConsoleWrite("FOUND: "&$sBarcode&@crlf)
        If WinExists($windowName) Then
            WinActivate($windowName)
        Else
            MsgBox(0, "Error Kein Window", $windowName) ;ODER Programm Starten und Vorlage öffnen!
            Exit ;temp.....
    EndIf
    ControlClick($windowName, "", 11945) ;Suchfeld öffnen
    WinWait("Suchen")
    ControlSetText("Suchen", "", 11171, StringTrimLeft($sBarcode, 13))
    ControlClick("Suchen", "Gefundene &Datensätze auswählen", 11178) ;Suchen
    Sleep(200)
    If WinExists("P-touch Editor", "Alle Datensätze wurden durchsucht.")  Then
    ;~     MsgBox(262144, "ERROR", "Existiert nicht")
        ControlClick("P-touch Editor", "OK", 2)
        ControlClick("Suchen", "Schließen", 2)
        Beep(500, 500)
        Sleep(50)
        Beep(500, 500)
        ToolTip("ERROR! Auftrag nicht gefunden")
    Else
    WinWaitActive($windowName)
    ControlClick($windowName, "", 5350) ;Direct Print
    EndIf
    EndFunc
    
    Func _exit() ;just to enable the ESC hotkey
        Exit
    EndFunc
    
    ; ACHTUNG! Callback-Funktion!
    ; In dieser Funktion darf es keinen blockierenden Code (z.B. MsgBox, Sleep, etc.) geben!
    ; Hier werden direkt die virtuellen Keycodes der Tastatur ausgewertet:
    ; https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
    Func _KeyProc($nCode, $wParam, $lParam)
        Local $tKBDLLHOOK = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
        Local $iKeyCode = $tKBDLLHOOK.vkCode, $iPressTime
        $iKeyCode = _WinAPI_MapVirtualKey($iKeyCode, $MAPVK_VK_TO_CHAR) ; needed for different keyboard layouts (e.g. US-layout - is ASCII 189, not 45 otherwise)
        If $nCode >= 0 Then
            Switch $wParam
                Case $WM_KEYUP
                     If $iKeyCode = 45 Or _ ;key -
                         ($iKeyCode>=48 And $iKeyCode<=57) Or _ ;Numbers 0 to 9
                        ($iKeyCode>=65 And $iKeyCode<=90) Then ; Letters A to Z
                        $arBuffer[$iBufferEnd] = Chr($iKeyCode)
                        $iBufferEnd += 1
                        If $iBufferEnd>UBound($arBuffer)-1 Then $iBufferEnd = 0 ; Reset if longer than buffer, may lead to scan loss
                        If Not $bBufferMatch Then _checkBuffer()
                    ElseIf $iKeyCode <> 0 Then
                        If $bBufferMatch Then _barcodeFound(_bufferToStr())
                        $bBufferMatch = False
                        $iBufferEnd = 0
                    EndIf
                    GUICtrlSetData($idBarcode, _bufferToStr())
                    ; Return 1
            EndSwitch
        EndIf
        Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam)
    EndFunc   ;==>_KeyProc
    
    Func _checkBuffer()
        Local $iCount = 0, $iStart = 0
        While $iCount<$iBufferEnd
            $iStart = $iCount
            While $iStart < $iBufferEnd
                If $arBuffer[$iStart] <> $arStart[$iStart-$iCount] Then
                    $iCount += 1
                    ContinueLoop 2
                EndIf
                If $iStart-$iCount >= UBound($arStart)-1 Then
                    $bBufferMatch = True
                    Return True
                EndIf
                $iStart+=1
            WEnd
            ExitLoop
        WEnd
        If $iCount<>0 Then
            Local $iDiff = $iBufferEnd-$iCount
            If $iDiff<=0 Then
                $iBufferEnd=0
            Else
                For $i=0 To $iDiff Step 1
                    $arBuffer[$i] = $arBuffer[$iCount+$i]
                Next
                $iBufferEnd=$iDiff
            EndIf
            Return False
        EndIf
        Return True
    EndFunc
    
    Func _bufferToStr()
        Local $sRes = ""
        For $i=0 To $iBufferEnd-1 Step 1
            $sRes &= $arBuffer[$i]
        Next
        Return $sRes
    EndFunc
    
    ; Wichtig! Beim Programmende den Hook wieder entfernen.
    Func OnAutoItExit()
        _WinAPI_UnhookWindowsHookEx($hKeyHook)
        DllCallbackFree($hKeyProc)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen
  • Barcode Scanner mit Etiketten Drucker

    • Haldi
    • 15. Juni 2023 um 10:24
    Zitat von Kanashius

    Das betrifft auch Tasten wie SHIFT. Falls dein Scanner Groß/Klein-schreibung beachtet musst du evtl. den Code für SHIFT ignorieren, um nicht zurückzusetzen (Zeile 55). Dementsprechend ignoriert der Code auch Groß/Klein-Schreibung beim Pattern.

    Scheint so als würde er mit Shift machen und mit Tab beenden.

    AutoIt
                Case $WM_KEYUP
                     If $iKeyCode = 45 Or _ ;key -
                         ($iKeyCode>=48 And $iKeyCode<=57) Or _ ;Numbers 0 to 9
                        ($iKeyCode>=65 And $iKeyCode<=90) Then ; Letters A to Z
                        $arBuffer[$iBufferEnd] = Chr($iKeyCode)
                        $iBufferEnd += 1
                        If $iBufferEnd>UBound($arBuffer)-1 Then $iBufferEnd = 0 ; Reset if longer than buffer, may lead to scan loss
                        If Not $bBufferMatch Then _checkBuffer()
                    Else
                        If $bBufferMatch Then _barcodeFound(_bufferToStr())
                        $bBufferMatch = False
                        $iBufferEnd = 0
                    EndIf
                    GUICtrlSetData($idBarcode, _bufferToStr())
    Alles anzeigen

    Shift wird VORHER getriggert, also wenn ich nur nach "Produktion" suche findet er dies...

    "FOUND: PRODUKTION-22103748-101"

    Okay... ich seh ich hab wesentlich weniger Ahnung als ich gedacht habe^^

    Irgendwie muss da also im Else der Ignore Shift befehlt eingebaut werden....

    Grossklein schreibung ist zum glück eh irrelevant.

  • Barcode Scanner mit Etiketten Drucker

    • Haldi
    • 14. Juni 2023 um 16:31

    Ohhh danke für den Hinweis!

    Ich sehe schon das Oscar hier eine wundervolle Vorlage erstellt hat.

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>
    #include <WinAPIConstants.au3>
    #include <WinAPIInternals.au3>
    #include <WinAPISys.au3>
    #include <WinAPISysInternals.au3>
    #include <WindowsConstants.au3>
    #include <FileConstants.au3>
    #include <File.au3>
    #include <WinAPI.au3>
    
    Global $Gewerk = "Polsterei"
    Global $Titel = "Polsterei.htm"
    Global $Titelmin = "Polsterei_min.htm"
    
    Global $Freigabe = "\\ste01\planung\"
    Global $hmod, $hHook, $hStub_KeyProc, $buffer = '', $scannerbufferflag = 0
    Global $LogText =""
    Global $Eingabe
    Global $File[5]
    
    ; Hier den Postfix-Code von eurem Scanner eintragen.
    Global $g_iPostfix = 0x0D ;Enter
    ; Hier den Prefix-Code von eurem Scanner eintragen.
    Global $g_iPrefix = 0x71 ;F2
    
    HotKeySet('{ESC}', '_Exit')
    OnAutoItExitRegister('OnAutoItExit')
    Global $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hKeyHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hmod)
    
    Global $hGui = GUICreate('Barcodescanner', 300, 140)
    Global $idBarcode = GUICtrlCreateLabel('', 10, 10, 280, 30)
    GUICtrlSetFont(-1, 16, 400, 0, 'Courier New')
    Global $idInput = GUICtrlCreateInput('', 10, 50, 280, 30)
    GUICtrlSetFont(-1, 16, 400, 0, 'Courier New')
    GUISetState(@SW_HIDE)
    Global $g_bBufferOk = False, $g_sBuffer = ''
    Do
        If $g_bBufferOk Then
            _StatusSave($g_sBuffer)
            $g_sBuffer = ''
            $g_bBufferOk = False
        EndIf
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    consolewrite("ende")
    Exit
    
    Func _Exit()
        Exit
    EndFunc
    
    ; ACHTUNG! Callback-Funktion!
    ; In dieser Funktion darf es keinen blockierenden Code (z.B. MsgBox, Sleep, etc.) geben!
    ; Hier werden direkt die virtuellen Keycodes der Tastatur ausgewertet:
    ; https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
    Func _KeyProc($nCode, $wParam, $lParam)
        Local $tKBDLLHOOK = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
        Local $iKeyCode = $tKBDLLHOOK.vkCode, $iPressTime
        Local Static $sBuffer = '', $bBarcodeActive = False
        If $nCode >= 0 Then
            If $iKeyCode = $g_iPrefix And $wParam = $WM_KEYUP Then
                $bBarcodeActive = Not $bBarcodeActive
                ConsoleWrite('$bBarcodeActive = ' & $bBarcodeActive & @CRLF)
                $sBuffer = ''
            EndIf
            If $bBarcodeActive Then
                Switch $wParam
                    Case $WM_KEYDOWN
                        Return 1
                    Case $WM_KEYUP
                        Switch $iKeyCode ; Keycode auswerten
                            Case $g_iPostfix
                                ConsoleWrite(StringFormat('Barcode = "%s"\r\n', $sBuffer))
                                $g_sBuffer = $sBuffer
                                $g_bBufferOk = True
                                $sBuffer = ''
                                $bBarcodeActive = False
                                ConsoleWrite('$bBarcodeActive = ' & $bBarcodeActive & @CRLF)
                                Return 1
                            Case 0x30 To 0x39, 0x41 To 0x5A ; 0 - 9, A - Z
                                $sBuffer &= Chr($iKeyCode)
                                Return 1
                        EndSwitch
                EndSwitch
            EndIf
        EndIf
        Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam)
    EndFunc   ;==>_KeyProc
    
    ; Wichtig! Beim Programmende den Hook wieder entfernen.
    Func OnAutoItExit()
        _WinAPI_UnhookWindowsHookEx($hKeyHook)
        DllCallbackFree($hKeyProc)
    EndFunc   ;==>OnAutoItExit
    
    Func _StatusSave($sBuffer)
        Local $hFile
        If FileExists($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Start.log") Then
            $hFile = FileOpen($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Ende.log", 1)
            beep(500,200)
            beep(500,200)
        Else
            $hFile = FileOpen($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Start.log", 1)
            beep(500,200)
        EndIf
        _FileWriteLog($hFile, $sBuffer & @CRLF)
        FileClose($hFile)
    EndFunc   ;==>StatusSave
    Alles anzeigen

    Gehe ich korrekt in der Annahme dass das alles darauf basiert das der Scanner (hier in diesem falle mit F2 und Enter) sämtliche Scans einkapselt?

    Ich sehe zwar noch nicht wie das GUI aufgerufen wird, aber so wies ausschaut sollte ich mit der "Func _StatusSave($sBuffer)" eigentlich an den Barcode rankommen.

    Werde das morgen in aller Frische mal versuchen! Hab iwo noch ne fette anleitung des Scanners, wenn probieren nicht hilft sollte vielleicht da noch stehen welche Pre/Postfix der verwendet.


    Danke.

  • Barcode Scanner mit Etiketten Drucker

    • Haldi
    • 14. Juni 2023 um 14:08

    Natürlich Kontinuierlich.

    Ist ja schliesslich ein WIRELESS Scanner. Wenn du abdrückst kommt der Input so gut wie ohne verzögerung.

    Für das wenig geld echt ein cooles ding. Nur wie gut der Akku hält müssen wir noch testen.

  • Barcode Scanner mit Etiketten Drucker

    • Haldi
    • 14. Juni 2023 um 13:46
    Zitat von Moombas

    Also am einfachsten wäre, du hast eine GUI mit nur einem Input, wo du "reinscannst", davon abhängig läuft dann der Rest.

    Das ich somit auf dem PC an dem der Drucker hänget IMMER das Inputfenster offen und fokusiert haben muss damit es funktioniert.

    Da der Scanner eine USB Basisstation hat aber selber Wireless ist und somit NICHT immer direkt neben dem PC steht, könnte das evtl probleme geben.

    Aber ja... eigentlich ein gutes Argument.

    Wenn ich das andere nicht hinbekomme wirds wohl auf das heraus laufen.

  • Barcode Scanner mit Etiketten Drucker

    • Haldi
    • 14. Juni 2023 um 13:26

    Hallo zusammen,

    Einsatzziel wäre es beim Scannen des Auftrages direkt die passenden Etiketten drucken zu können.

    Auftragsblätter besitzen einen Barcode:

    Dieser wird per Scanner gesannt. Wie jeder dieser einfachen billigen Scanner haben die einen USB Anschluss und werden als HID Keyboard erkannt und tippen das gescannte einfach in das offene Fenster.

    Die Etikette wird über einen Brother Drucker gedruckt mit der Software P-Touch Editor.

    Die ist so fortgeschritten das sie Datenbanken und Excel dokumente unterstützt.


    Mein eigentlicher plan ist:

    Ich schreibe einen überwacher der im Hintergrund immer auf Spezialtasten kombination CTRL+ALT+1 (oder so ähnlich) achtet, dann bei eingabe die P-Touch Software öffnet und ein eingabefeld für den Barcode öffnet.

    Alles kein Problem. Ausser das man nun entweder vorher eine Tastenkombination eintippen muss oder einen zweiten Barcode abscanen der die Tastenkombi auslöst.

    Nun kommt meine geniale Idee.

    Da der Barcode IMMER mit TZProduktion- anfängt müsste es doch eigentlich möglich sein sobald der Scanner die Tasteneingabe "TZproduktion-" erkennt den resten zu speichern, P-Touch Editor zu öffnen, Suche nach Barcode in der Datenbank, Etikette drucken. Fertig.

    Und nun erkennt ihr sicher auch mein Problem.

    Es findet sich beinahe nichts dazu wie ich auf eingabe von String XYZ warte und dann den zweiten Teil davon zwischenspeichere.

    Hat vielleicht jemand Tipps dazu was das einfachste vorgehen wäre? oder vorlagen wo sowas ähnliches schon läuft?


    mfg

  • Denon Remote Protocol Telnet / TCPsend ?

    • Haldi
    • 11. Mai 2014 um 00:07
    Zitat von misterspeed


    Ahja und warum baust du dein tcpconnect / tcpclose nicht am Scriptanfang bzw. Scriptende ein anstatt für jeden Befehl innerhalb der Funktion neu zu connecten? Das sollte die Performance ein wenig verbessern. Problematisch wäre das nur wenn der Server Verbindungen nach einer gewissen Zeit trennt, aber auch dem könnte man entgegenwirken, entweder durch regelmässigen Kontakt oder aber durch die Prüfung ob TCPsend erfolgreich war (falls nicht wird die Verbindung innerhalb der Funktion neu aufgebaut und erneut gesendet).

    Sollte man denken, nicht wahr? Aber ich weiss nicht obs am 200ms(300ms?) Timeout des Befehls liegt, aber auf die andere weise wurde kein einziger Befehl akzeptiert! Darum musste das TCPconnect hat mit in die Funktion.

    da meistens sowieso nur 1 Befehl auf einmal gesendet wird ist die Performance auch nicht so wichtig.

  • Denon Remote Protocol Telnet / TCPsend ?

    • Haldi
    • 8. Mai 2014 um 14:02

    vermutlich lag es an genau dem. :rolleyes:

    BTW, hab mir nun zwei Scripts damit gebastelt die recht gut funktionieren :)

    Das Autostart

    [autoit]

    #NoTrayIcon
    TCPStartUp()
    denon ("PWON")
    Sleep(2000)
    denon ("MSQUICK1")

    [/autoit][autoit][/autoit][autoit]

    ;Old method no quick Setting
    ;~ denon ("SIGAME")
    ;~ Sleep(1100)
    ;~ denon ("MSMCH STEREO")
    ;~ sleep(1100)
    ;~ denon ("MV70")
    ;~ Sleep(1100)

    [/autoit][autoit][/autoit][autoit]

    TCPShutDown()

    [/autoit][autoit][/autoit][autoit]

    Func denon($command)
    $socket = TCPConnect("192.168.1.25", 23)
    TCPSend($socket, $command & @CRLF)
    ConsoleWrite(TCPRecv($socket, 1024))
    TCPCloseSocket($socket)
    EndFunc

    [/autoit]

    Und nen Tray Icon womit ich auch am PC kurz umschalten kann.

    [autoit]

    #NoTrayIcon
    #include <TrayConstants.au3>
    TraySetIcon(@UserProfileDir&"\Pictures\Denon.ico")
    TraySetToolTip("Denon Sound Control")

    [/autoit][autoit][/autoit][autoit]

    Opt("TrayMenuMode", 3) ; The default tray menu items will not be shown and items are not checked when selected. These are options 1 and 2 for TrayMenuMode.
    Global $answer

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    TCPStartUp()
    Trayicon()
    TCPShutdown()

    [/autoit][autoit][/autoit][autoit]

    Func Trayicon()

    [/autoit][autoit][/autoit][autoit]

    $iSoundmod = TrayCreateMenu("Sound Mode")
    $iMCHSTEREO = TrayCreateItem("MCH Stereo",$iSoundmod, -1, 1)
    $iMatrix = TrayCreateItem("Matrix",$iSoundmod, -1, 1)
    $iVideoGame = TrayCreateItem("Video Game",$iSoundmod, -1, 1)
    $iDirect = TrayCreateItem("Direct", $iSoundmod, -1, 1)

    [/autoit][autoit][/autoit][autoit]

    $iBass = TrayCreateMenu("Bass")
    $iNoBass = TrayCreateItem("Normal",$iBass, -1, 1)
    $iBBass = TrayCreateItem("Bass Boost",$iBass, -1, 1)
    $iUBass = TrayCreateItem("Ultra Bass", $iBass, -1, 1)

    [/autoit][autoit][/autoit][autoit]

    TrayCreateItem("") ; Create a separator line.

    [/autoit][autoit][/autoit][autoit]

    $iQM1 = TrayCreateItem("Quick Mode 1")

    [/autoit][autoit][/autoit][autoit]

    Denon("PW?")
    ConsoleWrite(StringLen($answer))
    If StringLen($answer) >= 6 Then
    $iPWR = TrayCreateItem("Power On")
    Elseif StringLen($answer) = 5 Then
    $iPWR = TrayCreateItem("Shut Down")
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    TrayCreateItem("") ; Create a separator line.

    [/autoit][autoit][/autoit][autoit]

    $iExit = TrayCreateItem("Exit")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    TraySetState(1) ; Show the tray menu.

    [/autoit][autoit][/autoit][autoit]

    While 1
    Switch TrayGetMsg()
    Case $iMCHSTEREO
    denon("MSMCH STEREO")
    Case $iMatrix
    denon ("MSMATRIX")
    Case $iVideoGame
    denon ("MSVIDEO GAME")
    Case $iDirect
    denon ("MSDIRECT")
    Case $iQM1
    denon ("MSQUICK1")
    Case $iNoBass
    denon ("CVSW 49")
    Case $iBBass
    denon ("CVSW 56")
    Case $iUBass
    denon ("CVSW 62")
    Case $iPWR
    if TrayItemGetText($iPWR) = "Power On" Then
    denon ("PWON")
    TrayItemSetText($iPWR, "Shut Down")
    ElseIf TrayItemGetText($iPWR) = "Shut Down" Then
    denon ("PWSTANDBY")
    TrayItemSetText($iPWR, "Power On")
    EndIf
    Case $iExit ; Exit the loop.
    ExitLoop
    EndSwitch
    WEnd
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func denon($command)
    $socket = TCPConnect("192.168.1.25", 23)
    TCPSend($socket, $command & @CRLF)
    $answer = TCPRecv($socket, 1024)
    TCPCloseSocket($socket)
    EndFunc

    [/autoit]


    EDIT:

    Mir sind aber noch 2 dinge ein Dorn im Auge für dir mir gerade keine Lösung in den Sinn kommt.
    1. Gibt es eine möglichkeit das sich das Tray menue nicht schliesst nachdem man auf etwas geclickt hat ?
    2. Wie bringt ich das am besten rein das sich ein TrayItem automatisch aktualisiert sobal ich das tray menue öffne ? Wenn ich es in die While 1 schleiffe vor dem Switch einbaue gibt das doch nur ein riesen workload oder ?

  • Denon Remote Protocol Telnet / TCPsend ?

    • Haldi
    • 8. Mai 2014 um 03:26

    Hallo,

    Ich hab seit kurzem ein Denon AVR-X1000 welcher einen Netzwerk anschluss besitzt und auch darüber gesteuert werden kann.
    Offizielles PDF mit den Spezifikationen: hier

    Fernbedienungen gibt es damit natürlich schon einige.
    n ganz simples Proof Of Concept hier
    hierhat jemand was zusammen gebastelt
    mit nem ordentlichen GUI gibts das Command3808 für nen anderes Model, das aber auch recht gut funktioniert.
    es gibt die grundzüge einer php version hier

    und dann gibt es da mich:

    [autoit][/autoit][autoit][/autoit][autoit]

    Opt('MustDeclareVars', 1)

    Example()

    Func Example()
    Local $ConnectedSocket, $szData
    Local $szIPADDRESS = "192.168.1.25"
    Local $nPORT = 23
    TCPStartup()
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
    If @error Then
    MsgBox(4112, "Error", "TCPConnect failed: " & @error)
    Else
    While 1
    $szData = InputBox("Command", @LF & @LF & "Enter command to transmit:")
    If @error Or $szData = "" Then ExitLoop
    TCPSend($ConnectedSocket, $szData)
    If @error Then ExitLoop
    WEnd
    EndIf
    EndFunc ;Example

    [/autoit]

    der daran scheitert nen simples "PWSTANDBY<CR>" command zu senden.

    Leider scheint mein Netzwerk- und Programmiersprachenverständnis nicht mehr auszureichen.


    Sinn der ganzen Sache? Ich hätte gern ein simples Script das ich in den Autostart ordner legen kann das sobal der PC fertig aufgestartet ist den Reciever anschaltet sofern er nicht schon an ist, und dann auf GameMode umschaltet. Wenn ich es jetzt nur noch irgendwie dazu bringen könnte die commands zu akzeptieren :S

    Sieht hier irgendjemand wo mein vermutlich recht simpler Fehler liegen könnte?

    mfg

    Haldi


    Edit:
    Ein simples

    [autoit]

    TCPStartUp()
    $socket = TCPConnect("192.168.1.25", 23)
    TCPSend($socket, "PWON" & @CRLF)
    MsgBox(0, "TCP Example - server response",TCPRecv($socket, 1024))
    TCPCloseSocket($socket)
    TCPShutDown()

    [/autoit]


    Funktioniert ganz gut -.-

  • Wikipedia-Run

    • Haldi
    • 7. Oktober 2013 um 12:44

    Das gäbe eine ganz schön grosse liste!
    Da in Computer ja nicht (jedenfalls hier) in der Lage ist nach themen zu kategorisieren oder schlüsse zu ziehen müsste man einfach mit inet_get sämtliche Links auflisten, und danach diese wieder nach Links durchsuchen, usw usw und mit dem Ziel Artikel abgleichen.

    Gleiche Methode könnte man verwenden um Ziel Artikel zu definieren.
    Zufälliger Artikel auswählen. Random 1-10 = tiefer der verlinkungen,
    Danach alle Links aus dem Text filtern und mit random einen auswählen, dies so weiter bis die anzahl erreicht ist.

    So würde man zwar immer genau so viel clicks brauchen wie die tiefe der verlinkung ist, wenn man alles richtig schafft, aber man merkt das wohl eh nicht.

    Do könnte man auch Ranglisten erstellen. Kategorien mässig, für 10 verlinkungen tief, 5 tief und 3 tief.
    Wobei es dann wirklich ziemlich glücks abhängig wäre, was für einen Artikel man erwischt.

  • _SelectFileOrFolder

    • Haldi
    • 13. Juli 2013 um 16:29

    Liegt das nun an mir oder kann man damit keine Unterordner anwählen sondern nur die Ordner auf C:\ D:\ oder was auch alles vorhanden ist ?

    Und wie wärs mit einer MultiSelect funktion ?

  • Zugriffe auf Datei loggen und/oder blocken?

    • Haldi
    • 13. Juli 2013 um 15:45

    Hö ? Also soll verhindert werden das der USB stick in anderen PC's gelesen werden kann?
    Das mit dem Zugriff loggen würde wohl nur auf dem eigenen PC funktionieren, nicht wenn man den USB stick woanders verwendet.
    Es sei denn du würdest ein AutoRun einrichten welches einen logger startet, allerdings würde das wohl nicht auf allen Computern laufen, je nach OS.

    Aber es sollte doch problemlos möglich sein die Dateien zu verschlüsseln und das entschlüsselungsprogramm dazu auch gerade auf den Stick zu legen oder ?

  • Hide my Stuff

    • Haldi
    • 23. April 2013 um 01:28

    peethebee
    No Risk no Fun. Nein Scherz, hast du eine andere Idee was man verwenden könnte ? *.tmp sind die Einzigen dateien die mir in den Sinn gekommen sind die nicht auffällig sind wenn sie en mass vorkommen, und auch etwas grösser sind. Ausser .zip oder .rar archiven ! Aber kann man ein .rar beim ersten versuch nicht öffnen ist es defekt und wird gelöscht!
    Evtl wäre es möglich mit Admin rights die Datei schreibgeschützt zu machen ?

    autoBert
    Natürlich steht das da nirgens! Das ist auch ein riesen "Sicherheitsfehler" soetwas überhaupt einzubauen.... Ich habs nur der Faulheit halber drin gelassen. Wer will kann sich die settings.ini selbst erstellen und mit ihr arbeiten.
    IniRead("settings", "quick", "dateipfad", "") Zeigt ja an wie die Datei ausgelesen wird,
    [quick]
    code=1234
    dateipfad=C:\Testfolder

    Und die Dateien werden ja nicht Verschlüsselt, darum heisst das Skript auch "Hide my Stuff" und nicht "Encrypt" Genau das ist ja der sinn dahinter. Das Dateien nicht verändert werden, die prodezur in sekundenschnelle vorbei ist. (wobei ich zugeben muss das ich keine Ahnung habe wie lange es dauert eine Datei zu verschlüsseln.... mindestens solange wie es dauern würde sie zu kopieren oder?)

  • Hide my Stuff

    • Haldi
    • 12. Februar 2013 um 11:17

    Naja, das es dies macht ob ich will oder nich sehe ich es als Bug an!
    Wenn ich es hinbekomme dies mit einer Checkbox freiwillig zu machen dann kann man es als Feature betrachten.

  • Hide my Stuff

    • Haldi
    • 11. Februar 2013 um 21:10

    Halli Hallo,

    Ich hatte in letzer Zeit ein wenig langeweile und zu wenig zu tun. Irgendwie bin ich dann darauf gekommen schon lange nichts mehr mit AutoIT geschrieben zu haben.
    Nach ein par Stunden chatten mit einem kollegen ist mir dann auch endlich eine idee gekommen was ich machen könnte.

    Hide my Stuff
    Funktionsweise:
    Die Dateinamen werden verschlüsselt und mit der endung *.tmp abgespeichert. Praktischerweise können sie auch direkt wieder entschlüsselt werden.
    Die Datei selbst wird nicht verändert, es ist also trotzdem noch möglich die Datei zu öffnen (mit dem richtigen Programm) oder auch wieder um zu benennen.
    Es werden immer ALLE Dateien im Ordner verschlüsselt. Unterordner werden ignoriert!
    Es wird eine 0000test.tmp1 datei angelegt um die verschlüsselung zu testen (und wird nach den entschlüsseln wieder gelöscht)
    Versteckte Dateien werden erkannt und verschlüsselt (bleiben versteckt). Allerdings können versteckte Ordner nicht ausegwählt werden.
    Quick: in einer settings Datei können standard passwort und Pfad festgelegt werden.

    Sinn der Sache:
    Schliesst Dateien aus der Suche nach Dateinamen/typ aus.
    Verhindert das Bilder/Videos via medien index indiziert werden.

    Bugs:
    Bereits verschlüsselte Dateien können ein zweites und drites und viertes mal verschlüsselt werden.
    Es können nur ganze ordner verschlüsselt werden die nicht schon verschlüsselte dateien beinhalten. (Diese werden sonst doppelt verschlüsselt)
    Sollten sich besondere Zeichen im Dateinamen befinden kann die verschlüsselung evtl übersprungen werden.

    To do:
    Irgend eine möglichkeit finden beim encrypt1() die .tmp dateien aus dem array der gefundenen Dateien zu löschen!(Irgendjemand gerade eine Idee wie? _arraybinarysearch und _arraydfindall funktioniert nicht)
    Suchindex überarbeiten das eine Auswahlliste erscheint welche dateien in dem Ordner man verschlüsseln will und welche nicht.
    Evtl den Kopf der Datei löschen und in der Check datei abspeichern, damit die Dateien gar nicht mehr geöffnet werden können. (dies würde aber wohl die Performance beeinträchtigen... ich hab nun 1.5gb (256 dateien) in rund 5 sekunden verschlüsselt.)

    Spoiler anzeigen

    Quellcode:

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    [autoit]


    #include <Array.au3>
    #Include <File.au3>
    #include <String.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #NoTrayIcon
    Global $dateipfad, $code

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Hide my Stuff", 256, 120, -1, -1)
    $code = GUICtrlCreateInput("password", 8, 32, 233, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
    $ButtonEncrypt = GUICtrlCreateButton("Encrypt", 86, 64, 75, 25, 0)
    $ButtonDecrypt = GUICtrlCreateButton("Decrypt", 159, 64, 75, 25, 0)
    $EnterPassLabel = GUICtrlCreateLabel("Enter password", 8, 12, 77, 17)
    $ButtonFolder = GUICtrlCreateButton("Folder", 8, 64, 65, 25, 0)
    $Checkbox1 = GUICtrlCreateCheckbox("Quick", 16, 96, 45, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonEncrypt
    If GUICtrlRead( $Checkbox1) = $GUI_CHECKED Then
    $code = IniRead("settings", "quick", "code", "password")
    $dateipfad = IniRead("settings", "quick", "dateipfad", "")
    EndIf
    encrypt1()
    MsgBox(0, "Done", "Folder: "&$dateipfad&" encrypted")
    Case $ButtonDecrypt
    If GUICtrlRead( $Checkbox1) = $GUI_CHECKED Then
    $code = IniRead("settings", "quick", "code", "password")
    $dateipfad = IniRead("settings", "quick", "dateipfad", "")
    EndIf
    decrypt1()
    MsgBox(0, "Done", "Folder: "&$dateipfad&" decrypted")
    Case $ButtonFolder
    $dateipfad= FileSelectFolder( "Ordner Auswählen", @HomePath, 4)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func encrypt1()
    $nr = 1
    $orinames =_FileListToArrayMultiSelect($dateipfad,"*",",",1)
    _ArrayDisplay ($orinames, "Files to encrypt") ;shows all files in folder, deactivate if you don't like it
    FileWrite($dateipfad&"\0000"&(_StringEncrypt(1, "test", $code)&".tmp1"),"0") ;create password check
    Do
    $oriname = _ArrayToString($orinames, "",$nr, $nr)
    $orinameC = _StringEncrypt( 1, $oriname, $code)
    ;~ MsgBox(0, "", $oriname&@CRLF&$orinameC&".tmp")
    FileMove($dateipfad&"\"&$oriname, $dateipfad&"\"&$orinameC&".tmp", 1)
    $nr = $nr+1
    Until $nr >= $orinames[0]+1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func decrypt1()
    $nr =1
    $orinamesDC =_FileListToArrayMultiSelect($dateipfad,"*.tmp1",",",1) ;check for correct password, start
    $orinameDC = _ArrayToString($orinamesDC, "",1, 1)
    $orinameDCC = StringTrimLeft((StringTrimRight($orinameDC,5)),4)
    ;~ _ArrayDisplay ($orinamesDC)
    If _StringEncrypt( 0, $orinameDCC, $code) <> "test" Then
    MsgBox(0, "Error", "Wrong password")
    Exit
    Else
    FileDelete($dateipfad&"\0000"&$orinamedcc&".tmp1")
    $orinamesDC =_FileListToArrayMultiSelect($dateipfad,"*.tmp",",",1) ;end of password check
    ;~ _ArrayDisplay ($orinamesDC)
    EndIf
    Do
    $orinameDC = _ArrayToString($orinamesDC, "",$nr, $nr)
    $orinameDCC= StringRegExpReplace( $orinameDC, ".tmp", "")
    $orinameD = _StringEncrypt( 0, $orinameDCC, $code)
    ;~ MsgBox(0, "", $orinameDC&@CRLF&$orinameD)
    FileMove( $dateipfad&"\"&$orinameDC, $dateipfad&"\"&$orinameD, 1)
    $nr = $nr+1
    Until $nr >= $orinamesDC[0]+1
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileListToArrayMultiSelect($dir,$searchlist,$Separator,$iFlag = 0)
    Local $FileList[1] = [0], $Filelist1, $iN, $Num, $search
    $search = StringSplit($searchlist, $Separator)
    If $search[0] > 0 Then
    For $iN = 1 To $search[0]
    $Filelist1 = _FileListToArray($dir, $search[$iN], $iFlag)
    If Not @error Then
    $Num = UBound($FileList)
    _ArrayConcatenate($FileList, $Filelist1)
    $FileList[0] = $FileList[0] + $FileList[$Num]
    _ArrayDelete($FileList, $Num)
    EndIf
    Next
    EndIf
    Return $FileList
    EndFunc

    [/autoit]

    Jegliche Rückmeldungen sind willkommen!


    mfg

    Haldi

    Bilder

    • hidemystuff.JPG
      • 17,09 kB
      • 273 × 159
  • CityMark 0.1 - OpenGL 3D Benchmark

    • Haldi
    • 7. Februar 2013 um 23:28

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    =============== MINX-O-MAT =====================================
    - CPU: Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz (12 x 3200MHz)
    - CPU-Cooldown [====================]
    + Test 1: 937633 points.
    + Test 2: 457020 points.
    + Test 3: 211588 points.
    + Test 4: 747360 points.
    + Test 5: 4341587 points.

    wobei das eig 4000mhz wären

    Bilder

    • CityMark_Result_2013_02_07.jpg
      • 2,13 kB
      • 142 × 14
  • inetgetSource bringt keinen Quelltext (.php?v=)

    • Haldi
    • 24. April 2012 um 19:45

    Ach stimmt ja, da war mal was wegen Square7 blockt so ziemlich alles.... völlig vergessen. Danke für die erinnerung.

    Danke für das _URIdecode eigentlich genau das was ich gesucht hab. Aber hab mit der suche nach "unescape" vorwiegened .php probleme gefunden.
    ist schon schöner sowas direkt in AutoIT zu lösen ohne zugriff auf eine externe datei. Ich bin nur leider was unbeholfen was hex werte angeht. die verwirren mich immer so... und vorallem bei mehr als einem auf einmal. Aber das funktioniert so bestens.

    Tausend Dank!

  • inetgetSource bringt keinen Quelltext (.php?v=)

    • Haldi
    • 24. April 2012 um 01:26

    Halli hallo,

    Ich befürchte das INetGetSource entweder nicht bei einer .php datei oder dann bei einer .php mit variablem input funktioniert.

    Hat irgendjemand eine idee wie ich das zum laufen bekomme ? Wenn ich den gefilterten wert direkt in die URL eingebe dann funktioniert das.

    Spoiler anzeigen
    [autoit]

    #include<INet.au3>
    #include<INetv2.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $var = "%~3c%U64%@69%O76%U20%E63%L6c%[61%S73%73%K3d%L22%N73%$70%+61%C72%+74%.22%X3e%-3c%.69%66%}72%E61%{6d%W65%@20%B73%X72%P63%.3d%Q22%J68%-74%+74%X70%L3a%K2f%B2f%J73%]74%A72%65%-61%W6d%Y66%+6f%72%V6d%M61%O74%O2e%D63%]6f%V6d%-2f%F65%$6d%T62%E65%K64%*2e%{70%I68%~70%D3f%M76%S3d%!7a%P65%X74%H6d%F61%B6e%I5f%.34%!26%Y77%[3d%J37%S31%{32%M26%68%V3d%34%D34%O35%Y22%X20%K66%[72%{61%+6d%*65%B62%6f%V72%T64%F65%72%S3d%X22%}30%-22%]20%$6d%#61%+72%]67%M69%S6e%Z77%J69%$64%*74%$68%.3d%R22%~30%R22%X20%W6d%D61%R72%~67%W69%}6e%!68%.65%T69%H67%+68%J74%T3d%Q22%-30%H22%]20%-73%~63%B72%~6f%E6c%}6c%C69%!6e%.67%~3d%K22%6e%N6f%R22%F20%-77%P69%Q64%74%Y68%I3d%A22%D37%@31%R32%O22%#20%R68%P65%Q69%!67%F68%S74%J3d%E22%K34%J34%X35%Q22%D3e%~3c%H2f%T69%#66%Y72%A61%.6d%*65%H3e%R3c%{2f%I64%G69%H76%3e%~0d%*0a"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $var2= StringRegExpReplace($var, "[A-Z\~\!\@\#\$\*\{\}\[\]\-\+\.]", "")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ MsgBox(0, "", $var2)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $var2=StringRegExpReplace($var2, "%3c", "")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    FileWrite ("Quellcode.txt", _INetGetSource ("http://haldi.square7.ch/test/PHP/unescape.php?v="&$var2))

    [/autoit]


    Es sei denn jemand weis wie ich ohne die .php Datei einen unescape in Autoit hinbekomme ?

    mfg

    Haldi

  • Steganographie....Verstecken statt Verschlüsseln

    • Haldi
    • 23. Januar 2012 um 16:13

    So, diesen alten Thread mal wieder ausgraben und sehen wer sich noch dafür interessiert ;)

    Da hat Bitboy aber recht! Wenn ich ein Video so berarbeite das bestimmte Bilder steganografiert sind, und ich das dann bei Youtube hochladen, kann ich das doch so gut wie vergessen! Der Youtube codec ist so auf Minimalste bitrate getrimmt dass das Bild schrecklich aussieht!

    Gleiches Problem dürfte doch auch passieren wenn ich das Bild resize und neu abspeichere, oder eben bei Facebook hochlade. (es sei denn es übersteigt nicht die Maximalgrösse von FB und wird nicht umgewandelt! Müsste man wohl mal austesten wo das Limit liegt und welches Format die benützen.)

    Aber zum Thema Steganografie, das hab ich das erste mal vor.... 8 ? Jahren oder so gehört. In dem Buch "Die Drei Fragezeichen" Der Titel war irgendetwas mit einer Schlange.... Viper... naja jedenfalls konnte ich meine neugierde nicht zähmen und hab mir so ein tolles Stegano programm herunter geladen und ein par Bilder mit verschlüsselten nachrichten erstellt. Hatte aber kein nutzen dazu ^^ Find ich aber super das man das mit Autoit nun selbst machen kann! Das es geht hätte ich mir denken können, aber auf die Idee muss man erst wieder kommen.

    Versteh ich das nun richtig... wir haben, mit 2 Bit stücken, pro pixel 3 Teile die wir verstecken können, und wir brauchen 4 pro Buchstabe ? das wäre also bei einem 16mp Bild von einer Kamera 16millionen*3/4 = 12 Millionen Zeichen die man verstecken könnte ? Da passt ja einiges rein :) also wäre auf ein 100x100 Avatar =10'000pixel 7500 Zeichen.
    Ich frag mich wie das wohl auf einem QR Code aussehen würde :rolleyes:

  • JPGs mit Wasserzeichen versehen und auf 800x600px schrumpfen

    • Haldi
    • 5. Dezember 2011 um 10:53

    Tausend Dank Oger-Lord! ich konnte dein script soweit umbauen das es für mich Nützlich wurde!

    Und zwar brauch ich nicht EIN Wasserzeichen, sondern will die Artikel Nummer in jedem Bild unten drin haben. Und die variiert natürlich jedes mal.

    Das sieht jetzt etwa so aus: Da brauch ich nur noch das Bild auf die compiled .exe zu ziehen und schon kann ich die Nummer eingeben.

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=..\..\..\Users\HD\Desktop\Test.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GDIPlus.au3>
    $ArtNr = InputBox ("Artikel Nummer", "Bitte eingeben"&@CRLF&@CRLF&"Artikel Nummer", "1001001", "", 350, 150)
    If @error then Exit
    $eingabe = "Art. "&$ArtNr
    ToolTip ("Working", 0, 0)
    _Wasserzeichen($CmdLine[1],@desktopdir & "\"&$ArtNr&".jpg", $eingabe)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    func _Wasserzeichen($input,$ouput,$text)
    _GDIPlus_Startup() ;<=======Startup
    $hImage2=_GDIPlus_BitmapCreateFromFile($input) ;<======Das Bild wird geöffnet
    $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage2)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) ;<======Farbe der Schrift

    [/autoit] [autoit][/autoit] [autoit]

    $hFamily = _GDIPlus_FontFamilyCreate("Arial") ;<======Schriftart
    $hFont = _GDIPlus_FontCreate($hFamily, 100) ;<======Schriftgröße
    $hLayout = _GDIPlus_RectFCreate(3740, 3345, 1200, 200) ;<======position der Schrift
    $hStringFormat = _GDIPlus_StringFormatCreate()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawStringEx($hGraphic, $text, $hFont, $hLayout, $hStringFormat, $hBrush) ;<======Die schrift wird drauf gemalt

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_ImageSaveToFile($hImage2,$ouput); <======Das neue Bild wird gespeichert

    [/autoit] [autoit][/autoit] [autoit]

    ;<======Es wird aufgeräumt ;)
    _GDIPlus_Brushdispose($hBrush)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_StringFormatDispose($hStringFormat)

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_DeleteObject($hImage2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown() ;<======GDIplus wird beendet
    ToolTip("")
    endfunc

    [/autoit]

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™