Screenshot Programm läuft nicht.
-
Hallo,
ich habe zwar danach gegoolet, aber was wirklich brauchbares nicht gefunden
Hoffentlich weiß wer, welche lib fehlt.#include <iostream> #include <windows.h> #include <fstream> #include <stdio.h> #include <wingdi.h> #include <fstream.h> #define SCREENWIDTH GetSystemMetrics(SM_CXSCREEN) #define SCREENHEIGHT GetSystemMetrics(SM_CYSCREEN) using namespace std; HBITMAP g_hDeskBmp; HDC g_hMemDC; int g_nDCdata; int main() { /*capture desktop and store for later use*/ HDC hdcDesk; hdcDesk=GetDC(HWND_DESKTOP); /*equivalent to hdcDesk=GetDC((HWND)0);*/ g_hMemDC=CreateCompatibleDC(0); g_hDeskBmp=CreateCompatibleBitmap(hdcDesk, SCREENWIDTH, SCREENHEIGHT); /*fill the bitmap with contents of desktop*/ g_nDCdata=SaveDC(g_hMemDC); SelectObject(g_hMemDC,g_hDeskBmp); BitBlt(g_hMemDC, 0, 0, SCREENWIDTH, SCREENHEIGHT,hdcDesk,0,0,SRCCOPY); //...................................................................................... // get desktop window (but can be any window) HWND capture = GetDesktopWindow(); if(!IsWindow(capture)) return 1; // get window dimensions RECT rect; GetWindowRect(capture, &rect); size_t dx = rect.right - rect.left; size_t dy = rect.bottom - rect.top; // create BITMAPINFO structure // used by CreateDIBSection BITMAPINFO info; info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); info.bmiHeader.biWidth = dx; info.bmiHeader.biHeight = dy; info.bmiHeader.biPlanes = 1; info.bmiHeader.biBitCount = 24; info.bmiHeader.biCompression = BI_RGB; info.bmiHeader.biSizeImage = 0; info.bmiHeader.biXPelsPerMeter = 0; info.bmiHeader.biYPelsPerMeter = 0; info.bmiHeader.biClrUsed = 0; info.bmiHeader.biClrImportant = 0; // a bitmap handle and a pointer its bit data HBITMAP bitmap = 0; BYTE* memory = 0; // create bitmap HDC device = GetDC(capture); bitmap = CreateDIBSection(device, &info, DIB_RGB_COLORS, (void**)&memory, 0, 0); ReleaseDC(capture, device); if(!bitmap || !memory) return 1; // blit the contents of the desktop (winDC) // to the bitmap (selected in memDC) HDC winDC = GetWindowDC(capture); HDC memDC = CreateCompatibleDC(winDC); SelectObject(memDC, bitmap); BitBlt(memDC, 0, 0, dx, dy, winDC, 0, 0, SRCCOPY); DeleteDC(memDC); ReleaseDC(capture, winDC); char *buffer; sprintf(buffer,"capture%d%d.bmp",dx,dy); // create bitmap file basic_ofstream<char> file(buffer, ios::binary); if(!file) { DeleteObject(bitmap); return 1; } // initialize bitmap file headers BITMAPFILEHEADER fileHeader; BITMAPINFOHEADER infoHeader; fileHeader.bfType = 0x4d42; fileHeader.bfSize = 0; fileHeader.bfReserved1 = 0; fileHeader.bfReserved2 = 0; fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); infoHeader.biSize = sizeof(infoHeader); infoHeader.biWidth = dx; infoHeader.biHeight = dy; infoHeader.biPlanes = 1; infoHeader.biBitCount = 24; infoHeader.biCompression = BI_RGB; infoHeader.biSizeImage = 0; infoHeader.biXPelsPerMeter = 0; infoHeader.biYPelsPerMeter = 0; infoHeader.biClrUsed = 0; infoHeader.biClrImportant = 0; // save file headers file.write((char*)&fileHeader, sizeof(fileHeader)); file.write((char*)&infoHeader, sizeof(infoHeader)); // save 24-bit bitmap data int wbytes = (((24*dx + 31) & (~31))/8); int tbytes = (((24*dx + 31) & (~31))/8)*dy; file.write((char*)memory, tbytes); // delete bitmap DeleteObject(bitmap); bitmap = 0; memory = 0; ReleaseDC(HWND_DESKTOP,hdcDesk); RestoreDC(g_hMemDC,g_nDCdata); DeleteDC(g_hMemDC); DeleteObject(g_hDeskBmp); // close the file return 0; //...................................................................................... }undefined reference to `CreateCompatibleDC@4' undefined reference to `CreateCompatibleBitmap@12' undefined reference to `SaveDC@4' undefined reference to `SelectObject@8' ndefined reference to `BitBlt@36' undefined reference to `CreateDIBSection@24' undefined reference to `CreateCompatibleDC@4' undefined reference to `SelectObject@8' undefined reference to `BitBlt@36' undefined reference to `DeleteDC@4' undefined reference to `DeleteObject@4' undefined reference to `DeleteObject@4' undefined reference to `RestoreDC@8' undefined reference to `DeleteDC@4' undefined reference to `DeleteObject@4'
-
#pragma comment(lib, "gdi32.lib")sowas steht in der MSDN man

-
Ich habs mal einbisschen geändert, aber es läuft dennoch nicht, egal was ich hinzufüge.
Ich nutze den Code::Blocks#include <windows.h> #include <string> { HDC hdcScreen; HBITMAP hbmScreen; //---------------Bitmap Informationen BITMAPINFO infobmp; infobmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); infobmp.bmiHeader.biWidth = 1024; infobmp.bmiHeader.biHeight = 768; 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) + 1024*768*3 + sizeof(BITMAPINFOHEADER); bfheader.bfReserved1 = 0; bfheader.bfReserved2 = 0; bfheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //Bitmap ----------------------- Informationen hdcScreen = GetWindowDC(pScreen); hbmScreen = CreateCompatibleBitmap(hdcScreen,1024,768); // temporärer DC HDC hdcTemp = CreateCompatibleDC( hdcScreen ); // Bitmap reinselektieren HBITMAP hbmOld = (HBITMAP)SelectObject( hdcTemp, hbmScreen ); // Inhalt von Desktop übertragen BitBlt( hdcTemp, 0, 0, 1024, 768, hdcScreen, 0, 0, SRCCOPY ); int iResult = GetDIBits(hdcTemp,hbmScreen,0,768,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,1024*768*3,&word,NULL); ReleaseDC(pScreen,hdcScreen); CloseHandle(hfile); delete[] bitmap; }undefined reference to
CreateCompatibleDC@4' undefined reference toCreateCompatibleBitmap@12'
undefined reference toSaveDC@4' undefined reference toSelectObject@8'
ndefined reference toBitBlt@36' undefined reference toCreateDIBSection@24'
undefined reference toCreateCompatibleDC@4' undefined reference toSelectObject@8'
undefined reference toBitBlt@36' undefined reference toDeleteDC@4'Compilerbedingt habe ich nicht die stdxt.h drinn. Oder wie die auch immer heißt.