Tak jak w temacie.. Wziąłem kod samej funkcji i wstawilem w funkcje int main. Pierwsze dwie linijki w funkcji main sa moje (mysle ze one sa powodem bledu).
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
HWND okno = FindWindow( NULL, "Notatnik" );
char * plik = "E:\\lol.bmp";
HDC _dc = GetWindowDC( okno );
RECT re;
GetWindowRect( okno, & re );
int w = re.right, h = re.bottom;
HDC dc = CreateCompatibleDC( 0 );
HBITMAP bm = CreateCompatibleBitmap( _dc, w, h );
SelectObject( dc, bm );
StretchBlt( dc, 0, 0, w, h, _dc, 0, 0, w, h, SRCCOPY );
void * f = CreateFile( plik, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 );
void * buf = new char[ w * h * 4 ];
GetObject( bm, 84, buf );
HDC ddd = GetDC( 0 );
HDC dc2 = CreateCompatibleDC( ddd );
tagBITMAPINFO bi;
bi.bmiHeader.biSize = sizeof( bi.bmiHeader );
bi.bmiHeader.biWidth = w;
bi.bmiHeader.biHeight = h;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 32;
bi.bmiHeader.biCompression = 0;
bi.bmiHeader.biSizeImage = 0;
CreateDIBSection( dc, & bi, DIB_RGB_COLORS, & buf, 0, 0 );
GetDIBits( dc, bm, 0, h, buf, & bi, DIB_RGB_COLORS );
BITMAPFILEHEADER bif;
bif.bfType = MAKEWORD( 'B', 'M' );
bif.bfSize = w * h * 4 + 54;
bif.bfOffBits = 54;
BITMAPINFOHEADER bii;
bii.biSize = 40;
bii.biWidth = w;
bii.biHeight = h;
bii.biPlanes = 1;
bii.biBitCount = 32;
bii.biCompression = 0;
bii.biSizeImage = w * h * 4;
DWORD r;
WriteFile( f, & bif, sizeof( bif ), & r, NULL );
WriteFile( f, & bii, sizeof( bii ), & r, NULL );
WriteFile( f, buf, w * h * 4, & r, NULL );
CloseHandle( f );
cout << "bla bla bla1" << endl;
return 0;
cout << "bla bla bla2" << endl;
}
Nie wiem tez czemu za kazdym razem podczas wylaczania programu wyskakuje blad. Jezeli zamiast return wstawie Sleep(10000) (10 sec) to program czeka 10 sec od wlaczenia. Kiedy wylacze go na krzyzyku zanim uplynie 10 sec wyskakuje ten sam blad co przy return (blad systemowu o tresci "trwa wyszukiwanie bledu" i wyszukuje blad).