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

Beiträge von Automatisator

  • Gui in Gui Artefakte... :(

    • Automatisator
    • 22. Mai 2012 um 18:26

    chip
    an GraKa kann es nicht liegen, getestet habe ich einmal mit ATI und mit Nvidia....

    autoBert
    benutzt Du andere die Stabile version von Autoit, oder die Beta Version?
    welche GraKa?

    @DeepRed
    wie bekomme ich das Ding mit dem unschönen Problem im Einsatz? :)
    _WinAPI_RedrawWindow müsste eigentlich dann einsetzen wenn ich das child Fenster bewege , nur wie macht man das? :(

    ich dachte, ich mache es einfach in While schleife, so:
    ...
    _WinAPI_RedrawWindow($Child_GUI)
    ...
    doch dann ist es noch unschöner, es flackert... :(
    wenn es bei manche geht und bei andere nicht, dann muss es doch irgendwo Unterschiede geben? :(

  • Gui in Gui Artefakte... :(

    • Automatisator
    • 21. Mai 2012 um 21:16

    Hallo an Alle

    es geht um diesen Beispiel: [ offen ] Parent- und Child-GUI

    folgendes Problem:
    [Blockierte Grafik: http://imageshack.us/photo/my-images/41/problemxx.jpg]
    passiert nur beim verschieben, oder wenn man Fenster einmal minimiert und dann wieder maximiert und verschiebt... :(
    woran liegt das?
    ich habe es auf WinXP, und Win 7 getestet, auf beide BS kommt es zu diese komische Artefakte :(

    Danke im vorraus für Antwort.

    LG,
    Automatisator

  • TCPSend und TCPRecv ?

    • Automatisator
    • 21. Mai 2012 um 16:48
    Zitat von m-obi

    Sonst würde er die byteangabe in ASCII umwandeln und ein Zeichen interpretieren. Das 0x00 sagt ihm, das ist die Größe des Pakets.

    also, ich weiß leider immer noch nicht wie man das einstellt :(

    1. nicht ASCII sondern Byte
    ich verstehe das so; statt TCPSend($Socket, ???, 1) = Binärdaten versenden
    da wo drei Fragezeichen ist, kommt dann 0x00,oder?
    wie empfange ich die richtige Bytes nun? (so das wirklich kein Byte verloren/abgeschnitten ist...)
    TCPRecv ist in While schleife, also:

    While 1
    $recv = ""
    $recv &= TCPRecv($Socket, 1024)
    ; man kann es nun so machen
    If StringInString($recv, "DATA") Then ....
    ; andere Alternative, man sendet statt einmal "DATA" mehrere DATA (TCPSend($Socket, "DATA|DATA|DATA|DATA" )
    If $recv <> "" Then
    $split = StringSplit($recv, "|")
    _ArrayDisplay($split)
    EndIf
    WEnd

    @m-obi 
    man findet nirgends eine Beschreibung wie man das mit 0x00 macht... :( Hoffe Du zeigst es uns....?

    LG,
    Automatisator

  • TCPSend und TCPRecv ?

    • Automatisator
    • 20. Mai 2012 um 22:34
    Zitat von Death

    also protokolle machen das so:
    Bevor man die wirklichen daten versendet, schickt man nen integer vorraus, welcher die Anzahld er kommenden bytes enthält. also sagen wir so:
    Als 1. schickten wir die zahl 4 und danach DATA

    Der empfänger empfängt die 4, wieß somit das das paket nun aus 4 zeichen ebsteht und liest diese 4 nur ein (TCPREcv, kannst du ja sagen wiviele bytes er lesen soll)
    und nach den 4 bytes weiß er, dass die nachricht fertig ist, und dann erwartet er wieder nen integer, um das nächste paker auszulesen.

    Also Bsp:
    15IchBinEinString5Hallo <-ist in der leitung(andersrum halt, erst zahl dann buchstaben)
    TCP_recv liest integer ein(4byte) wertet den aus und liest dann soviel bytes wie im integer angegeben ist, etc.

    guter Tipp ... Danke...! :)


    Zitat

    Aber ich würde den Integer nicht als ASCII senden sonder als Byte. Und davor eine Befehl z.b. 0x00. Dann weiß er, dass es sich um die Größe des nächsten Paketes handelt.

    ok, das mit, nicht als ASCII, sondern als Byte verstehe ich, aber das: "Und davor eine Befehl z.b. 0x00.
    Dann weiß er ..." ist mir unklar?

  • TCPSend und TCPRecv ?

    • Automatisator
    • 20. Mai 2012 um 22:12
    Zitat von m-obi

    Wenn du es sauber programmieren willst, mach es mit einem Vergleich.

    also nochmal: TCPSend sendet DATADATADATA...

    die frage ist jetzt, wie ich (beim Client-Script) nur einmal DATA herausfiltere, da gibt es verschiedene alternativen

    1. man nimmt nur die ersten 4 Buchstaben (StringLeft)
    (nicht ausprobiert, es müsste aber funktionieren...)

    2. man sendet 4x DATA mit "|" (seperator), TCPRecv empfängt dies, und speichert es in $array = StringSplit($recv, "|")
    funktioniert alles wunderbar...


    While 1
    Local $recv = 0
    $recv = TCPRecv($iSocket, 1024)
    If @error Then Exit
    If $recv <> "" Then

    Local $split = StringSplit($recv, "|")

    If Not $split[4] Then ContinueLoop

    MsgBox(0, "TCPRecv", "Ausgefiltert: " & $split[4])
    ExitLoop

    EndIf
    Sleep(100)
    WEnd


    Gruss,
    Automatisator

  • TCPSend und TCPRecv ?

    • Automatisator
    • 20. Mai 2012 um 14:59
    Zitat von m-obi

    Ach jetzt versteh ich. Wenn TCPRecv dasselbe empfängt soll er es nur einmal ausgeben? Also musst du das aktuelle Empfangene mit dem letzten vergleichen.

    ok, so geht es auch....

    ich habe das jetzt so gemacht: wenn Button geklickt wird macht TCPSend "DATA|DATA|DATA|DATA"
    Client (TCPRecv) empfängt das ganze, zerteilt es StringSplit($recv , "|") und speichert das ganze in davor gesetzte $array

    $array[1] enthält nun einmal "DATA" ....

    kannst Du mir nur ein Beispiel/Tipp geben wie das mit Button und Timer funktioniert?
    Danke Dir...! :)

    Gruss,
    Automatisator

  • TCPSend und TCPRecv ?

    • Automatisator
    • 20. Mai 2012 um 11:36
    Zitat von m-obi

    Was heißt denn mehrere Male den Button drücken?

    das ist ja, man klickt auf Button mehrere male, und TCPSend macht dann "DATADATADATA" bzw. TCPRecv empfängt dann "DATADATADATA" soll er aber nicht, sondern nur einmal "DATA" empfangen.

    Zitat

    Wegen Timer schau dir mal TimerInit und TimerDiff an.


    das ist ja, ich weiß nicht wie ich das beim Button klick einsetze...? :(

  • TCPSend und TCPRecv ?

    • Automatisator
    • 20. Mai 2012 um 10:58

    Hallo m-obi,

    Zitat

    Die Frage ist, aber wann darf er wieder senden.

    eigentlich dann wenn ich wieder auf Button klicke... ?

    Zitat

    Starte Bein ersten Klick einfach einen Timer und Frage ihn beim Klick immer ab. Solange wie du für dich halt die Zeit setzt bis er wieder senden darf.

    kannst Du mir das bitte mal näher erklären? Du meinst, nach Button klick (TCPSend) ein Sleep(?) machen?


    Gruss,
    Automatisator

  • TCPSend und TCPRecv ?

    • Automatisator
    • 19. Mai 2012 um 11:12

    Hallo an Alle,

    ich habe ein Button erstellt, der beim klick TCPSend($iSocket, "DATA") macht.
    das ganze läuft nicht mit GuiGetMsg() sondern in Opt("GUIOnEventMode", 1) wie lange man in While schleife den Sleep setzt ist GUIOnEventMode egal... schön und gut :)

    mein Problem:
    wenn ich Button einmal klicke sendet TCPSend, einmal "DATA", TCPRecv empfängt dies und gibt ein MsgBox aus mit dem Text: "DATA2"
    wenn ich mehrere male Button klicke, sendet er die ganze zeit DATADATADATADATA, soll er aber nicht, einmal "DATA" reicht mir aus :(

    wie kann ich nur ein DATA senden und auch so empfangen, trotzt mehrere klicks?

    Gruss,
    Automatisator

  • Script schlieft ein...?

    • Automatisator
    • 18. Mai 2012 um 12:22

    naja, heute lief ca. 4 Std. alles problemlos bzw. Server und Client(auf anderem PC) -Script gestartet, ca. 4 Std. laufen gelassen...dann auf Button(TCPSend...) geklickt , der Client empfängt problemlos (ist nicht eingeschlafen).... das heißt, manchmal geht es und manchmal nicht... :(

    schein so als gebe es da ein MTU Problem... ?
    gibt es da irgendwelche Unterschiede zw. WindowsXP und Windows 7 die ich bei Autoit beachten muss? in Hilfe ist nichts darüber zu finden, auch nicht in TCP Tutorials.... ?

  • Script schlieft ein...?

    • Automatisator
    • 16. Mai 2012 um 16:34

    Danke für die Formatierung...!


    ich habe es aus SciTE einfach kopiert und hier hinzugefügt dann markiert und auf "Autoit-Quellcode" geklickt... keine Ahnung was ich nun falsch gemacht habe...? :(


    zu dem Script:

    kann es vielleicht daran liegen, wenn Server per TCPSend ständig Daten sendet, (was ja sein muss, bzw. so überprüfe ich ob der Client noch ONLINE ist...) und der Client (der die Daten empfängt und irgendwann nicht mehr reagiert) voll mit Daten ist, und deswegen einschlieft? kann mir das aber nicht ganz so vorstellen, ich weiß es aber nicht was die Ursache ansonsten sein könnte?

    das komische ist ja, das der Client noch verbunden ist, wäre er nicht (bzw. gebe es Probleme im Netzwerk ), dann würde der Script ab Zeile 43 einschalten... ?( wenn ich Server beende dann gibt es auf dem Client TCPSend @error, und das GUI wird angezeigt. (es liegt also nicht am Netzwerk...)

    Warum der Client Script nach eigener Zeit einschlieft bzw. keine Daten mehr von Server empfängt, obwohl er verbunden ist, ist mir ein rätsel... ?(

    Gruss,
    Automatisator

  • Script schlieft ein...?

    • Automatisator
    • 15. Mai 2012 um 20:29

    Hallo an Alle,


    es geht um diesen Script:

    [autoit]

    #include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $Form1 = GUICreate("TEST", 393, 415, -1, -1)
    GUISetOnEvent(-3, "_Exit")
    TCPStartup()
    $Main_IP = @IPAddress1$Master_IP = "192.168.0.100"$Master_Port = 54545
    Global $iSocket = 0Global $Master = ""

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

    _Master_Verbinden()
    Func _Master_Verbinden() GUISetState(@SW_SHOW, $Form1)
    $Master = "" ; Offline = "", Online = "ONLINE" Do ConsoleWrite("Warte auf Server IP: " & $Master_IP & @CRLF) $iSocket = TCPConnect($Master_IP, $Master_Port) Sleep(1000) Until $iSocket > 0 GUISetState(@SW_HIDE, $Form1)
    _ComputerName_Senden() Sleep(1000) $Master = "ONLINE" ConsoleWrite("Server online." & @CRLF)EndFunc ;==>_Master_Verbinden

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

    While 1 If $Master = "ONLINE" Then Dim $recv = "" $recv &= TCPRecv($iSocket, 1024)
    If StringInStr($recv, "TASKMANAGER") Then MsgBox(0, "Info", "Taskmanager killen.", 10) ;... ;...
    ElseIf StringInStr($recv, "CMD") Then MsgBox(0, "Info", "CMD killen", 5) ;... ;... Else ConsoleWrite("Warte auf Action..." & @CRLF) EndIf
    TCPSend($iSocket, "") If @error Then $Master = "OFFLINE" _Master_Verbinden() EndIf
    EndIf Sleep(100)WEnd

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

    Func _ComputerName_Senden() Local $ComputerName
    $ComputerName = @ComputerName & "|" & @ComputerName & "|" & @ComputerName
    TCPSend($iSocket, $ComputerName) If @error Then TCPCloseSocket($iSocket) $iSocket = 0 GUISetState(@SW_SHOW, $Form1) _Master_Verbinden() EndIfEndFunc ;==>_ComputerName_Senden

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

    Func _Exit() TCPCloseSocket($iSocket) TCPShutdown() ExitEndFunc ;==>_Exit

    [/autoit]


    am Anfang funktioniert alles problemlos bzw. ein anderer Script sendet (TCPSend) zb. "CMD" und dieser Script öffnet MsgBox(0, "Info", "CMD killen", 5) usw. doch nach paar Minuten kommen keine TCPSends mehr an, obwohl Verbindung noch steht (ansonsten würde sich ein Fenster öffnen) reagiert er nicht :( woran kann so was liegen?


    Gruss,
    Automatisator

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™