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
Seite 1 von 1
Grafikspeicher Auslesen?
Anzeige
#2
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; }
#3
geschrieben 10. August 2008 - 12:44
Zitat (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. 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
#4
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?
#5
geschrieben 10. August 2008 - 15:07
Zitat (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?
#6
geschrieben 12. August 2008 - 11:23
Thema verteilen:
Seite 1 von 1