Скриншот на С++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Aleks20, 28 Aug 2015.

  1. Aleks20

    Aleks20 New Member

    Joined:
    5 Jun 2015
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Привет всем. Хочу разобраться как программно снять скриншот есть исходник http://forum.antichat.ru/threads/322063/#post-3048264 работаю на VS2010, копирую код добавляю #include "stdafx.h", но не работает выдает ошибки такого рода в чем проблема?
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2440: инициализация: невозможно преобразовать "const char [37]" в "int"
    • 1> Не существует контекста, в котором такое преобразование возможно
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "IImageBytes"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2470: IImageBytes: выглядит как определение функции, но без списка параметров; пропускается вероятное тело функции
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2059: синтаксическая ошибка: public
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(280): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "id"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(280): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(280): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(384): error C2061: синтаксическая ошибка: идентификатор "IStream"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(395): error C2061: синтаксическая ошибка: идентификатор "IStream"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(405): error C2061: синтаксическая ошибка: идентификатор "IStream"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(443): error C2061: синтаксическая ошибка: идентификатор "PROPID"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(444): error C2061: синтаксическая ошибка: идентификатор "PROPID"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(445): error C2061: синтаксическая ошибка: идентификатор "PROPID"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(453): error C2061: синтаксическая ошибка: идентификатор "PROPID"
    • 1>c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(471): error C2535: Gdiplus::Image::Image(void): функция-член уже определена или объявлена
    • 1> c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(384): см. объявление "Gdiplus::Image::Image"
     
  2. grimnir

    grimnir Members of Antichat

    Joined:
    23 Apr 2012
    Messages:
    1,114
    Likes Received:
    830
    Reputations:
    231
    Все объявления должны явно содержать тип т.к тип int больше не предполагается по умолчанию.
    Code:
    #include "stdafx.h"
    #include <windows.h>
    #include <stdio.h>
    #include <iostream>
    
    #include <gdiplus.h>
    
    using namespace std;
    
    #pragma comment(lib, "GdiPlus.lib") /* наш многострадальный lib-файл */
    using namespace Gdiplus; /* как хочешь, но мне не в кайф постоянно писать Gdiplus:: */
    
    static const GUID png =
    { 0x557cf406, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e } };
    
    
    int main()
    {
        GdiplusStartupInput gdiplusStartupInput;
        ULONG_PTR gdiplusToken;
        GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    
        HDC scrdc, memdc;
        HBITMAP membit;
        // Получаем HDC рабочего стола
        // Параметр HWND для рабочего стола всегда равен нулю.
        scrdc = GetDC(0);
        // Определяем разрешение экрана
        int Height, Width;
        Height = GetSystemMetrics(SM_CYSCREEN);
        Width = GetSystemMetrics(SM_CXSCREEN);
        // Создаем новый DC, идентичный десктоповскому и битмап размером с экран.
        memdc = CreateCompatibleDC(scrdc);
        membit = CreateCompatibleBitmap(scrdc, Width, Height);
        SelectObject(memdc, membit);
        // Улыбаемся... Снято!
        BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);
        HBITMAP hBitmap;
        hBitmap =(HBITMAP) SelectObject(memdc, membit);
         Gdiplus::Bitmap bitmap(hBitmap, NULL);
        bitmap.Save(L"c:\\screen.png", &png);
    
        DeleteObject(hBitmap);
    
        //GdiplusShutdown(gdiplusToken);
        return 0;
    }
     
    _________________________
  3. Aleks20

    Aleks20 New Member

    Joined:
    5 Jun 2015
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Спасибо заработало.
     
  4. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    ты это вообще к чему? :D