Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Änderungen des Desktops abfangen... (https://www.delphipraxis.net/23196-aenderungen-des-desktops-abfangen.html)

earlyperl 30. Mai 2004 17:28


Änderungen des Desktops abfangen...
 
Hat jemand ne Ahnung, wie ich den Desktop in einem Image darstellen kann??
Bei Änderungen z.B. Mausbewegung soll nur die tatsächliche Änderung an das Image übertragen werden, nicht der ganze Desktop.

Für ein konkretes Beispiel währe ich sehr Dankbar, da das bisher nicht so mein Gebiet war.

Assarbad 29. Aug 2004 13:40

Re: Änderungen des Desktops abfangen...
 
  • Schreib einen Mirror-Driver (sicher nicht in Delphi - geht ab NT 4) und so wirst du benachrichtigt.
  • Schau in die Sourcen von VNC, sort wird u.a. mit Hooks gearbeitet um bei bestimmten Fensternachrichten zu aktualisieren

dizzy 29. Aug 2004 14:15

Re: Änderungen des Desktops abfangen...
 
Ich nehme mal an, dass der im Image gezeigte Desktop nicht auf dem PC sein soll, dessen Desktop gerade gezeigt wird, oder? Also etwas in Richtung PC-Anywhere?

Dazu, und auch zum Übertragen von Bilddifferenzen hatten wir hier schon mehrmals Threads. Einfach mal die Suche bemühen. Stichwort für die Bilddifferenz: xor
Und Screenshot-Code haben wir glaub ich auch irgendwo hier rumliegen, oder sonst mal torry oder google. Gesehen hab ich sowas schon mal... :)

gruss,
dizzy

\\edit: @Assarbad: Die Sache mit dem Treiber ist aber auch unnötig kompliziert... Wenn man in einem Thread mit niedriger Priorität fortwährend aufeinanderfolgende Screenshots vergleicht, dann merkt man auch wenn sich etwas verändert hat. Das langt alle Male.

Assarbad 29. Aug 2004 21:36

Re: Änderungen des Desktops abfangen...
 
Zitat:

Zitat von dizzy
\\edit: @Assarbad: Die Sache mit dem Treiber ist aber auch unnötig kompliziert... Wenn man in einem Thread mit niedriger Priorität fortwährend aufeinanderfolgende Screenshots vergleicht, dann merkt man auch wenn sich etwas verändert hat. Das langt alle Male.

Keine Frage, allerdings treibt dies die CPU-Last unnötig in die Höhe. Und zwar immens. Will heißen, auf deinem (vermutlich sehr modernen Rechner) wird das gehen, bei vielen (zB geschäftlichen Kunden mit alten Rechnern) hingegen nicht.

Screenshots: http://assarbad.net/stuff/screenshotclass.zip

dizzy 30. Aug 2004 03:15

Re: Änderungen des Desktops abfangen...
 
Zitat:

Zitat von Assarbad
Keine Frage, allerdings treibt dies die CPU-Last unnötig in die Höhe. Und zwar immens. Will heißen, auf deinem (vermutlich sehr modernen Rechner) wird das gehen, bei vielen (zB geschäftlichen Kunden mit alten Rechnern) hingegen nicht.

Damit hast du Recht. Bei meiner Lösung müsste man bei nicht so schnellen PCs einen Kompromiss zwischen Aktualisierungsintervall und CPU-Schonung schließen. Wobei man ja Windows diese Kompromissschließung machen lassen kann, in dem man das alles in einen Thread niedriger Priorität packt ;)
Ansonsten könnte es äusserst ungemütlich werden eine Veränderung im Bild zu bemerken. Rein über Messages und Hooks wird das nicht gehen, da z.B. beim Ablaufen einer Animation wohl nix ausgelöst wird. Da müsste man dann wirklich sehr low-level dran.

Zitat:

Zitat von Assarbad

Ach du warst das :D Ja schau an!

Assarbad 30. Aug 2004 07:08

Re: Änderungen des Desktops abfangen...
 
Zitat:

Zitat von dizzy
Ansonsten könnte es äusserst ungemütlich werden eine Veränderung im Bild zu bemerken. Rein über Messages und Hooks wird das nicht gehen, da z.B. beim Ablaufen einer Animation wohl nix ausgelöst wird. Da müsste man dann wirklich sehr low-level dran.

Stimmt. Daher gibt es so optimierte Lösungen wie RADMIN (basierend auf einem Mirror-Treiber) oder UltraVNC (auch) mit welchen Man schon fast alte Shooter über Netz spielen kann :mrgreen:
Animationen (oder auch selbstgezeichnete Controls die nicht bei WM_PAINT feuern) werden von Hooks eben nicht erkannt - und bei nem Treiber ist es wie aufm Bildschirm - feuert bei WM_PAINT nix, sieht man es zB auch in der Terminalsession nicht *g*

Habs mal mit Quake 2 versucht. Ist seeeeehr langsam aber funzt prinzipiell.

Vjay 30. Aug 2004 08:57

Re: Änderungen des Desktops abfangen...
 
Ich würde auch sagen, wozu das Rad neu erfinden.

Ein Mirror-Driver nutzendes VNC ist doch optimal. Und wenn du irgendwelche Sonderfunktionen benötigst -> VNC ist opensource.

Ausserdem (soweit ich weiss) kannst du eine Plugin-DLL (mit Delphi) schreiben, die die Datenübertragung Client <-> Server behandelt - falls das der Grund sein sollte, weswegen du eigene Software entwickelst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz