Снятие screenshota

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Снятие screenshota

Сообщение -=TsA=- » 20.07.2005 (Ср) 12:31

Народ, кто силен в сях, перевидите пожалуйста на VB:

Код: Выделить всё

HRESULT
SaveSnapshotToBMP(
    LPCWSTR pwcPath,
    IVMRWindowlessControl* pWindowless
    )
{
    HRESULT hr = S_OK;
    LPBYTE              lpBuffer        = NULL;
    BITMAPINFOHEADER*   pbih            = NULL;
    LPBYTE              lpDib           = NULL;
    BITMAPFILEHEADER    FileHeader;
    HANDLE              hFile           = INVALID_HANDLE_VALUE;
    const int           iSZFileHeader   = 14;
    DWORD               iWritten        = 0L;
    DWORD               dwSize          = 0L;

    // check input params here

    // _HR is defined as if( FAILED( hr )) break;

    Do
    {
        _HR( hr = pWindowless->GetCurrentImage( &lpBuffer ));

        // lpBuffer is simply { BITMAPINFOHEADER + DIB bits }
        pbih = (BITMAPINFOHEADER*)lpBuffer;
        lpDib = lpBuffer + pbih->biSizeImage;

        // fill in the file header
        FileHeader.bfType = static_cast<WORD>(L'B' | (L'M' << 8));
        FileHeader.bfSize = pbih->biSize + iSZFileHeader + pbih->biSizeImage;
        FileHeader.bfReserved1 = 0;
        FileHeader.bfReserved2 = 0;
        FileHeader.bfOffBits = iSZFileHeader + pbih->biSize;

        // create a file
        hFile = CreateFile( pwcPath,
                            GENERIC_WRITE,
                            0,
                            NULL,
                            CREATE_ALWAYS,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL);

        if( INVALID_HANDLE_VALUE == hFile )
        {
            _HR( hr = HRESULT_FROM_WIN32(GetLastError()) );
        }

        // write to a BMP file: FILE HEADER + BITMAP HEADER + DIB bits

        // write file header
        if( !WriteFile( hFile,
                        static_cast<LPVOID>(&FileHeader),
                        iSZFileHeader,
                        &iWritten,
                        NULL) )
        {
            _HR( hr = HRESULT_FROM_WIN32(GetLastError()));
        }

        // write bitmapinfoheader
        if( !WriteFile( hFile,
                        static_cast<LPVOID>(pbih),
                        pbih->biSize,
                        &iWritten,
                        NULL) )
        {
            _HR( hr = HRESULT_FROM_WIN32(GetLastError()));
        }

        // write dib section
        dwSize = pbih->biSizeImage;

        if( !dwSize && (pbih->biCompression == BI_RGB) )
        {
            DWORD h = ( pbih->biHeight > 0 ) ? pbih->biHeight : -(pbih->biHeight);
            dwSize = h * pbih->biWidth * pbih->biBitCount / 8;
        }
        if( !WriteFile( hFile, static_cast<LPVOID>(pDib), dwSize, &iWritten, NULL) )
        {
            _HR( hr = HRESULT_FROM_WIN32(GetLastError()));
        }
    }while( FALSE );

    if( INVALID_HANDLE_VALUE != hFile )
    {
        CloseHandle( hFile );
    }
    // do not forget to release the buffer
    if( lpBuffer )
    {
      ::CoTastMemFree( lpBuffer );
    }
    return hr;
}


PS. Родина Вас не забудет!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.07.2005 (Ср) 13:04

Это не скриншот, это снапшот...
По всей видимости, это будет
Код: Выделить всё
SavePicture Image1.Image, "c:\1.bmp"



Ну, это к вопросу о выборе языка программирования :)



Зы: оффтопик, это совсем не C# :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Сообщение -=TsA=- » 20.07.2005 (Ср) 14:42

Нее, надо снять скриншот с avi файла (оверлея), таким способом можно получить толко черный квадрат известного художника...

более подробно здес:

http://www.rsdn.ru/Forum/Message/863111.htm

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.07.2005 (Ср) 14:44

В любом случае, объект IVMRWindowlessControl надо откуда-то взять? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Сообщение -=TsA=- » 21.07.2005 (Чт) 6:58

Ну, я так думаю он у всех есть
Инструкция по подключению прилогается
У вас нет доступа для просмотра вложений в этом сообщении.


Вернуться в C#

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList