DeskStream 2 Release Candidate 1.8

  • Hi,

    Zitat

    Ich hab die Server.exe mal in Olly geladen:

    Das ist der Einsprungpunkt in den ASM-Teil vom Server.
    Aber den Fehler verstehe ich nicht so ganz...
    Die Exception wird geworfen, weil der Stackpointer ESP nicht auf den ersten Parameter zeigt, sondern sonstwohin....
    Das ist in einem 32-Bit-Script / Betriebssystem imho unmöglich, da der Funktions-Call die Parameter nacheinander auf den Stack pushed.

    Das einzige, was ich mir vorstellen könnte, ist die "falsche" DLL (32/64 Bit), in der das Callwindowprocw aufgerufen wird (warum funktioniert dann aber Getsystemmetrics? )

    [autoit]

    Global $hDLL_User32 = DllOpen("user32.dll")

    [/autoit]

    Bitte teste folgendes:
    Tauschen der Zeile im Server

    [autoit]

    $Ret = DllCall("user32.dll", "int", "CallWindowProcW", "ptr", $pcode, "ptr", $pnew, "ptr", $pold, "int", $iWidth * $iHeight, "ptr", $pInfoStruct)

    [/autoit]


    gegen

    [autoit]

    $Ret = DllCalladdress( "int:cdecl", $pcode, "ptr", $pnew, "ptr", $pold, "int", $iWidth * $iHeight, "ptr", $pInfoStruct)

    [/autoit]


    ggf auch im Client anpassen. DllCallAddress ist eine AutoIt-Funktion seit 3.3.8.0

    /EDIT/ Nächster Versuch ist DEP zu deaktivieren....

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (12. Juni 2012 um 22:30)

  • Ich hab es in beiden Scripts geändert, jedoch crashed das Teil weiterhin.

    Zitat

    Nächster Versuch ist DEP zu deaktivieren....

    Wenn Du mir noch erzählst wie ich das anstelle teste ich das gerne. :rolleyes:

    cu, Lesato!

    PS: Die nächsten 2 Tage bin ich auf nem Lehrgang, daher kann ich erst ab Freitag wieder testen.

  • Hi,

    Zitat

    Wenn Du mir noch erzählst wie ich das anstelle teste ich das gerne.

    Systemsteuerung;System;Erweitert;Leistung;Einstell ungen;Datenausführungsverhinderung

    dort das Programm eintragen, oder DEP ganz deaktivieren, natürlich nur testweise!
    DEP (Datei Ausführungs Verhinderung) ist ein Windows-Sicherheitsfeature und verhindert, dass Programme unerlaubt im Speicher rumschreiben. In vorliegenden Fall stellt sich die Frage, ob das bei dir der Grund für den Absturz ist....

  • Schon lange her und vorab vielen Dank für das Script. Habe das schon vor einigen Jahren ausprobiert würde nun gerne das Script wieder verwenden. Das Problem was ich jedoch habe ist, dass die TCPRecv im Client abbricht wenn:

    • Das Programm nicht mit Seitenverhältnis starte
    • Das Fenster vergrößern möchte
    • Das Fenster verschieben möchte
    • Rein-zoome und dann wieder auf Faktor=0 raus-zoome

    also jedes mal wenn sich etwas an der Bildposition verändert.

    AutoIT Version 3.3.10.2
    BS: Windows 8.1

    Kann das jemand nachvollziehen oder geht das nur mir so?

    Viele Grüße
    KriZza

    [autoit]


    $sresv = TCPRecv($iConnect, 1) ;ein zeichen aus dem puffer holen
    If @error Then ;verbindung zum server verloren
    MsgBox(16, "DeskStream 2 Beta", "Verbindung unterbrochen." & @error & " fehler: " & $sresv)
    ExitLoop
    EndIf

    [/autoit]
  • Es liegt auf jeden Fall am Versionsunterschied:

    Geht: 3.3.8.0
    Geht nicht ( getestet 3.3.10.0)

    ich such mir schon echt ein Wolf. hat jemand eine Idee woran es liegen könnte?

    --
    edit:
    Im Client liegts auf jeden Fall an der Zeile

    [autoit]

    DllCall($hDLL_User32, "int", "CallWindowProcW", "ptr", $pCode, "ptr", $pBitmap, "ptr", $pInfoStruct, "int", $len, "int", $bitmapsize)

    [/autoit]

    Keine Ahnung was sich da geändert hat :( ich brauche HIIIILFE ;)
    --
    edit2:

    Leider ist der Downloadlink auch nicht mehr im 1. Post .... vll wg. dem Umzug vom Forum?

    2 Mal editiert, zuletzt von KriZza (15. April 2015 um 17:17)

  • Ja, der fehlende Downloadlink liegt am Forum.

    Ich schaue am kommenden Wochenende mal drüber und poste eine mit aktueller AutoItversion lauffähige Version.

  • Hi,

    das Problem ist ein Fehler in der TCPRecv() der Versionen 3.3.10.ff.
    In der 3.3.8.1 werden die @errors "richtig" gesetzt, in den nachfolgenden Versionen nicht. Was dazu führt, dass obwohl eine korrekte Verbindung besteht, der Client bzw. TCPRecv() errors wirft....
    Siehe
    http://www.autoitscript.com/forum/topic/15…precv-in-33102/
    https://www.autoitscript.com/trac/autoit/ticket/2596

    Das Problem ist nun, in ALLEN Scripten, die mit 3.3.8.1 erstellt wurden und mit einer späteren AutoItversion laufen sollen, die @error abzufangen und Timeouts per Sleep() und folgendem wiederholten Abfragen der Verbindung auf einen "echten" Timeout zu prüfen....wtf.

    Ich erhalte im Client den Fehler 10053 WSAECONNABORTED was natürlich Quatsch ist, denn der Server hält die Verbindung weiterhin.
    AutoIt "meint", nur weil keine Daten ankommen, sei der Server down....soviel zu Errorhandling.
    Wie gesagt, in 3.3.8.1 alles einwandfrei!

    Funktionieren diese Scripte bei euch? Bitte BS und AutoIt-Version angeben!

    forumversion.zip

    Server kompilieren und danach Client starten. Der Client startet automatisch den Server.

  • Danke für deine Mühe! Hab jetzt erst deine Nachricht gelesen und konnte nur kurz auf die schnelle testen. Bei mir klappts.

    BS: Win 8.1
    AutoIT (seit letzter Woche): 3.3.12.0

  • Ok,
    schaumamal, ob man noch einige FPS schinden kann, ich hatte weitere Versionen, welche nur den gewählten Ausschnitt übertragen.
    Bitte auch mal ausprobieren, ob Abschalten von AERO höhere Geschwindigkeit bringt, dann würde ich das Ab/Anschalten von AERO ggf. in die GUI integrieren.

  • Gewählter Auschnitt oder besser gewähltes Fenster wären famos, dann lässt sich das ganze schön als Monitoring einsetzen ohne das TV aktiv sein muss.

  • @minx,
    du kannst per mausrad oder mit den +-Tasten und den Pfeiltasten den Bildausschnitt wählen, Mausklicks ins Fenster (rechte und linke) gehen übrigens auch

  • Ich meine eher, dass ein einzelnes Fenster gespiegelt wird. Z.B. Start des Servers, dort auf das Fenster klicken und beim Client taucht dieses Fenster auf als würde es auf dem Client laufen. D.h. auch mehrere Instanzen bzw. mehrere Fenster. So könnte man die Fenster auf dem Client wie native Programme behandeln.

    Ich hoffe meine Ausführungen ergeben Sinn :)

  • Sinnfreie Idee #5425624.53:

    Man kann Fenster spiegeln, wenn man auf dem Server-Fenster mit einem automatischen Window-Spy alle Controls abfängt und eine GUI auf dem Client baut, welche genau so aussieht. Danach wird schlicht der DC vom Client und Server verglichen. Wenn nicht alles gleich ist (Nicht native Controls), und der Nutzer es wünscht, wird die ganze Server-GUI gestreamt.

  • viel zu kompliziert^^
    In einer GUI innerhalb eines Fensters ändert sich so gut wie nichts! Daher ist der Datentransfer zu vernachlässigen!

    Man könnte das einfach so lösen, dass bei einer bestimmten Tastenkombination im Client das Fenster unter dem Mauszeiger (beim Server) diesen Fensterinhalt "fullscreen" im Clientfenster darstellt.
    Dazu müssen nur die Fensterinhalt-Koordinaten vom Server an den Client übergeben werden....schaumamal

  • Wir haben das damals absichtlich so gelöst, dass die Server auf dem zu überwachenden Rechner laufen.

    Um mehrere "Server" in einer GUI darzustellen, muss man im Client nur mehrere Sockets erstellen und mit den entsprechenden Servern verbinden. Problem dabei ist, dass jede Verbindung zu gleichen Teilen Bandbreite bzw. Leistung der Darstellung braucht!
    D.h. konkret, wenn bei einer Verbindung mit einem Server 20FPS dargestellt werden, sind das bei 4 gleichzeitigen Verbindungen nur noch maximal 4-5 FPS.
    Wenn man aber 4 Clients startet, hat man kaum Einbußen, abhängig von der verfügbaren Bandbreite. So werden auch Mehrkernprozessoren ausgenutzt^^

    Auf meinem Quadcore-Laptop dümpelt die Prozessorlast bei Client und Server bei ca 10% und 10 FPS bei 800Mhz Takt, d.h. der Code holt den Prozessor nicht mal aus dem Schlafmodus (P6 bei mir ! )
    Und das bei laufender Videoübertragung bei ca. 800x600 zu 3 Rechnern!


    Irgendwo hab ich noch eine "schnelle" Version rumfliegen, die komprimiert bissl besser. Und Ton wurde imho genau wie Tastatur auch schon mitübertragen. Damals hatte ich aber nur ein 10Mbit Netz, und daher infolge fehlender Rechner- und Netzwerkleistung nicht mehr weitergemacht...

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (21. April 2015 um 19:06)

  • Mhh ja, verstehe. Das mit den FPS wäre alles andere als tragisch, da sowas ja als thumbnail dienen könnte. Ganz so leicht ist´s jedoch nicht. Das "Client"-Script ist wirklich auf eine 1-1 Beziehung ausgelegt. Wenn ich da was umbaue kommt immer "Schrott in der Pipeline" (Nur mal etwas gebastelt, hänge das Beipsielscript wieder an.). Und den Client als externe Gui einzubauen ist auch nicht so das gelbe vom Ei. Kurz zu dem was ich vorhabe:

    Für eine Schulungsverwaltung sollen Vorschaubilder dargestellt werden. Hier zwei Screenshots.
    Vorher:
    tcv.png

    Nachher:
    tcv2.png

  • Nein, dafür sollte man auch nicht großartig Deskstream umbauen sondern mit diesen Anforderungen einfach ein Multiclientscript erstellen.

    Du hast den Server, jeder der Clients verbindet sich mit dir. Das ist nichts weiter als ein Chatprogramm, von denen gibts reihenweise Beispiele!
    Anstatt jetzt getippte Nachrichten zu übertragen, schickst du komplette Screenshots.
    Der Server klappert nun nacheinander die Clientverbindungen ab und refreshed seine GUI mit diesen Screenshots.
    Bei einem Doppelklick auf eine der "Vorschauen" öffnet sich ein weiteres Fenster mit einer vergrößerten Darstellung. Zooming, Panning usw. würde ich alles weglassen!

    Würde das reichen?