Max11.111
Bekanntes Mitglied
- Dabei seit
- 12.06.2008
- Beiträge
- 2.416
- Reaktionspunkte
- 0
Hi.
Ich habe mir ein Programm "zusammengebastelt", das einen Screenshot macht und in einer Datei speichern.
Allerdings werden nur 75% des Bildschirms aufgenommen. Der restliche Bereich bleibt schwarz!
Hier ist der Code:
Ich habe auch schon mal das
durch
Wobei dann das Ergebnis genauso falsch ist:
Würde mich sehr freuen, wenn mir jemand helfen kann!
Ich habe mir ein Programm "zusammengebastelt", das einen Screenshot macht und in einer Datei speichern.
Allerdings werden nur 75% des Bildschirms aufgenommen. Der restliche Bereich bleibt schwarz!
Hier ist der Code:
Code:
#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[1024*768*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);
char *path="Z:/neu.bmp";
Sleep(1000);
SaveScreen(hWnd, path);
return 0;
}
Ich habe auch schon mal das
Code:
int Width = GetSystemMetrics(SM_CXSCREEN);
int Height = GetSystemMetrics(SM_CYSCREEN);
Code:
int Width = 1280;
int Height = 1024;
Würde mich sehr freuen, wenn mir jemand helfen kann!