AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Bildschirmänderung registrieren

Bildschirmänderung registrieren

Offene Frage von "MCQ"
Ein Thema von MCQ · begonnen am 21. Jan 2004 · letzter Beitrag vom 14. Feb 2004
Antwort Antwort
Seite 1 von 2  1 2   
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#1

Bildschirmänderung registrieren

  Alt 21. Jan 2004, 22:57
Gibt es denn eine Möglichkeit festzustellen, ob sich auf dem Bildschirm etwas geändert hat? Wenn Ja, wie?
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Bildschirmänderung registrieren

  Alt 21. Jan 2004, 23:26
Das einzige halbwegs inteligente was mir dazu einfiele, wäre es in regelmäßigen (nicht zu kleinen) Zeitabständen einen Screenshot (gibt 1001 Tutorials dazu ) zu machen, und mit dem vorhergehenden zu vergleichen. (z.B. die beiden Bilder XOR-en, und sobald ein Pixel des resultiernenden Bildes NICHT schwarz ist, hat sich was verändert.)

Ist latürnich recht CPU- und resourcenintensiv - aber etwas besseres mag mir net kommen...


gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#3

Re: Bildschirmänderung registrieren

  Alt 21. Jan 2004, 23:49
mmmhh Hab grad mal ne Function geschrieben, die alle 50 Pixel einen Pixel überprüft, ist nicht ganz so Resourcen-Raubend. Ich hatte aber er gedacht, das Windows eventuell ne Message sendet (so wie mit SendMessage) die mein Programm dann empfängt.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Bildschirmänderung registrieren

  Alt 22. Jan 2004, 01:35
Tjoooo, du könntest natürlich versuchen einen Hook auf sämtliche Maus-Events zu bekommen (keinen Plan wie das geht...), aber dann bekommst du eben "nur" veränderungen mit, die der Benutzer mit der Maus veranlasst hat. Eine laufende PowerPoint-Präsentation ist da dann eben nicht drin... Evtl. kann man noch die Tastatur mit einbeziehen (wobei die nicht unbedingt bei aktivität den Bildschriminhalt beeinflusst.)

Eine Message ala "WM_SOMETHING_ON_SCREEN_HAS_CHANGED" hab ich noch net gesehen

Evtl. lohnt sich ja Blick in's PSDK - wobei ich nicht glaube, dass das was du suchst überhaupt existiert :\

Alle 50px ist denn auch schon mal keine üble Idee, nur wenn jemand etwas in ein Textfeld schreibt, dass dummerweise nicht im Raster liegt...

Vielleicht kann man ja auch (abhängig von deiner Verwendung) einfach das Zeitintervall auf so 1-2 Sekunden oder länger setzten. Weil der Vergleich an sich ist ja nicht soooo aufwendig. Mit BitBlt lässt sich meines Wissens nach auch "ge-xor-t", und direkt vom Bildschirm kopieren (keine Garantie!), und die Auswertung des Ergebnisses kann man ja binär bewerkstelligen. Sobald ein Byte <> 0 auftaucht ist das Dingen geritzt -> der Bildschirminhalt ist verändert worden.

Via BitBlt sollte das ganze recht fix von Statten gehen. Habe sowas noch nie gemacht - daher kann ich nichtmal mit Pseudocode aufwarten - aber nach dem was ich alles so gelesen hab müsste das gehen.

Interessant wäre in diesem Zusammenhang auch die "Screenshot-Class" von Assbard. Wenn jemand spontan weiss, wo die ist...


n8i,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Bildschirmänderung registrieren

  Alt 22. Jan 2004, 01:44
Es gibt das sogenannte GDI Hooking Interface, mit dem werden alle Ausgaben die per GDI erfolgen überwacht. ABER, zu diesem Interface gibt es sogut wie keine Dokumentationen. PC AnyWhere und Windows Terminal Server nutzten diese GDI Hooks.

Ansonsten bleibt dir wirklich nichts anderes übrig als zeitgesteuert den Desktop Bereich auszulesen und mit einer zwischengespeicherten Bitmap zu vergleichen.

Ein Weg gäbe es da vielleicht noch. Jede Grafikkarte mappt ihren Grafikspeicher an normale Speicheradressen, zB. $A0000 usw. Per DirectX oder über die Grafikkarten Treiber müsste es einen Weg geben diesen Speicherbereich direkt auszulesen. Normalerweise ist das eine Ring0 Operation. In deinem Falle würde man also eine Speicherkopieroperation mit inklusiver Vergleichsoperation codieren. Auch dafür gibt es schnelle MMX und SSE2 Assemblerbefehle. D.h. während des Kopieren des Bildschirmspeichers in den Buffer wird gleichzeitig überprüft ob eine Differenz von Buffer zum Grafikkarten Speicher vorliegt.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Bildschirmänderung registrieren

  Alt 22. Jan 2004, 01:52
MMX, SSE2... jetzt wird's interessant !
Das GDI-Hooking klingt so ähnlich wie dass, was das Programm "Fraps" macht. Das ist ein Framerate-Counter für DirectX-Games. Der hat so weit ich weiss über eine eigene DLL die die selben Funktionen exportiert wie die entsprechende original-DLL, aber diese größtenteils nur weiterleitet, und bei einem PageFlip einen Zähler hochzieht.
Ob das jetzt auch DIE verwendetet Methode ist weiss ich net genau, aber zumindest hat der Author dieses Verfahren in seiner readme beschrieben. Evtl. ist das mit dem GDI-Hooking ähnlich realisierbar.
Allerdings steht der Aufwand dafür in keiner Relation zu einem schnöden Abkopieren des Desktops


gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Bildschirmänderung registrieren

  Alt 22. Jan 2004, 02:10
Zitat:
Allerdings steht der Aufwand dafür in keiner Relation zu einem schnöden Abkopieren des Desktops
Das ist korrekt, es sollte sich schon lohnen.

Gruß Hagen
  Mit Zitat antworten Zitat
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#8

Re: Bildschirmänderung registrieren

  Alt 23. Jan 2004, 18:08
Ich hatte vor sowas wie pcAnywhere zu proggen.

  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#9

Re: Bildschirmänderung registrieren

  Alt 14. Feb 2004, 19:08
Wozu dann den Aufwand. Nimm UltraVNC das kommt gleich mit einem GDI-Hook (sog. DDI).
  Mit Zitat antworten Zitat
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#10

Re: Bildschirmänderung registrieren

  Alt 14. Feb 2004, 19:27
Ja toll, dann kann ich auch pcAnywher oder MasterEye nehmen, ich wollte e selber proggen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf