Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Winapi] - nie działa screen shot okna

Ostatnio zmodyfikowano 2014-11-17 15:04
Autor Wiadomość
matka5432
Temat założony przez niniejszego użytkownika
[Winapi] - nie działa screen shot okna
» 2014-11-17 15:04:47
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).
Oto kod:

C/C++
#define _WIN32_WINNT    0x0501
#include <windows.h>
#include <iostream>


using namespace std;

int main()
{
    HWND okno = FindWindow( NULL, "Notatnik" );
    char * plik = "E:\\lol.bmp";
   
    /// odtad zaczyna sie skopiowa funkcja
    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 );
    /// A tutaj sie koncczy
    cout << "bla bla bla1" << endl; /// to sie wyswietla
    return 0;
    cout << "bla bla bla2" << endl; /// to nie, poniewaz przy wylaczeniu programu za kazdym razem wyskakuje bład
}
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).


P-120868
« 1 »
  Strona 1 z 1