Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для coder1
2 / 2 / 1
Регистрация: 04.02.2012
Сообщений: 49

WIN API QTSDK C++

17.10.2012, 12:35. Показов 2749. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пишу программу которая скринит экран и сохроняет в BMP файл .. в вижуал студии этот код работает, проверял.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <QtCore/QCoreApplication>
#include <QTextCodec>
#include <iostream>
#include <QTextStream>
#include <QString>
#include <fstream>
#include <Windows.h>
#include <vector>
 
#include <tlhelp32.h>
#pragma comment (lib, "psapi.lib")
#include <wininet.h>
#include <conio.h>
 
#include <sstream>
#include <string>
using namespace std;
 
PBITMAPINFO CreateBitmapInfoStruct(HBITMAP hBmp)
{
    BITMAP bmp;
    PBITMAPINFO pbmi;
    WORD    cClrBits;
    if (!GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp))
      exit(1);
    cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);
    if (cClrBits == 1)
        cClrBits = 1;
    else if (cClrBits <= 4)
        cClrBits = 4;
    else if (cClrBits <= 8)
        cClrBits = 8;
    else if (cClrBits <= 16)
        cClrBits = 16;
    else if (cClrBits <= 24)
        cClrBits = 24;
    else cClrBits = 32;
     if (cClrBits != 24)
         pbmi = (PBITMAPINFO) LocalAlloc(LPTR,
                    sizeof(BITMAPINFOHEADER) +
                    sizeof(RGBQUAD) * (1<< cClrBits));
     else
         pbmi = (PBITMAPINFO) LocalAlloc(LPTR,
                    sizeof(BITMAPINFOHEADER));
    pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    pbmi->bmiHeader.biWidth = bmp.bmWidth;
    pbmi->bmiHeader.biHeight = bmp.bmHeight;
    pbmi->bmiHeader.biPlanes = bmp.bmPlanes;
    pbmi->bmiHeader.biBitCount = bmp.bmBitsPixel;
    if (cClrBits < 24)
        pbmi->bmiHeader.biClrUsed = (1<<cClrBits);
    pbmi->bmiHeader.biCompression = BI_RGB;
    pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits +31) & ~31) /8
                                  * pbmi->bmiHeader.biHeight;
     pbmi->bmiHeader.biClrImportant = 0;
     return pbmi;
 }
void CreateBMPFile(LPTSTR pszFile,
                  HBITMAP hBMP, HDC hDC)
 {
    PBITMAPINFO pbi;
    HANDLE hf;
    BITMAPFILEHEADER hdr;
    PBITMAPINFOHEADER pbih;
    LPBYTE lpBits;
    DWORD dwTotal;
    DWORD cb;
    BYTE *hp;
    DWORD dwTmp;
    pbi = CreateBitmapInfoStruct(hBMP);
    pbih = (PBITMAPINFOHEADER) pbi;
    lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);
    if (!lpBits)
          exit(1);
    if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi,
        DIB_RGB_COLORS))
    {
        exit(1);
    }
    hf = CreateFile(pszFile,GENERIC_READ | GENERIC_WRITE,(DWORD) 0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
    if (hf == INVALID_HANDLE_VALUE)
        exit(1);
    hdr.bfType = 0x4d42;
    hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +
                 pbih->biSize + pbih->biClrUsed
                 * sizeof(RGBQUAD) + pbih->biSizeImage);
    hdr.bfReserved1 = 0;
    hdr.bfReserved2 = 0;
    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +
                    pbih->biSize + pbih->biClrUsed
                    * sizeof (RGBQUAD);
    if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),
        (LPDWORD) &dwTmp,  NULL))
    {
       exit(1);
    }
    if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)
                  + pbih->biClrUsed * sizeof (RGBQUAD),
                  (LPDWORD) &dwTmp, ( NULL)) )
         exit(1);
    dwTotal = cb = pbih->biSizeImage;
    hp = lpBits;
    if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL))
         exit(1);
 
 
     if (!CloseHandle(hf))
           exit(1);
 
 
    GlobalFree((HGLOBAL)lpBits);
}
 
int main()
{
    HDC hdcScreen, hdcCompatible;
    HBITMAP hbmScreen;
 
 
    hdcScreen = CreateDC(L"DISPLAY",NULL,NULL,NULL);
    if (!hdcScreen)
       exit(1);
    hdcCompatible = CreateCompatibleDC(hdcScreen);
    if (!hdcCompatible)
        exit(1);
 
    hbmScreen = CreateCompatibleBitmap(hdcScreen,
        GetDeviceCaps(hdcScreen, HORZRES),
        GetDeviceCaps(hdcScreen, VERTRES));
    if (!hbmScreen)
     exit(1);
 
    if (!SelectObject(hdcCompatible,hbmScreen))
       exit(1);
 
    if (!BitBlt(hdcCompatible,0,0,
        GetDeviceCaps(hdcCompatible,HORZRES),
        GetDeviceCaps(hdcCompatible,VERTRES),
        hdcScreen,0,0,SRCCOPY))
        exit(1);
 
    CreateBMPFile(L"screen.bmp",hbmScreen,hdcCompatible);
 
    DeleteObject(hbmScreen);
    DeleteDC(hdcScreen);
    DeleteDC(hdcCompatible);
 
    return 0;
}
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__GetObjectW@12 в функции "struct tagBITMAPINFO * __cdecl CreateBitmapInfoStruct(struct HBITMAP__ *)" (?CreateBitmapInfoStruct@@YAPAUtagBITMAP INFO@@PAUHBITMAP__@@@Z)
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__GetDIBits@28 в функции "void __cdecl CreateBMPFile(unsigned short *,struct HBITMAP__ *,struct HDC__ *)" (?CreateBMPFile@@YAXPAGPAUHBITMAP__@@PAU HDC__@@@Z)
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__DeleteDC@4 в функции _main
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__DeleteObject@4 в функции _main
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__BitBlt@36 в функции _main
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__SelectObject@8 в функции _main
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__CreateCompatibleBitmap@12 в функции _main
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__GetDeviceCaps@8 в функции _main
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__CreateCompatibleDC@4 в функции _main
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __imp__CreateDCW@16 в функции _main

---------------------
компилю в MSVC2010 4.8.2 --- да там даже в чём хош компиль .. наверняка это связано с кодировкой ..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2012, 12:35
Ответы с готовыми решениями:

WIN API устарел как начать программировать на C++ .NET API (Без VisualStudio)
WIN API устарел как начать программировать на C++ .NET API (Без VisualStudio)

WIN API
Доброе время суток. Учусь в институте и дали сделать такую хрень: Реализовать приложения Win32API: 1. Окно в центре экрана с фоном...

Win API
Как получить доступ к элементам другого приложения?? Например запущена какая нить прога на ней имеется полоса прокрутки мне надо ее...

22
 Аватар для coder1
2 / 2 / 1
Регистрация: 04.02.2012
Сообщений: 49
18.10.2012, 11:39  [ТС]
Студворк — интернет-сервис помощи студентам
Dmitriy_M, Диман я к тебя щя обращаюсь как к единомышленнику .. давай не будем спорить .. веть каждый нахваливает своё болото .. ты вот научился в эклипс .. превык уже к ней .. и тебе там кажеться лучше .. а кто то мне вон втерает что в вижуал студии на MFC лучше .. и каждый трёт свою тему .. лично я 3 года кодил на вижуал студии и вот уже 2 месяца на QT .. и знаешь меня пока QT радует больще чем вижуал за все эти три года .. и твоё мнение и мнение других меня не переубедит .. это мой выбор .. моё решение .. потому что я знаю для каких целей мне это нужно и чего я этим хочу добиться .. веть каждый инструмент в своём деле хорош .. так что твой спор это пустая демогогия .. которая ведёт лишь к конфликтам и разногласиям ..

Добавлено через 2 минуты
когда ты заходишь на тему форума относящиюся к QT не стоит пропогондировать всякие эклипсы и тп .. это называеться рекламой .. и разговором не по теме .. за это ставят бан ..
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
18.10.2012, 11:43
coder1, ты спрашивал про IDE, я и ответил.
А дальше пошло твое незнание.
0
 Аватар для coder1
2 / 2 / 1
Регистрация: 04.02.2012
Сообщений: 49
18.10.2012, 11:46  [ТС]
Dmitriy_M, ладно окей ... просто давай эту тему уже закроем ... ответ на свой первый вопрос я уже давно нашёл .. а дальше уже какой то чат развился ..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2012, 11:46

Win API
Посоветуйте пожалуйста какую-нибудь хорошую книжку по WinAPI в c#

API Win 32
Вообщем-то нужно определить конфигурацию компьютера посредствам функций api win 32. Какие диски, чтение каталогов... Но я не пойму, что это...

WIN API C++
Недавно заинтересовался win api, с++ знаю только по консоли и с++ билдере. У меня 2 вопроса) 1. Стоит ли учить win API, насколько он...

Literature on Win API
I need Manual or similar kinds of text information on win API.

Win API в Windows 7
Здравствуйте! Пдскажите, пожалуйста, почему не работает следующая строка в Delphi7 procedure TFMain.Label9Click(Sender: TObject); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru