WinFuture-Forum.de: Grafikspeicher Auslesen? - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Grafikspeicher Auslesen?


#1 Mitglied ist offline   presswurst 

  • Gruppe: aktive Mitglieder
  • Beiträge: 45
  • Beigetreten: 11. Juli 07
  • Reputation: 0

geschrieben 09. August 2008 - 22:44

Hallo Community!

Ich suche einen Weg, auf möglichst schnelle Weise den Bildschirminhalt zu kopieren (auslesen?). Deshalb frage ich hier mal, ob es möglich ist, den grafikspeicher bei Windows auszulesen? Kann ich dafür irgendwo eine Adresse anfordern oder gibt es dafür eine spezielle Funktion?


lg, pRess
0

Anzeige



#2 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 10. August 2008 - 12:25

Funktioniert aber nur bei normalen Windows-Fenstern, bei 3D-Spielen bekommst nur ne schwarze Fläche afaik. http://www.codeguru....ad.php?t=379986
HBITMAP CaptureDesktop(void)
{
	//Capture desktop into bitmap
	HBITMAP hBitmap = NULL;
	RECT rcDt;
	HWND hDtWnd = ::GetDesktopWindow();
	HDC hDtDC = GetDC(hDtWnd);
	if(hDtDC && GetClientRect(hDtWnd, &rcDt))
	{
		//Create mem DC & bitmap
		int w = rcDt.right - rcDt.left;
		int h = rcDt.bottom - rcDt.top;
		HDC hMemDC = CreateCompatibleDC(hDtDC);
		hBitmap = CreateCompatibleBitmap(hDtDC, w, h);

		if(hMemDC && hBitmap)
		{
			//Select our bitmap
			HGDIOBJ hOldBmp = SelectObject(hMemDC, hBitmap);

			//Copy desktop to mem DC
			BitBlt(hMemDC, 0, 0, w, h, hDtDC, 0, 0, SRCCOPY);

			//Select old bmp
			SelectObject(hMemDC, hOldBmp);
		}

		//Release DCs
		DeleteDC(hMemDC);
		ReleaseDC(hDtWnd, hDtDC);
	}

	return hBitmap;
}

0

#3 Mitglied ist offline   presswurst 

  • Gruppe: aktive Mitglieder
  • Beiträge: 45
  • Beigetreten: 11. Juli 07
  • Reputation: 0

geschrieben 10. August 2008 - 12:44

Beitrag anzeigenZitat (christoph_hausner: 10.08.2008, 13:25)

Funktioniert aber nur bei normalen Windows-Fenstern, bei 3D-Spielen bekommst nur ne schwarze Fläche afaik.



Einschränkungen dieser Art sind aber schlecht. :wink: Gibt es denn da nichts anderes?

Die GDI ist doch auch ein "wenig" langsam, oder? Mein Code muss in diesem Punkt sehr schnell sein, deswegen würde ich nur sehr ungern mit GDI und Bitmaps herumschmieren.

pRess
0

#4 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 10. August 2008 - 14:49

Erklär am besten mal wofür du den Bildschirminhalt auslesen musst. Möchtest du so etwas in der Art Fraps oder Camtasia Studio programmieren?
0

#5 Mitglied ist offline   presswurst 

  • Gruppe: aktive Mitglieder
  • Beiträge: 45
  • Beigetreten: 11. Juli 07
  • Reputation: 0

geschrieben 10. August 2008 - 15:07

Beitrag anzeigenZitat (christoph_hausner: 10.08.2008, 15:49)

Erklär am besten mal wofür du den Bildschirminhalt auslesen musst. Möchtest du so etwas in der Art Fraps oder Camtasia Studio programmieren?


ich glaube, es reicht wenn ich sage, dass mein (geplantes) programm mehrere male hintereinander den bildschirminhalt speichert und ihn dann auf nicht weiter erläuterte weise, zu unbekannten zwecken, verarbeitet. wichtig ist, dass dies mit wenig code geschieht und möglichst ohne das mitwirken unnötiger abstraktion (gdi), da darunter wirklich nur die stabilität meines programms leiden würde. wenn windows schon nicht die möglichkeit bietet, direkt in die ebene des grafikspeichers vorzudringen, gibt es evtl noch andere möglichkeiten? wie wäre es zb. mit open gl? hat das vielleicht irgendwelche funktionen zum "abtasten" von bereichen des bildschirms?
0

#6 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 12. August 2008 - 11:23

Beitrag anzeigenZitat (presswurst: 10.08.2008, 16:07)

wie wäre es zb. mit open gl? hat das vielleicht irgendwelche funktionen zum "abtasten" von bereichen des bildschirms?

Nö.
Wenn dir GDI schon zuviel ist, dann musst du dir wohl oder übel einen Treiber programmieren, so macht das dann z.b. UltraVNC.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0