An alle C-Programmierer: Wie finde ich die Speicheradresse des Bildschirms und wie greife ich darauf zu?

Waschzuber2007-05-23T00:39:32Z

Beste Antwort

soweit ich das verstanden habe: garnicht.
Die meisten betriebssysteme verbieten ein direktes schreiben in den speicher der angezeigt wird (mem exeption).

Du kannst maximal eine API zum Betriebssystem "beauftragen" da was hinzuschreiben.

bei windows wäre das GDI bzw. GDI+
bei Unixoiden BS ist es der X-server

?2007-05-23T03:38:10Z

Poken ist out. Gibts nicht mehr, wie meine vorredner schon sagten. Windows liefert für jedes ausgabeobjekt einen Devicekontext. Dieser wird immer gleich angesprochen. Windows selbst und die verbundenen Treiber (Grafiktreiber, Druckertreiber ... ) sorgen dann dafür das die Zeichenbefehle über diesen Devicekontext an das physikalische Gerät weitergegeben wird. Das ist übrigens unabhänig davon ob du mit der alten API (MoveTo, LineTo et.) oder mit einer Klassenbibliothek arbeitest.
Was du aber jederzeit machen kannst ist entweder den WM_PAINT (OnPaint bei klassen) abfängst und dort mit den API Befehlen zeichnen. Diese Nachricht liefert immer einen Devicekontext mit (u.U. versteckt in einer PaintStuct). Da kannst du dann nach herzenslust malen. Alle Zeichenbefehle beziehen sich dann auf dieses Fenster. Theoretisch kannst du auch das Fenster bestimmen und von aussen also aus einem externen Programm reinzeichnen. Bringt nur nicht viel, weil was du gezeichnet hast beim nächsten Paint wieder weg ist.

Sidewinder2007-05-23T00:49:50Z

Der Bildschirm selbst, hat keinen Speicher, nur der jeweilige Grafikserver, dessen Adressen sind in aller Regel in den Dokumentationen festgehalten. Ein direktes Schreiben an den Anzeigenbreich ist, wie mein Vorredner schon bemerkt hat, nicht möglich, da er unter Windows von der HAL (Hardware Abstraction Layer) und unter Linux vom Sicherheitssystem abgeblockt wird. Wenn du eine grafische Oberfläche benötigst, verwende tcl/tk oder ähnliche Toolkits, das geht immer noch am einfachsten.