Screenshot capture d'ecran

Contenu du snippet

J'avais besoin d'un screenshot en asm
J'ai eu beaucoup de mal a trouver des sources
finalement j'ai adapter une source c++ en assembleur (MASM32)

Source / Exemple :


.486 
.model flat,stdcall 
option casemap:none 

include \masm32\include\windows.inc 
include \masm32\include\user32.inc 
include \masm32\include\kernel32.inc 
include \masm32\include\gdi32.inc 
include \masm32\include\masm32.inc 

includelib \masm32\lib\user32.lib 
includelib \masm32\lib\kernel32.lib 
includelib \masm32\lib\gdi32.lib 
includelib \masm32\lib\masm32.lib 

.data
bmpname	db "c:\toto.bmp",0

.data?

	hDC HDC			?
	hMemDC HDC	?
	hBits	 HANDLE ?
	hFile	 HANDLE ?
	hBitmap	 HBITMAP ?
	lpBits LPVOID ?
	dwWritten	dd ? ;temp
	Pixel		dd ?
	_Height	DD ?
	_Width	DD ?
	bmFH		BITMAPFILEHEADER <>
	bih		BITMAPINFOHEADER <>

.code
start:
	invoke GetDC,0
	mov hDC,eax
	invoke GetSystemMetrics,SM_CXSCREEN
	mov _Width,eax
	invoke GetSystemMetrics,SM_CYSCREEN
	mov _Height,eax
	invoke GetDeviceCaps,hDC, BITSPIXEL
	mov Pixel,eax
	invoke CreateCompatibleDC,hDC
	mov hMemDC,eax
	invoke CreateCompatibleBitmap,hDC, _Width, _Height
	mov hBitmap,eax
	mov ecx,sizeof BITMAPINFO
	mov ebx,sizeof RGBQUAD
	mov eax,256
	mul ebx
	add eax,ecx
	invoke GlobalAlloc,GHND,eax
	mov edx,eax
	invoke GlobalLock,edx
	mov esi,eax
	invoke SelectObject,hMemDC, hBitmap
	invoke BitBlt,hMemDC,0,0,_Width,_Height,hDC,0,0,SRCCOPY
	mov bih.biSize,sizeof BITMAPINFOHEADER
	push	_Width
	pop	bih.biWidth
	push	_Height
	pop	bih.biHeight
	mov	bih.biPlanes,1
	mov	eax,Pixel
	mov	bih.biBitCount,ax
	mov	bih.biCompression,0
 	invoke	GetDIBits,hDC, hBitmap, 0,_Height, NULL, esi, DIB_RGB_COLORS
	invoke GetDeviceCaps,hDC, SIZEPALETTE
 	mov	ebx,sizeof RGBQUAD
 	mul	ebx
 	mov	ebx,eax
 	mov	eax,_Width
 	mul	_Height
 	mul	Pixel
 	shr	eax,3
 	mov	edi,eax
 	mov 	bmFH.bfType,4d42h
 	mov	eax,ebx
 	add	eax,sizeof BITMAPINFOHEADER
 	add	eax,sizeof BITMAPFILEHEADER
 	mov	bmFH.bfOffBits,eax
 	mov	eax,edi
 	add	eax,bmFH.bfOffBits
 	mov	bmFH.bfSize,eax
 	mov	bmFH.bfReserved1,0
 	mov	bmFH.bfReserved2,0
 	invoke	CreateFile,ADDR bmpname, GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
 	mov	hFile,eax
	invoke	WriteFile,hFile, addr bmFH, sizeof BITMAPFILEHEADER , ADDR dwWritten, NULL
	invoke WriteFile,hFile, addr bih, sizeof BITMAPINFOHEADER , ADDR dwWritten, NULL
	
	invoke GlobalAlloc,GHND, edi
	mov	hBits,eax 
 	invoke	GlobalLock,hBits
 	mov	lpBits,eax
 	invoke	GetDIBits,hDC, hBitmap, 0,_Height, lpBits, addr bih, DIB_RGB_COLORS
 	invoke WriteFile,hFile,lpBits,edi,ADDR dwWritten,NULL
 	invoke	GlobalUnlock,hBits
 	invoke GlobalFree,hBits

 	invoke GlobalUnlock,esi
 	invoke	GlobalFree,edx
 	invoke DeleteObject,hBitmap
 	invoke DeleteDC,hMemDC
 	invoke	ReleaseDC,0,hDC
 	invoke CloseHandle,hFile
ret

end start

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.