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

Beiträge von chrisatack

  • Freigegebene Outlookkalender auslesen

    • chrisatack
    • 28. Mai 2020 um 08:28

    Hi..

    Danke nochmal water

    Für alle die die Erweiterten Rückgabemöglichkeiten suchen...

    MFG

    Chris ;)

    Aktionen
    AllDayEvent
    Anwendung
    Anlagen
    AutoResolvedWinner
    BillingInformation
    Body
    BusyStatus
    Kategorien
    Klasse
    Companies
    Conflicts
    ConversationID
    ConversationIndex
    ConversationTopic
    CreationTime
    DownloadState
    Dauer
    End
    EndInEndTimeZone
    EndTimeZone
    EndUTC
    EntryID
    ForceUpdateToAllAttendees
    FormDescription
    GetInspector
    GlobalAppointmentID
    Importance
    InternetCodepage
    IsConflict
    IsRecurring
    ItemProperties
    LastModificationTime
    Standort
    MarkForDownload
    MeetingStatus
    MeetingWorkspaceURL
    MessageClass
    Mileage
    NoAging
    OptionalAttendees
    Organisator
    OutlookInternalVersion
    OutlookVersion
    Parent
    PropertyAccessor
    Empfänger
    RecurrenceState
    ReminderMinutesBeforeStart
    ReminderOverrideDefault
    ReminderPlaySound
    ReminderSet
    ReminderSoundFile
    ReplyTime
    RequiredAttendees
    Ressourcen
    ResponseRequested
    ResponseStatus
    RTFBody
    Saved
    SendUsingAccount
    Sensitivity
    Session
    Size
    Start
    StartInStartTimeZone
    StartTimeZone
    StartUTC
    Betreff
    UnRead
    UserProperties
  • Freigegebene Outlookkalender auslesen

    • chrisatack
    • 27. Mai 2020 um 12:56

    Eines fehlt mir leider noch... Ich bekomme jetzt das ...

    Es fehlt mir jetzt noch der Inhalt aus dem Termin...dann läuft es perfekt!

    Muss ich das nochmal gesondert auslesen?

    LG

  • Freigegebene Outlookkalender auslesen

    • chrisatack
    • 27. Mai 2020 um 12:49
    Zitat von water

    Schau Dir die Start-/Endzeiten in meinem Beispiel (genauer die Vergleichsoperatoren) nochmals genauer an.

    Danke ;)

    Immer die kleinen ">" und "<" ....

  • Freigegebene Outlookkalender auslesen

    • chrisatack
    • 27. Mai 2020 um 12:24

    OK ich verstehe... das Objekt ist in der ersten Stelle gespeichert.....

    Bekomme aber leider immer noch kein richtiges Ergebnis...

    Code
    Global $oOutlook = _OL_Open()
    ;~ Global $aFolder = _OL_FolderAccess($oOutlook, "\\iCloud\calendar")
    Global $aFolder = _OL_FolderAccess($oOutlook, "iCloud\Arbeit ausführend", $olFolderCalendar)
    If @error <> 0 Then MsgBox(16, "", "@error = " & @error)
    ;~ _ArrayDisplay($aFolder )
    
    ;_OL_ItemFind($oOL, $vFolder, $iObjectClass = Default, $sRestrict = "", $sSearchName = "", $sSearchValue = "", $sReturnProperties = "", $sSort = "", $iFlags = 0, $sWarningClick = "")
    Global $aItems = _OL_ItemFind($oOutlook,$aFolder[1], $olAppointment,"[Start]='2020-05-26 00:00' And [End]='2020-05-26 23:59'" )
    If IsArray($aItems) Then
        _ArrayDisplay($aItems)
    Else
        MsgBox(48, "", "@error = " & @error & ", @extended: " & @extended)
    EndIf
    Alles anzeigen

    ergibt das...

    MFG Chris

  • Freigegebene Outlookkalender auslesen

    • chrisatack
    • 27. Mai 2020 um 11:56

    Hi water

    Danke. Das sieht schon einmal viel besser aus.

    Jetzt zeigt er mir bei ....

    Code
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "iCloud", $olFolderCalendar)
    If @error <> 0 Then MsgBox(16, "", "@error = " & @error)
    _ArrayDisplay($aFolder )

    Wenn ich jetzt eine suche starte mit z.b.

    Code
    Global $aItems = _OL_ItemFind($oOutlook, "iCloud", $olAppointment );"[Start]='2020-01-01 00:00' And [End]='2020-05-27 23:59'"
    If IsArray($aItems) Then
        _ArrayDisplay($aItems, "OutlookEX UDF: _OL_ItemFind Example Script - Unread mails")
    Else
        MsgBox(48, "", "@error = " & @error & ", @extended: " & @extended)
    EndIf

    bekomme ich ein Ergebnis

    was sagt mir das?

    Hier mal eine Übersicht wie der Kalender im Outlook aussieht ...

    Ich müsste hier alles Einträge für den aktuellen Tag aus dem Kalender "Arbeit ausführend" wissen.


    Vielen Dank schon einmal für deine Hilfe Water

    MFG

    Chris

  • Freigegebene Outlookkalender auslesen

    • chrisatack
    • 26. Mai 2020 um 13:08

    hi...

    Danke....

  • Freigegebene Outlookkalender auslesen

    • chrisatack
    • 26. Mai 2020 um 12:25

    Hallo Ihr Zwei...

    Sorry das ich einen so alten Post ausgrabe, aber er passt fast perfekt.

    Ich habe eigentlich das gleiche Problem wie Therion

    Ich würde gerne aus einem Kalender der aus einer ICloud im Outlook geöffnet ist die Termine auslesen.

    wenn ich mir bei dem entsprechendem Kalender die Eigenschaften anzeigen lasse ist unter Ort folgendes "\\iCloud"

    Wenn ich jetzt folgendes teste...

    C
    #include <OutlookEx\OutlookEX.au3>
    #include <Array.au3>
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "*",$olFolderCalendar)
    If @error <> 0 Then MsgBox(16, "", "@error = " & @error)
    _ArrayDisplay($aFolder )

    Bekomme ich als ergebnis:

    Das ist ja mein Kalender der auch unter Eigenschaften als "\\c.s****@******.de" ist...

    Aber wie finde ich jetzt die "iCloud" Kalender?


    Vielen Dank für die Antwort schon mal.

    MFG

    Chris ;)

  • Positionsmarkierungen ( Like QR-Code ) in Bild finden

    • chrisatack
    • 26. Juni 2017 um 09:43

    Hallo

    Ich arbeite schon mit _PixelSearch und nur noch in einem festen Bereich , aber mit einer angeblich etwas schnelleren Version

    AutoIt
    Func _GDIPlus_BitmapGetPixelEx($hBitmap, $iX, $iY)
        Local $tArgb, $pArgb, $aRet
        $tArgb = DllStructCreate("dword Argb")
        $pArgb = DllStructGetPtr($tArgb)
        $aRet = DllCall('gdiplus.dll', "int", "GdipBitmapGetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "ptr", $pArgb)
        Return  '0x'&StringTrimLeft(Hex(DllStructGetData($tArgb, "Argb")),8)
    EndFunc   ;==>GDIPlus_BitmapGetPixel
  • Positionsmarkierungen ( Like QR-Code ) in Bild finden

    • chrisatack
    • 26. Juni 2017 um 09:02

    Hallo

    Mal wieder nach langer Zeit ein Beitrag bzw. ein Hilferuf von mir.
    Ich habe mir eine spezielle Photobox gebaut, die aus einer großen Kiste besteht,
    in der sich die Personen hinein stellen und dann fotografiert werden.
    Damit der Effekt auch rüber kommt muss das Bild als ein Quadrat beschnitten werden.
    Anschließend wird mit einem Autoitscript nach Positionsmarkierungen ( im jetzigen Fall noch neongrüne Punkte ) gesucht.
    Leider ist durch unterschiedliche Lichtverhältnisse ( Tag zu Nacht ) trotz Blitzanlage aufgefallen das sich die Farben der Punkte so stark verändern
    das die Erkennung eine zu hohe Fehlerrate hat.

    Hierzu ein paar Bilder zum verstehen....

    Bild 1.jpg20170617_160036.jpg

    Daher würde ich gerne eine Ähnliche erkennung wie die Positionsmarkierungen in den QR-Codes einarbeiten,
    die nicht von Farben abhängig sondern von der Form erkannt wird.

    Wenn ich das richtig gesehen habe sind die qr-code reader, die ich in Autoit gesehen habe alle mittels dll eingebunden.
    D.h. man kommt nicht wirklich an eine einzelne Unterfunktion ran.
    Kann mir evtl. jemand einen Tipp geben wie man per GDI z.B. so etwas schnell ( am besten unter 1 sec ) erkennen könnte?

    Im Netz dazu finde ich auch nicht wirklich eine genaue Erklärung.
    Hier etwas, wie er aufgebaut ist .. http://www.keyence.com/ss/products/au…re/basic_2d/qr/


    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 6. März 2015 um 17:42

    Erster Post auf aktuellen Stand gebracht.

    Aktueller Stand ( 9 Beispiele :(

    TinkerForge_Bsp1_LCDHelloWorld
    TinkerForge_Bsp2_LCDProgessBar
    TinkerForge_Bsp3_FirstEvent
    TinkerForge_Bsp4_GetStackData
    TinkerForge_Bsp5_Poti
    TinkerForge_Bsp10_1_ServoBrick
    TinkerForge_Bsp10_2_ServoBrick_Event
    TinkerForge_Bsp11_1_StepperBrick
    TinkerForge_Bsp12_16IO

    Da es gerade mal ein sehr sehr kleiner Teil ist den ich übersetzen konnte ( sind jetzt schon über 3,2k Zeilen ) wäre es cool wenn jemand mit machen würde... naja...

    MFG Chris :D

  • FritzBox-Anrufmonitor über TCP

    • chrisatack
    • 1. Februar 2015 um 17:53

    Hey...

    Was zum Thema Fritzbox...
    Mir ist gerade aufgefallen das man über die Verbindung schönen nen Traffic Monitor bauen kann, der nicht nur den Traffic vom PC sondern von der Fritzbox ( komplettes Haus ) anzeigt...
    Sollte auf den meisten FritzBoxen funzen...

    Spoiler anzeigen
    [autoit]

    #include<string.au3>
    #include<array.au3>

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

    $FB_WANCommonInterface = 1
    $FB_Port = 49000
    $FB_IP = '192.168.178.1'

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

    Global $NewByteSendRate,$NewByteReceiveRate,$NewPacketSendRate,$NewPacketReceiveRate,$NewTotalBytesSent, _
    $NewTotalBytesReceived,$NewAutoDisconnectTime,$NewIdleDisconnectTime,$NewDNSServer1,$NewDNSServer2, _
    $NewVoipDNSServer1,$NewVoipDNSServer2,$NewUpnpControlEnabled,$NewRoutedBridgedModeBoth

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

    TCPStartup()
    $Conn = TCPConnect($FB_IP,$FB_Port)
    If @error Then
    MsgBox (16,"error","Kann nicht verbinden")
    EndIf

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

    While 1

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

    _FB_GetAddonInfos($Conn)
    ToolTip( 'NewByteSendRate: '&_ConvertSize($NewByteSendRate)&'/s'&@CRLF& _
    'NewByteReceiveRate: '&_ConvertSize($NewByteReceiveRate)&'/s'&@CRLF& _
    'NewTotalBytesSent: '&_ConvertSize($NewTotalBytesSent)&@CRLF& _
    'NewTotalBytesReceived: '&_ConvertSize($NewTotalBytesReceived)&@CRLF)

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

    Sleep ( 1000 )

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

    WEnd

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

    Func _FB_GetAddonInfos($Conn)

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

    $FB_POST_DATA = @crlf&'<?xml version="1.0"?>'&@crlf& _
    '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"'&@crlf& _
    's:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'&@crlf& _
    '<s:Body><u:GetAddonInfos xmlns:u="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:'&$FB_WANCommonInterface&'"></u:GetAddonInfos>'&@crlf& _
    '</s:Body>'&@crlf& _
    '</s:Envelope>'

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

    $FB_POST_HEADER='POST /upnp/control/WANCommonIFC1 HTTP/1.1'&@crlf& _
    'SOAPACTION: urn:schemas-upnp-org:service:WANCommonInterfaceConfig:'&$FB_WANCommonInterface&'#GetAddonInfos'&@crlf& _
    'Content-Type: text/xml; charset="utf-8"'&@crlf& _
    'User-Agent: AVM UPnP/1.0 Client 1.0'&@crlf& _
    'Host: fritz.box:'&$FB_Port&@crlf& _
    'Content-Length: '&StringLen($FB_POST_DATA)&@crlf& _
    'Expect: 100-continue'&@crlf& _
    'Connection: Keep-Alive'&@crlf&@crlf

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

    TCPSend ( $Conn, $FB_POST_HEADER )
    TCPSend ( $Conn, $FB_POST_DATA )

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

    $FB_Recv = TCPRecv($Conn,2048)

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

    $NewByteSendRate = _StringBetweenAsString($FB_Recv,'<NewByteSendRate>','</NewByteSendRate>')
    $NewByteReceiveRate = _StringBetweenAsString($FB_Recv,'<NewByteReceiveRate>','</NewByteReceiveRate>')
    $NewPacketSendRate = _StringBetweenAsString($FB_Recv,'<NewPacketSendRate>','</NewPacketSendRate>')
    $NewPacketReceiveRate = _StringBetweenAsString($FB_Recv,'<NewPacketReceiveRate>','</NewPacketReceiveRate>')
    $NewTotalBytesSent = _StringBetweenAsString($FB_Recv,'<NewTotalBytesSent>','</NewTotalBytesSent>')
    $NewTotalBytesReceived = _StringBetweenAsString($FB_Recv,'<NewTotalBytesReceived>','</NewTotalBytesReceived>')
    $NewAutoDisconnectTime = _StringBetweenAsString($FB_Recv,'<NewAutoDisconnectTime>','</NewAutoDisconnectTime>')
    $NewIdleDisconnectTime = _StringBetweenAsString($FB_Recv,'<NewIdleDisconnectTime>','</NewIdleDisconnectTime>')
    $NewDNSServer1 = _StringBetweenAsString($FB_Recv,'<NewIdleDisconnectTime>','</NewDNSServer1>')
    $NewDNSServer2 = _StringBetweenAsString($FB_Recv,'<NewDNSServer2>','</NewDNSServer2>')
    $NewVoipDNSServer1 = _StringBetweenAsString($FB_Recv,'<NewVoipDNSServer1>','</NewVoipDNSServer1>')
    $NewVoipDNSServer2 = _StringBetweenAsString($FB_Recv,'<NewVoipDNSServer2>','</NewVoipDNSServer2>')
    $NewUpnpControlEnabled = _StringBetweenAsString($FB_Recv,'<NewUpnpControlEnabled>','</NewUpnpControlEnabled>')
    $NewRoutedBridgedModeBoth = _StringBetweenAsString($FB_Recv,'<NewRoutedBridgedModeBoth>','</NewRoutedBridgedModeBoth>')

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

    EndFunc

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

    Func _StringBetweenAsString($String,$start,$end)

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

    $return = _StringBetween($String,$start,$end)
    If @error Or Not IsArray($return) Then
    SetError( 1,0,'' )
    Else
    Return $return[0]
    EndIf

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

    EndFunc

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

    ; THX crzftx @ http://www.autoitscript.com/forum/topic/63…ile-size-in-mb/
    Func _ConvertSize($inputSize, $inputUnit = 0, $outputPlaces = 2, $outputString = True, $inputBits = False, $outputBits = False, $outputUnit = -4)
    Local $unitNames[9] = ["","K","M","G"]
    Local $bytes = $inputSize * 1024 ^ $inputUnit
    Local $b = "B"

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

    If $inputBits Then $bytes /= 8
    If $outputBits Then
    $bytes *= 8
    $b = "b"
    EndIf
    If $outputUnit < 0 Then
    Local $outputMax = Abs($outputUnit)
    $outputUnit = Int(Log($bytes)/Log(1024))
    If $outputUnit > $outputMax Then $outputUnit = $outputMax
    EndIf
    If $outputString Then
    Return String(Round($bytes / 1024 ^ $outputUnit, $outputPlaces)) & $unitNames[$outputUnit] & $b
    Else
    Return Round($bytes / 1024 ^ $outputUnit, $outputPlaces)
    EndIf
    EndFunc

    [/autoit]

    Gleich mal in die UDF fürs Display von Tinkerforge machen *muhahahaha*

    MFG Chris :D

  • FritzBox-Anrufmonitor über TCP

    • chrisatack
    • 1. Februar 2015 um 13:26

    Hey...

    7170 läuft perfekt!

    MFG Chris :D

  • _ArrayDisplayConsole v0.92 build 2015-01-25 beta

    • chrisatack
    • 1. Februar 2015 um 12:39
    Zitat von UEZ

    Es kommt auf die Anwendung an. Z.B. kannst du _ArrayDisplay in einer WM Funktion vergessen, wenn du ein Array debuggen willst.

    UEZ perfekt danke...

    Passt sehr gut hier hin... Bei dem Post wegen dem _ArrayDisplay im eingenen EventMode.

    Hardware Baukasten Tinkerforge

    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 31. Januar 2015 um 17:32

    Erster Post auf aktuellen Stand gebracht ( 5 Beispiele :(

    TinkerForge_Bsp1_LCDHelloWorld
    TinkerForge_Bsp2_LCDProgessBar
    TinkerForge_Bsp3_FirstEvent
    TinkerForge_Bsp4_GetStackData
    TinkerForge_Bsp5_Poti

    Wenn jemand noch Ideen und weitere Anregungen hat immer raus damit!

    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 24. Januar 2015 um 22:08

    Hey Andy

    Zitat von Andy

    Keinesfalls darfst du Events blocken!

    Noch eine Frage.
    Warum ist das mit dem Blocken so?
    Es klappt eigentlich alles in den Events bis auf _ArrayDisplay() warum?
    Das hier bleibt hängen...

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Global Const $FD_READ = 1
    Global Const $FD_WRITE = 2
    Global Const $FD_OOB = 4
    Global Const $FD_ACCEPT = 8
    Global Const $FD_CONNECT = 16
    Global Const $FD_CLOSE = 32
    Global $hWs2_32 = -1

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

    TCPStartup()
    $iListenSocket = TCPListen ( '127.0.0.1', 4222 )

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

    Do
    $iSocket = TCPAccept($iListenSocket)
    Until $iSocket <> -1
    TCPCloseSocket($iListenSocket)

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

    $__TCP_WINDOW = GUICreate("GUIRegisterMsg")
    $hWs2_32 = DllOpen( "Ws2_32.dll" )
    DllCall( $hWs2_32,"int", "WSAAsyncSelect", "uint", $iSocket, "hwnd", $__TCP_WINDOW, "uint", 0x0400, "int", $FD_READ )
    GUIRegisterMsg( 0x0400, "Event" )

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

    While 1
    Sleep(5)
    WEnd

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

    Func Event($hWnd, $iMsgID, $WParam, $LParam)
    $sDataBuff = TCPRecv($iSocket, 1024)
    Local $aArray_Base[2] = ["Org Item 0", "Org item 1"]
    _ArrayDisplay($aArray_Base, "1D - Base array")

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

    DllCall( $hWs2_32,"int", "WSAAsyncSelect", "uint", $iSocket, "hwnd", $__TCP_WINDOW, "uint", 0x0400, "int", $FD_READ )
    EndFunc

    [/autoit]

    Mache ich das hier bei Opt("GUIOnEventMode",1 ) klappt es ja auch...in etwa so....

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <array.au3>

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

    Opt("GUIOnEventMode", 1) ; Change to OnEvent mode

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

    Local $hMainGUI = GUICreate("Hello World", 200, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEButton")
    GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
    Local $iOKButton = GUICtrlCreateButton("OK", 70, 50, 60)
    GUICtrlSetOnEvent($iOKButton, "OKButton")
    GUISetState(@SW_SHOW, $hMainGUI)

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

    While 1
    Sleep(100) ; Sleep to reduce CPU usage
    WEnd

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

    Func OKButton()
    ; Note: At this point @GUI_CtrlId would equal $iOKButton,
    ; and @GUI_WinHandle would equal $hMainGUI
    Local $aArray_Base[2] = ["Org Item 0", "Org item 1"]
    _ArrayDisplay($aArray_Base, "1D - Base array")
    EndFunc ;==>OKButton

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

    Func CLOSEButton()
    ; Note: At this point @GUI_CtrlId would equal $GUI_EVENT_CLOSE,
    ; and @GUI_WinHandle would equal $hMainGUI
    MsgBox(0, "GUI Event", "You selected CLOSE! Exiting...")
    Exit
    EndFunc ;==>CLOSEButton

    [/autoit]

    Gibts da irgendeine Möglichkeit?

    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 24. Januar 2015 um 12:21

    Perfekt... Danke Andy..
    Ja Hausaufgaben auf jeden fall :thumbup: ... vor allem das ordentlich in die UDF einzubauen..
    Vielen Dank ihr beiden...

    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 24. Januar 2015 um 00:32

    Hey Andy

    Danke für die Hilfe...
    Ich konnte jetzt etwas weiter kommen. Zumindestens wird das Event jetzt 1x aufgerufen.
    Aber leider nicht öfters... Wo könnte mein Fehler liegen?

    Hier der Dummy der die Daten sendet..

    Spoiler anzeigen
    [autoit]


    TCPStartup()
    $hConn = TCPConnect('127.0.0.1',4222)
    If @error Then
    MsgBox(16,@error,"TCP Connect Error")
    Exit
    EndIf

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

    $i = 0
    Do

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

    $i += 1
    ToolTip("Sende Msg "&$i)
    Sleep ( 1000 )
    TCPSend($hConn,@HOUR&':'&@MIN&':'&@SEC)
    If @error Then
    MsgBox(16,@error,"TCP Send Error")
    Exit
    EndIf

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

    Until $i > 40

    [/autoit]

    und hier der Empfang mit der Event Func

    Spoiler anzeigen
    [autoit]

    Global Const $FD_READ = 1
    Global Const $FD_WRITE = 2
    Global Const $FD_OOB = 4
    Global Const $FD_ACCEPT = 8
    Global Const $FD_CONNECT = 16
    Global Const $FD_CLOSE = 32
    Global $hWs2_32 = -1

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

    TCPStartup()
    $iListenSocket = TCPListen ( '127.0.0.1', 4222 )

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

    Do
    $iSocket = TCPAccept($iListenSocket)
    Until $iSocket <> -1
    TCPCloseSocket($iListenSocket)

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

    $__TCP_WINDOW = GUICreate("GUIRegisterMsg")
    $hWs2_32 = DllOpen( "Ws2_32.dll" )
    DllCall( $hWs2_32,"int", "WSAAsyncSelect", "uint", $iSocket, "hwnd", $__TCP_WINDOW, "uint", 0x0400, "int", $FD_WRITE )
    GUIRegisterMsg( 0x0400, "Event" )

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

    While 1
    Sleep(5)
    WEnd

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

    Func Event($hWnd, $iMsgID, $WParam, $LParam)
    $sDataBuff = TCPRecv($iSocket, 1024)
    MsgBox(0,"",$sDataBuff)
    EndFunc

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

    Danke schonmal...

    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 23. Januar 2015 um 17:38

    Hi..

    Nein das ist richtig... wäre viel zu aufwändig.. aber das brauchst du ja auch überhaupt nicht.
    Im Prinzip hat das was ich brauche und mein Problem ist, ja auch nicht mehr mit Tinkerforge zu tun.
    Wir brauchen nur einen Weg eine TcpOnRecvEvent Funktion, die auf das normale TCPConnect() aufsattelt zu bauen.
    Den Rest mache ich alleine...

    Ich hab mal etwas getestet...
    Das hier ist der Test-Dummy der TF ersetzt und einfach eine TCP Conn aufbaut und ein Datenpaket verschickt

    Spoiler anzeigen
    [autoit]


    TCPStartup()
    $hConn = TCPConnect('127.0.0.1',4222)
    If @error Then
    MsgBox(16,@error,"TCP Connect Error")
    Exit
    EndIf

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

    TCPSend($hConn,@HOUR&':'&@SEC)
    If @error Then
    MsgBox(16,@error,"TCP Send Error")
    Exit
    EndIf

    [/autoit]


    Den am besten compilieren weil man nicht zwei Scripts gleichzeitig laufen lassen kann. ( Oder ich nur nicht weiß das das in Scite geht ;) )
    Wenn man jetzt das zweite Script startet... und dann den Dummy startet...

    Spoiler anzeigen
    [autoit]

    Global Const $FD_READ = 1
    Global Const $FD_WRITE = 2
    Global Const $FD_OOB = 4
    Global Const $FD_ACCEPT = 8
    Global Const $FD_CONNECT = 16
    Global Const $FD_CLOSE = 32
    Global $hWs2_32 = -1

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

    Global Const $TCP_SEND = 1
    Global Const $TCP_RECEIVE = 2
    Global Const $TCP_CONNECT = 4
    Global Const $TCP_DISCONNECT = 8
    Global Const $TCP_NEWCLIENT = 16

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

    TCPStartup()
    Global Const $__TCP_WINDOW = GUICreate("Async Sockets UDF")
    Global $__TCP_SOCKETS[1][7]

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

    $hServer = _TCP_Server_Create(4222,'127.0.0.1')
    _TCP_RegisterEvent($hServer, $TCP_RECEIVE, "Buffer")

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

    While 1
    Sleep(5)
    ;~ MsgBox(0,"",55 )
    ;~ Exit
    WEnd

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

    Func Buffer($hSocket,$aData,$error)
    Call("Event",$aData)
    EndFunc

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

    Func Event($aData)
    MsgBox(0,0,$aData )
    Exit
    EndFunc

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

    ;##################################################################################################

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

    Func _TCP_Server_Create($iPort, $sIP="0.0.0.0")

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

    Local $hListenSocket = ___ASocket()
    ___ASockSelect( $hListenSocket, $__TCP_WINDOW, 0x0400, $FD_ACCEPT)
    GUIRegisterMsg( 0x0400, "___TCP_OnAccept" )
    ___ASockListen( $hListenSocket, $sIP, $iPort )
    $__TCP_SOCKETS[0][0] = $hListenSocket
    $__TCP_SOCKETS[0][1] = 0x0400
    Return $hListenSocket

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

    EndFunc

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

    Func ___TCP_OnAccept($hWnd, $iMsgID, $WParam, $LParam)

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

    Local $hSocket = $WParam
    Local $iError = ___HiWord( $LParam )
    Local $iEvent = ___LoWord( $LParam )
    Local $hClient, $uBound

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

    Abs($hWnd) ; Stupid AU3Check...

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

    If $iMsgID = $__TCP_SOCKETS[0][1] Then

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

    If $iEvent = $FD_ACCEPT Then

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

    If Not $iError Then

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

    ReDim $__TCP_SOCKETS[UBound($__TCP_SOCKETS)+1][7]
    $uBound = UBound($__TCP_SOCKETS)

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

    $hClient = TCPAccept($hSocket)

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

    ___ASockSelect($hClient, $__TCP_WINDOW, 0x0400 + $uBound - 1, BitOR($FD_READ, $FD_WRITE, $FD_CLOSE))
    GUIRegisterMsg(0x0400 + $uBound - 1, "___TCP_Server_OnSocketEvent" )

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

    $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][0] = $hClient
    $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][1] = 0x0400 + $uBound - 1

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

    Call($__TCP_SOCKETS[0][6], $hClient, $iError)

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

    Else

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

    Call($__TCP_SOCKETS[0][6], 0, $iError)

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

    EndIf

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

    ElseIf $iEvent = $FD_CONNECT Then

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

    Call($__TCP_SOCKETS[0][4], $hSocket, $iError)

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

    EndIf

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

    EndIf

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

    EndFunc

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

    Func ___TCP_Server_OnSocketEvent( $hWnd, $iMsgID, $WParam, $LParam )

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

    Local $hSocket = $WParam
    Local $iError = ___HiWord( $LParam )
    Local $iEvent = ___LoWord( $LParam )

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

    Local $sDataBuff, $iElement, $i

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

    Abs($hWnd)

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

    $hSocket = 0
    $iElement = 0

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

    For $i = 1 to UBound($__TCP_SOCKETS)-1

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

    If $__TCP_SOCKETS[$i][1] = $iMsgID Then
    $hSocket = $__TCP_SOCKETS[$i][0]
    $iElement = $i
    ExitLoop
    EndIf

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

    Next

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

    If $hSocket Then

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

    Switch $iEvent
    Case $FD_READ

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

    $sDataBuff = TCPRecv($hSocket, 1024)

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

    Call($__TCP_SOCKETS[0][2], $hSocket, $sDataBuff, $iError)

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

    Case $FD_WRITE

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

    Call($__TCP_SOCKETS[0][3], $hSocket, $iError)

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

    Case $FD_CLOSE

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

    ___ASockShutdown($hSocket)
    TCPCloseSocket($hSocket)

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

    Call($__TCP_SOCKETS[0][5], $hSocket, $iError)

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

    ___ArrayDelete($__TCP_SOCKETS, $iElement)

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

    EndSwitch

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

    EndIf

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

    EndFunc

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

    Func _TCP_RegisterEvent($hSocket, $iEvent, $sFunction)

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

    Local $iSelected = 0
    Local $i

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

    If $__TCP_SOCKETS[0][0] Then

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

    $iSelected = 0

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

    Else

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

    For $i = 0 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][0] = $hSocket Then
    $iSelected = $i
    ExitLoop
    EndIf
    Next

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

    If Not $iSelected Then Return 0

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

    EndIf

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

    Switch $iEvent
    Case $TCP_SEND
    $__TCP_SOCKETS[$iSelected][3] = $sFunction
    Case $TCP_RECEIVE
    $__TCP_SOCKETS[$iSelected][2] = $sFunction
    Case $TCP_CONNECT
    $__TCP_SOCKETS[$iSelected][4] = $sFunction
    Case $TCP_DISCONNECT
    $__TCP_SOCKETS[$iSelected][5] = $sFunction
    Case $TCP_NEWCLIENT
    $__TCP_SOCKETS[$iSelected][6] = $sFunction
    Case Else
    Return False
    EndSwitch

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

    Return True

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

    EndFunc

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

    ;==================================================================================================================
    ;
    ; Zatorg's Asynchronous Sockets UDF Starts from here.
    ;
    ;==================================================================================================================

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

    Func ___ASocket($iAddressFamily = 2, $iType = 1, $iProtocol = 6)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $hSocket = DllCall($hWs2_32, "uint", "socket", "int", $iAddressFamily, "int", $iType, "int", $iProtocol)
    If @error Then
    SetError(1, @error)
    Return -1
    EndIf
    If $hSocket[ 0 ] = -1 Then
    SetError(2, ___WSAGetLastError())
    Return -1
    EndIf
    Return $hSocket[ 0 ]
    EndFunc ;==>_ASocket

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

    Func ___ASockShutdown($hSocket)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall($hWs2_32, "int", "shutdown", "uint", $hSocket, "int", 2)
    If @error Then
    SetError(1, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    Return True
    EndFunc ;==>_ASockShutdown

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

    Func ___ASockClose($hSocket)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall($hWs2_32, "int", "closesocket", "uint", $hSocket)
    If @error Then
    SetError(1, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    Return True
    EndFunc ;==>_ASockClose

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

    Func ___ASockSelect($hSocket, $hWnd, $uiMsg, $iEvent)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall( _
    $hWs2_32, _
    "int", "WSAAsyncSelect", _
    "uint", $hSocket, _
    "hwnd", $hWnd, _
    "uint", $uiMsg, _
    "int", $iEvent _
    )
    If @error Then
    SetError(1, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    Return True
    EndFunc ;==>_ASockSelect

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

    ; Note: you can see that $iMaxPending is set to 5 by default.
    ; IT DOES NOT MEAN THAT DEFAULT = 5 PENDING CONNECTIONS
    ; 5 == SOMAXCONN, so don't worry be happy
    Func ___ASockListen($hSocket, $sIP, $uiPort, $iMaxPending = 5); 5 == SOMAXCONN => No need to change it.
    Local $iRet
    Local $stAddress

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

    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )

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

    $stAddress = ___SockAddr($sIP, $uiPort)
    If @error Then
    SetError(@error, @extended)
    Return False
    EndIf

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

    $iRet = DllCall($hWs2_32, "int", "bind", "uint", $hSocket, "ptr", DllStructGetPtr($stAddress), "int", DllStructGetSize($stAddress))
    If @error Then
    SetError(3, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    $stAddress = 0; Deallocate
    SetError(4, ___WSAGetLastError())
    Return False
    EndIf

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

    $iRet = DllCall($hWs2_32, "int", "listen", "uint", $hSocket, "int", $iMaxPending)
    If @error Then
    SetError(5, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    $stAddress = 0; Deallocate
    SetError(6, ___WSAGetLastError())
    Return False
    EndIf

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

    Return True
    EndFunc ;==>_ASockListen

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

    Func ___ASockConnect($hSocket, $sIP, $uiPort)
    Local $iRet
    Local $stAddress

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

    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )

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

    $stAddress = ___SockAddr($sIP, $uiPort)
    If @error Then
    SetError(@error, @extended)
    Return False
    EndIf

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

    $iRet = DllCall($hWs2_32, "int", "connect", "uint", $hSocket, "ptr", DllStructGetPtr($stAddress), "int", DllStructGetSize($stAddress))
    If @error Then
    SetError(3, @error)
    Return False
    EndIf

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

    $iRet = ___WSAGetLastError()
    If $iRet = 10035 Then; WSAEWOULDBLOCK
    Return True; Asynchronous connect attempt has been started.
    EndIf
    SetExtended(1); Connected immediately
    Return True
    EndFunc ;==>_ASockConnect

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

    ; A wrapper function to ease all the pain in creating and filling the sockaddr struct
    Func ___SockAddr($sIP, $iPort, $iAddressFamily = 2)
    Local $iRet
    Local $stAddress

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

    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )

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

    $stAddress = DllStructCreate("short; ushort; uint; char[8]")
    If @error Then
    SetError(1, @error)
    Return False
    EndIf

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

    DllStructSetData($stAddress, 1, $iAddressFamily)
    $iRet = DllCall($hWs2_32, "ushort", "htons", "ushort", $iPort)
    DllStructSetData($stAddress, 2, $iRet[ 0 ])
    $iRet = DllCall($hWs2_32, "uint", "inet_addr", "str", $sIP)
    If $iRet[ 0 ] = 0xffffffff Then; INADDR_NONE
    $stAddress = 0; Deallocate
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    DllStructSetData($stAddress, 3, $iRet[ 0 ])

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

    Return $stAddress
    EndFunc ;==>__SockAddr

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

    Func ___WSAGetLastError()
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall($hWs2_32, "int", "WSAGetLastError")
    If @error Then
    ;ConsoleWrite("+> _WSAGetLastError(): WSAGetLastError() failed. Script line number: " & @ScriptLineNumber & @CRLF)
    SetExtended(1)
    Return 0
    EndIf
    Return $iRet[ 0 ]
    EndFunc ;==>_WSAGetLastError

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

    ; Got these here:
    ; http://www.autoitscript.com/forum/index.ph…620&hl=MAKELONG
    Func ___MakeLong($LoWord, $HiWord)
    Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF)); Thanks Larry
    EndFunc ;==>_MakeLong

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

    Func ___HiWord($Long)
    Return BitShift($Long, 16); Thanks Valik
    EndFunc ;==>_HiWord

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

    Func ___LoWord($Long)
    Return BitAND($Long, 0xFFFF); Thanks Valik
    EndFunc ;==>_LoWord

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

    ; ========================================= Array functions

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _ArrayDelete
    ; Description ...: Deletes the specified element from the given array.
    ; Syntax.........: _ArrayDelete(ByRef $avArray, $iElement)
    ; Parameters ....: $avArray - Array to modify
    ; $iElement - Element to delete
    ; Return values .: Success - New size of the array
    ; Failure - 0, sets @error to:
    ; |1 - $avArray is not an array
    ; |3 - $avArray has too many dimensions (only up to 2D supported)
    ; |(2 - Deprecated error code)
    ; Author ........: Cephas <cephas at clergy dot net>
    ; Modified.......: Jos van der Zande <jdeb at autoitscript dot com> - array passed ByRef, Ultima - 2D arrays supported, reworked function (no longer needs temporary array; faster when deleting from end)
    ; Remarks .......: If the array has one element left (or one row for 2D arrays), it will be set to "" after _ArrayDelete() is used on it.
    ; Related .......: _ArrayAdd, _ArrayInsert, _ArrayPop, _ArrayPush
    ; Link ..........;
    ; Example .......; Yes
    ; ===============================================================================================================================
    Func ___ArrayDelete(ByRef $avArray, $iElement)
    If Not IsArray($avArray) Then Return SetError(1, 0, 0)

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

    Local $iUBound = UBound($avArray, 1) - 1

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

    If Not $iUBound Then
    $avArray = ""
    Return 0
    EndIf

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

    ; Bounds checking
    If $iElement < 0 Then $iElement = 0
    If $iElement > $iUBound Then $iElement = $iUBound

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

    ; Move items after $iElement up by 1
    Switch UBound($avArray, 0)
    Case 1
    For $i = $iElement To $iUBound - 1
    $avArray[$i] = $avArray[$i + 1]
    Next
    ReDim $avArray[$iUBound]
    Case 2
    Local $iSubMax = UBound($avArray, 2) - 1
    For $i = $iElement To $iUBound - 1
    For $j = 0 To $iSubMax
    $avArray[$i][$j] = $avArray[$i + 1][$j]
    Next
    Next
    ReDim $avArray[$iUBound][$iSubMax + 1]
    Case Else
    Return SetError(3, 0, 0)
    EndSwitch

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

    Return $iUBound
    EndFunc ;==>_ArrayDelete

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


    passiert genau das was ich brauche. Eine Anfrage über TCP wird anscheinend über GUIRegisterMsg() und einen Dummy Gui abgefangen und daher als Event ausgegeben.
    Anscheinend wird aber hier irgendwas anders gemacht als das Hauseigene TCP von Autoit. Dahinter muss ich noch kommen und am besten auch wie das ganze klappt und wie ich das etwas smarter in die UDF einbauen kann...

    Naja ich teste mal weiter...
    Wenn jemand anderes noch was weiß immer raus damit ...

    EDIT: Was bedeutet z.B. GUIRegisterMsg( 0x0400, "___TCP_OnAccept" ). Also was bringt hier die 0x0400

    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 23. Januar 2015 um 13:15

    Hey..

    Zitat von BugFix

    EDIT: Oops, jetzt hatte ich deinen Spoiler gar nicht gelesen - ich schaue es mir nochmal genauer an.

    Ja jetzt glaube ich hast du mich verstanden ;)
    Da das ganze ja eine UDF werden soll möchte ich den Nuter der UDF ja nicht damit beschäftigen das er danach schaut ob ein Aktion von TF anliegt.
    Es muss ja auch nicht immer eine Antwort auf eine Abfrage der UDF sein. Es kann ja auch ein Tastendruck eines Tasters von TF sein.

    Der Beitrag auf http://www.autoitscript.com/forum/topic/74…f-event-driven/ kommt dem ganzen schon recht nahe.
    Aber leider sehr verstrickt. Das muss man doch irgendwie smarter lösen können.
    Es müsste ja nur eine Buffer() Funktion ausgelöst werden sobald ein TCP Paket rein kommt..das würde mir reichen...
    Sowas wie

    [autoit]

    TcpRecvEvent($Conn,"_DeineFunktion")

    [/autoit]

    Ich habe mit der UDF aus dem Englischen Forum etwas rumgespielt und es hinbekommen das sogar wenn das eigentliche Programm an einer MsgBox wartet,
    die Funktion durch ein TCP Paket aufgerufen wird. Aber dann funktioniert der Rest meiner UDF nicht mehr, da der Socked da irgendwie anders aufgebaut wird. Mit DLLs oder so...

    MFG Chris :D

  • Hardware Baukasten Tinkerforge

    • chrisatack
    • 21. Januar 2015 um 00:00

    Hey BugFix

    Danke für die lehrreiche Stunde :thumbup: . Wie immer mal wieder was dazu gelernt.
    Wenn dem so ist, habe ich den Begriff "CallBack" in der Hinsicht bis jetzt falsch interpretiert.
    Daher weiß ich jetzt, das es nicht das ist was ich suche / brauche.

    Das was ich brauche ist dann eher doch was in Richtung GUIRegisterMsg()
    Es geht ja darum wenn eine Antwort von Tinkerforge mittels TCP kommt, das dann eine Funktion ausgelöst wird.
    Die Idee ist es hier hin zu kommen...

    Spoiler anzeigen
    [autoit]

    _TF_EventMode(True); Ab jetzt werden Funktionen Automatisch aufgerufen Wenn ein Event von TF mittels TCP kommt
    _TF_SetOnEvent_BrickletLCD20x4_Button0_Pressed($TF_BrickletLCD20x4_UID,'_MeineLCDButtonFunktion_Button0'); Wenn man den Taster am Dispay drückt, dann Funktion '_MeineLCDButtonFunktion_Button0' aufrufen

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

    While 1
    Sleep(10)
    WEnd

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

    Func _MeineLCDButtonFunktion_Button0()
    _TF_BrickletLCD20x4_Backlight($TFc,$TF_BrickletLCD20x4_UID ); Hintergrundlich des Displays einschalten

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

    EndFunc

    [/autoit]


    Wie realisiere ich so etwas?

    Edit: Mit AdlibRegister() habe ich schon getestet, aber das läuft irgendwie unrund...
    Edit2: Gefunden habe ich das hier bis jetzt... http://www.autoitscript.com/forum/topic/35389-tcp-event-mode/

    Wie immer vielen Dank schon einmal für eine Antwort...

    MFG Chris :D

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™