Just make sure to pass a NULL pointer the first time this function is called
Please clarify?
I dont know how it's done in c# but in c++ you have to initalize pointers to NULL before using them most of the time, and this is one of those time, otherwise it will crash by calling delete [] on invalid memory location.
ex. (in c++)
// When program start
BYTE *pBuffer = NULL;
...
// Later...
int BufferSize = GenScreenShot(pBuffer);
...
// Just before quitting program
if(pBuffer)
delete [] pBuffer;
You should include "Windows.h", it has every windows related header inside it.
Oh right, in C# we make a byte array like this: var array=new byte[size]; (var specifies the type implicitly which I prefer) then garbage collection automatically gets rid of it.
I included Windows.h and WinGDI.h but theres still 150 errors and BMISize is undefined.
Also in DrawCursor (you spelled it incorrectly) WinVer and _WIN_VISTA_ are undefined.
This compile just fine with visual studio
#include "Windows.h"
const int BMISize = sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);
int GenScreenShot(BYTE *pBuffer)
{
HWND hDesktopWnd = GetDesktopWindow();
HDC hdc = GetDC(hDesktopWnd);
int x = 0;
int y = 0;
int w = GetSystemMetrics(SM_CXSCREEN);
int h = GetSystemMetrics(SM_CYSCREEN);
HDC s_hdc = CreateCompatibleDC(hdc);
HBITMAP hbmp = CreateCompatibleBitmap(hdc, w,h);
HBITMAP ex_hbmp = (HBITMAP)SelectObject(s_hdc, hbmp);
/////////////////////////////////////////////////////////////////////////////////////////
// Copy the screen image in our bitmap
BitBlt(s_hdc, x,y,w,h, hdc, x,y, SRCCOPY);
// Draw the cursor over the image
//if(ShowCursor)
// DrawCurcor(s_hdc);
ReleaseDC(hDesktopWnd, hdc);
/////////////////////////////////////////////////////////////////////////////////////////
if(pBuffer)
delete [] pBuffer;
DWORD NumPixels = w * h;
DWORD BufSize = NumPixels * 3;
// Allocate buffers
pBuffer = new BYTE[BufSize];
ZeroMemory(pBuffer, BufSize);
// Allocate a BITMAPINFO buffer
LPBITMAPINFO lpbi = (LPBITMAPINFO)(new BYTE[BMISize]);
ZeroMemory(lpbi, sizeof(BITMAPINFO));
lpbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
// De-select our hbmp
SelectObject(s_hdc, ex_hbmp);
// Get information about the screenshot image format
GetDIBits(s_hdc, hbmp, 0, h, NULL, lpbi, DIB_RGB_COLORS);
lpbi->bmiHeader.biCompression = BI_RGB;
// Make sure it's gonna be extracted in 24 bits format
lpbi->bmiHeader.biBitCount = 24;
lpbi->bmiHeader.biSizeImage = BufSize;
// Extract the image in 24 bits format
GetDIBits(s_hdc, hbmp, 0, h, pBuffer, lpbi, DIB_RGB_COLORS);
// Delete the BITMAPINFO buffer
if(lpbi)
delete [] lpbi;
// Release the bitmap handles
if(SelectObject(s_hdc, hbmp)){
DeleteObject(hbmp);
DeleteDC(s_hdc);
}
return BufSize;
}
void DeleteScreenShotBuffer(BYTE *pBuffer)
{
if(pBuffer)
delete [] pBuffer;
}
int main()
{
BYTE *pBuffer = NULL;
GenScreenShot(pBuffer);
DeleteScreenShotBuffer(pBuffer);
return 0;
}
It's a console program but it shouldn't be too hard to make a dll with it.
Yea i commented DrawCursor because it's not very usefull to see 2 cursor one under the other, just comment the function.
If you really wanna use it just remove some code (lol, never noticed the typo before, thx)
void DrawCursor(HDC hDC)
{
CURSORINFO CursorInfo;
CursorInfo.cbSize = sizeof(CURSORINFO);
GetCursorInfo(&CursorInfo);
//static DWORD Version = WinVer.DetectWindowsVersion();
//static HCURSOR hCur = LoadCursor(NULL, IDC_ARROW);
DWORD CursorWidth = GetSystemMetrics(SM_CXCURSOR);
DWORD CursorHeight = GetSystemMetrics(SM_CYCURSOR);
POINT CursorPos;
GetCursorPos(&CursorPos);
// Needed for XP or older windows
/*if(Version < _WIN_VISTA_){
CursorPos.x -= CursorWidth >> 2;
CursorPos.y -= CursorHeight >> 2;
}*/
DrawIconEx(hDC, CursorPos.x, CursorPos.y, CursorInfo.hCursor, CursorWidth, CursorHeight, 0, NULL, DI_NORMAL);
}
I still cant figure out the errors in wingdi.h, winuser.h, winspool.h, wincon.h, imm.h and commdlg.h, they are mostly things like identifier PDEVMODEW is undefined.
Error 1 error : identifier "POINT" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\WinGDI.h 285 1 QuickLZ
Error 2 error : identifier "POINT" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\WinGDI.h 286 1 QuickLZ
Error 3 error : identifier "WORD" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\WinGDI.h 287 1 QuickLZ
Error 4 error : identifier "WORD" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\WinGDI.h 288 1 QuickLZ
Error 5 error : identifier "DEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 1192 1 QuickLZ
Error 6 error : identifier "DEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 1202 1 QuickLZ
Error 7 error : identifier "DEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 1218 1 QuickLZ
Error 8 error : identifier "DEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 1230 1 QuickLZ
Error 9 error : identifier "BLENDFUNCTION" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 3959 1 QuickLZ
Error 10 error : identifier "BLENDFUNCTION" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 3974 1 QuickLZ
Error 11 error : identifier "LOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10746 1 QuickLZ
Error 12 error : identifier "LOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10749 1 QuickLZ
Error 13 error : identifier "LOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10752 1 QuickLZ
Error 14 error : identifier "LOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10753 1 QuickLZ
Error 15 error : identifier "LOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10754 1 QuickLZ
Error 16 error : identifier "LOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10767 1 QuickLZ
Error 17 error : identifier "LOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10770 1 QuickLZ
Error 18 error : identifier "LOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10773 1 QuickLZ
Error 19 error : identifier "LOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10774 1 QuickLZ
Error 20 error : identifier "LOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10775 1 QuickLZ
Error 21 error : identifier "LOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10823 1 QuickLZ
Error 22 error : identifier "LOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10831 1 QuickLZ
Error 23 error : variable "ChangeDisplaySettingsA" may not be initialized C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10951 1 QuickLZ
Error 24 error : identifier "DEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10952 1 QuickLZ
Error 25 error : identifier "lpDevMode" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10952 1 QuickLZ
Error 26 error : expected a ")" C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10952 1 QuickLZ
Error 27 error : variable "ChangeDisplaySettingsW" may not be initialized C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10957 1 QuickLZ
Error 28 error : identifier "DEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10958 1 QuickLZ
Error 29 error : expected a ")" C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10958 1 QuickLZ
Error 30 error : "DEVMODEA" is not a type name C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10971 1 QuickLZ
Error 31 error : "DEVMODEW" is not a type name C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10980 1 QuickLZ
Error 32 error : "DEVMODEA" is not a type name C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 10999 1 QuickLZ
Error 33 error : "DEVMODEW" is not a type name C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 11006 1 QuickLZ
Error 34 error : "DEVMODEA" is not a type name C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 11021 1 QuickLZ
Error 35 error : "DEVMODEW" is not a type name C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 11029 1 QuickLZ
Error 36 error : identifier "PDISPLAY_DEVICEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 11047 1 QuickLZ
Error 37 error : identifier "PDISPLAY_DEVICEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h 11055 1 QuickLZ
Error 38 error : identifier "LF_FACESIZE" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincon.h 209 1 QuickLZ
Error 39 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 79 1 QuickLZ
Error 40 error : identifier "LPDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 102 1 QuickLZ
Error 41 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 205 1 QuickLZ
Error 42 error : identifier "LPDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 208 1 QuickLZ
Error 43 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 221 1 QuickLZ
Error 44 error : identifier "LPDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 224 1 QuickLZ
Error 45 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 377 1 QuickLZ
Error 46 error : identifier "LPDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 402 1 QuickLZ
Error 47 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 443 1 QuickLZ
Error 48 error : identifier "LPDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 469 1 QuickLZ
Error 49 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1181 1 QuickLZ
Error 50 error : identifier "LPDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1186 1 QuickLZ
Error 51 error : identifier "PDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1927 1 QuickLZ
Error 52 error : identifier "PDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1928 1 QuickLZ
Error 53 error : identifier "PDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1937 1 QuickLZ
Error 54 error : identifier "PDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1938 1 QuickLZ
Error 55 error : identifier "PDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1953 1 QuickLZ
Error 56 error : identifier "PDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1954 1 QuickLZ
Error 57 error : identifier "PDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1962 1 QuickLZ
Error 58 error : identifier "PDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1963 1 QuickLZ
Error 59 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1976 1 QuickLZ
Error 60 error : identifier "LPDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 1979 1 QuickLZ
Error 61 error : identifier "PDEVMODEA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 3041 1 QuickLZ
Error 62 error : identifier "PDEVMODEW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h 3047 1 QuickLZ
Error 63 error : identifier "LPLOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\commdlg.h 638 1 QuickLZ
Error 64 error : identifier "LPLOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\commdlg.h 661 1 QuickLZ
Error 65 error : identifier "LPDEVMODE" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\commdlg.h 958 1 QuickLZ
Error 66 error : identifier "LPLOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\imm.h 254 1 QuickLZ
Error 67 error : identifier "LPLOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\imm.h 255 1 QuickLZ
Error 68 error : identifier "LPLOGFONTA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\imm.h 262 1 QuickLZ
Error 69 error : identifier "LPLOGFONTW" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\imm.h 263 1 QuickLZ
Error 70 error : identifier "TEXTMETRICA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\WinGDI.h 2843 1 QuickLZ
Error 71 error : identifier "TEXTMETRICA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\WinGDI.h 3184 1 QuickLZ
Error 72 error : identifier "LPTEXTMETRICA" is undefined C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\WinGDI.h 4304 1 QuickLZ
Error 73 error #10298: problem during post processing of parallel object compilation C:\Users\Administrator\Documents\Visual Studio 2010\Projects\QuickLZ\QuickLZ\icl QuickLZ