Wer findet den Fehler (Screenshotprogramm)
-
Hallo. Ich habe mir folgenden Code auf einer Seite kopiert. Jedoch beim ausführen erkennt man nur ca. 2/3 des Bildes. Kann mir einer sagen wo der Fehler ist?
#include <windows.h> const char *AppName="Yeah"; void SaveScreen(HWND pScreen, char Path[]) { int Width = GetSystemMetrics(SM_CXSCREEN); int Height = GetSystemMetrics(SM_CYSCREEN); HDC hdcScreen; HBITMAP hbmScreen; //---------------Bitmap Informationen BITMAPINFO infobmp; infobmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); infobmp.bmiHeader.biWidth = Width; infobmp.bmiHeader.biHeight = Height; infobmp.bmiHeader.biPlanes = 1; infobmp.bmiHeader.biBitCount = 24; infobmp.bmiHeader.biCompression = 0; infobmp.bmiHeader.biSizeImage = 0; infobmp.bmiHeader.biXPelsPerMeter = 0; infobmp.bmiHeader.biYPelsPerMeter = 0; infobmp.bmiHeader.biClrUsed = 0; infobmp.bmiHeader.biClrImportant = 0; int* bitmap = new int[Width*Height*3]; BITMAPFILEHEADER bfheader; bfheader.bfType = 19778; bfheader.bfSize = sizeof(BITMAPFILEHEADER) + Width*Height*3 + sizeof(BITMAPINFOHEADER); bfheader.bfReserved1 = 0; bfheader.bfReserved2 = 0; bfheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //Bitmap ----------------------- Informationen hdcScreen = GetWindowDC(pScreen); hbmScreen = CreateCompatibleBitmap(hdcScreen,Height, Width); // temporärer DC HDC hdcTemp = CreateCompatibleDC( hdcScreen ); // Bitmap reinselektieren HBITMAP hbmOld = (HBITMAP)SelectObject( hdcTemp, hbmScreen ); // Inhalt von Desktop übertragen BitBlt( hdcTemp, 0, 0, Height, Width, hdcScreen, 0, 0, SRCCOPY ); int iResult = GetDIBits(hdcTemp,hbmScreen,0,Height,bitmap,&infobmp,DIB_RGB_COLORS); // aufräumen SelectObject( hdcTemp, hbmOld ); DeleteObject( hbmScreen ); DeleteDC( hdcTemp ); HANDLE hfile = CreateFile( Path,GENERIC_WRITE,0,0,OPEN_ALWAYS,0,0); //Datei Schreiben DWORD word; WriteFile(hfile,&bfheader,14,&word,NULL); WriteFile(hfile,&infobmp,40,&word,NULL); WriteFile(hfile,bitmap,Width*Height*3,&word,NULL); ReleaseDC(pScreen,hdcScreen); CloseHandle(hfile); delete[] bitmap; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd = FindWindow(NULL, AppName); Sleep(2000); char *path="C:\\neu.bmp"; Sleep(1000); SaveScreen(hWnd, path); return 0; }
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
OK. Habe den Fehler gefunden aber beim Screenshot ist die Maus nicht drauf kann man das ändern?
-
Dr. Evil schrieb:
OK. Habe den Fehler gefunden aber beim Screenshot ist die Maus nicht drauf kann man das ändern?
Wäre auch schön, wenn du uns allen deinen Fehler mitteilst.
-
Hallo,
Dr. Evil schrieb:
OK. Habe den Fehler gefunden aber beim Screenshot ist die Maus nicht drauf kann man das ändern?
z.B. mit GetCursorInfo die Daten zum Maus-Cursor holen, und mit DrawIcon dann selber auf den Screenshot zeichnen.
MfG,
Probe-Nutzer