Display screen remotely

Started by
58 comments, last by David Lake 10 years, 8 months ago


Just make sure to pass a NULL pointer the first time this function is called

Please clarify?

Advertisement

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);
}

Also, i've created an empty console project, so don't try to include stdafx.h

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.

Maybe your forgot to turn unicode off? what errors do you get? can you paste them?

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

This topic is closed to new replies.

Advertisement