Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/33: Рейтинг темы: голосов - 33, средняя оценка - 4.91
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
1

Как передать скриншот (принтскрин) по TCP ?

25.06.2013, 16:38. Показов 6818. Ответов 45
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Интересует 2 вещи:
  • Как сделать снимок экрана НЕ используя буфер обмена.
  • И результат передать по протоколу TCP ?
Сам процесс передачи не очень важен, главное это как сделанный снимок перевести в строку и потом при получении строки получить из неё картинку обратно!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2013, 16:38
Ответы с готовыми решениями:

Как сделать скриншот и передать его?
Уважаемые форумчане, искал подобную тему, но так и не нашёл темы, в которой будет подробный ответ...

Socket TCP на C++. Как передать данные в формате JSON
Доброго времени суток товарищи программисты. Подскажите пожалуйста! Есть написан на C++ TCP...

Как сделать принтскрин из программы??
Как сделать принтскрин из программы?? Чтобы потом его можно было из буфера вставить в Image? Может...

Передать по TCP
Я хочу передать с клиента TCP андроид на Qt TCP сервер изображение, байты звука, размеры и хочу это...

45
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
02.07.2013, 15:50 21
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Author24 — интернет-сервис помощи студентам
Вот накидал небольшой примерчик, сохранение без буфера обмена в байтовый массив с жатием Jpeg. Этот массив можно передавать. Если откомпилировать со всеми 6-ю оптимизациями, довольно быстро будет обрабатываться.
Visual Basic
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
150
151
152
153
154
155
156
157
158
159
Option Explicit
 
Private Type RGBQUAD
    rgbBlue As Byte
    rgbGreen As Byte
    rgbRed As Byte
    rgbReserved As Byte
End Type
Private Type BITMAPINFOHEADER
    biSize As Long
    biWidth As Long
    biHeight As Long
    biPlanes As Integer
    biBitCount As Integer
    biCompression As Long
    biSizeImage As Long
    biXPelsPerMeter As Long
    biYPelsPerMeter As Long
    biClrUsed As Long
    biClrImportant As Long
End Type
Private Type BITMAPINFO
    bmiHeader As BITMAPINFOHEADER
    bmiColors As RGBQUAD
End Type
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type
Private Type GdiplusStartupInput
    GdiplusVersion As Long
    DebugEventCallback As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs As Long
End Type
Private Type EncoderParameter
    GUID As GUID
    NumberOfValues As Long
    type As Long
    Value As Long
End Type
Private Type EncoderParameters
    Count As Long
    Parameter As EncoderParameter
End Type
 
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function GetCurrentObject Lib "gdi32" (ByVal hdc As Long, ByVal uObjectType As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
 
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
Private Declare Function GetHGlobalFromStream Lib "ole32" (ByVal ppstm As Long, hGlobal As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 
Private Declare Function GdipSaveImageToStream Lib "GDIPlus" (ByVal Image As Long, ByVal Stream As IUnknown, clsidEncoder As Any, encoderParams As Any) As Long
Private Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As Long
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As Long
Private Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal Image As Long) As Long
Private Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal Image As Long, ByVal Filename As Long, clsidEncoder As GUID, encoderParams As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
 
Private Const OBJ_BITMAP = 7
 
Private Sub Form_Load()
    Dim dDc As Long, dhWnd As Long
    Dim tBmp As Long
    Dim iBmp As BITMAPINFO
    Dim Pix() As Long
    Dim IStream As IUnknown
    Dim hMem As Long
    Dim lSize As Long
    Dim lPt As Long
    Dim Dat() As Byte
    Dim fNum As Integer
    
    Dim X As Long, Y As Long
    
    dhWnd = GetDesktopWindow()
    dDc = GetDC(dDc)
    tBmp = GetCurrentObject(dDc, OBJ_BITMAP)
    
    iBmp.bmiHeader.biSize = Len(iBmp.bmiHeader)
    GetDIBits dDc, tBmp, 0, 0, 0&, iBmp, 0
    
    iBmp.bmiHeader.biBitCount = 32
    ReDim Pix(iBmp.bmiHeader.biWidth - 1, iBmp.bmiHeader.biHeight - 1)
    
    iBmp.bmiHeader.biHeight = -iBmp.bmiHeader.biHeight          ' Для нисходящих рисунков
    iBmp.bmiHeader.biCompression = 0                            ' Убираем компрессию если она есть
    
    GetDIBits dDc, tBmp, 0, -iBmp.bmiHeader.biHeight, Pix(0, 0), iBmp, 0
    ' В массиве Pix содержатся пиксели рисунка делай с ними что захочешь
    ' в моем примере инвертируем их
    
    For X = 0 To iBmp.bmiHeader.biWidth - 1: For Y = 0 To -iBmp.bmiHeader.biHeight - 1
        Pix(X, Y) = Pix(X, Y) Xor &HFFFFFF
    Next: Next
    
    ' Записываем в промежуточный Bitmap изменения
    tBmp = CreateCompatibleBitmap(dDc, iBmp.bmiHeader.biWidth, -iBmp.bmiHeader.biHeight)
    SetDIBits dDc, tBmp, 0, -iBmp.bmiHeader.biHeight, Pix(0, 0), iBmp, 0
       
    Erase Pix
    
    ReleaseDC dhWnd, dDc
     
    If CreateStreamOnHGlobal(0&, 1&, IStream) Then MsgBox "Ошибка создание потока": Exit Sub
    If Not SaveJPG(tBmp, IStream) Then MsgBox "Ошибка сохранение файла в поток": DeleteObject (tBmp): Exit Sub
    
    DeleteObject tBmp
    
    If GetHGlobalFromStream(ObjPtr(IStream), hMem) Then MsgBox "Ошибка получения хендла памяти": Exit Sub
    lSize = GlobalSize(hMem)
    If lSize Then
        lPt = GlobalLock(hMem)
        ReDim Dat(0 To lSize - 1)
        CopyMemory Dat(0), ByVal lPt, lSize
        GlobalUnlock hMem
    End If
    
'    ' Проверка
'    fNum = FreeFile
'    Open "D:\Temp.jpg" For Binary As fNum
'    Put fNum, , Dat
'    Close fNum
    
End Sub
Private Function SaveJPG(hBitmap As Long, Stream As IUnknown, Optional Quality As Byte = 50) As Boolean
    Dim SI As GdiplusStartupInput
    Dim token As Long, lBmp As Long
    Dim JpgEnc As GUID, Res As Long
    Dim Par As EncoderParameters
    
    SI.GdiplusVersion = 1
    If GdiplusStartup(token, SI) Then Exit Function
    If GdipCreateBitmapFromHBITMAP(hBitmap, 0, lBmp) Then GdiplusShutdown (token): Exit Function
    CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), JpgEnc
    Par.Count = 1
    Par.Parameter.NumberOfValues = 1
    Par.Parameter.type = 4
    Par.Parameter.Value = VarPtr(Quality)
    CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), Par.Parameter.GUID
    Res = GdipSaveImageToStream(lBmp, Stream, JpgEnc, Par)
    GdipDisposeImage lBmp
    GdiplusShutdown token
    If Res Then Exit Function
    SaveJPG = True
End Function
3
366 / 144 / 17
Регистрация: 06.03.2010
Сообщений: 301
Записей в блоге: 1
02.07.2013, 17:28 22
Это работает, только у меня изображение инверсным получается... а оно и должно быть инверсным, не прочитал комментария в коде. Тогда всё ОК.
Вложения
Тип файла: zip ScreenShot_20130702.zip (105.5 Кб, 23 просмотров)
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
02.07.2013, 17:41 23
Цитата Сообщение от PAnT0P Посмотреть сообщение
бинарник можно сконвертировать в строку при помощи Base64 что и требуется ТС
Согласен, закодировать можно, но это ли требуется?. К сожалению по мимо затрат времени на кодирование это ведет к увеличению результирующего размера. Мы же стремимся эти параметры уменьшить.
1
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
02.07.2013, 18:09  [ТС] 24
The trick,
реально шустро работает и самое главное делает готовый байтовый массив. Половины я не понимаю из того что там происходит (пока работа с хендалами и прочими вещами для меня остаётся загадкой).. но у меня к сожалению данный код выцепляет из буфера картинку и сохраняет её, а не скрин =(
Причем в буфер её помещает даже не он (код).
0
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
02.07.2013, 21:17 25
Цитата Сообщение от Bati4eli Посмотреть сообщение
но у меня к сожалению данный код выцепляет из буфера картинку и сохраняет её
@Bati4eli, Посмотрел твой код, во-первых он работает нормально, просто сохраняет в "d:\program files\microsoft visual studio\vb98\vb6.jpg". Так что я не пойму в чем проблема-то?
0
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
03.07.2013, 15:47  [ТС] 26
Цитата Сообщение от The trick Посмотреть сообщение
в "d:\program files\microsoft visual studio\vb98\vb6.jpg". Так что я не пойму в чем проблема-то?
Долго пытался понять к чему вы это.. потом глянул код униса и понял. Ни его и не ваш вариант не работает у меня вне бэйсика, компилирую прогу, запускаю и получается только картинка с черным изображением.
Запуская это дело из бэйсика получается скриншот, но только тот который когда-то попал в буфер обмена, т.е. нажми в любое время кнопку PrintScrn и запусти этот код из бэйсика и получишь скрин.
0
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
03.07.2013, 15:55 27
Цитата Сообщение от Bati4eli Посмотреть сообщение
Запуская это дело из бэйсика получается скриншот, но только тот который когда-то попал в буфер обмена, т.е. нажми в любое время кнопку PrintScrn и запусти этот код из бэйсика и получишь скрин.
Что-то ты путаешь, по крайней мере у меня и еще на нескольких компах код отлично работает. Буфер никак не может влиять в моем коде, т.к. я попросту вообще никаким местом не прикасаюсь к нему, нет ни одной инструкции где используется буфер. Так что проверяй код.
0
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
03.07.2013, 19:20 28
Посмотри
Вложения
Тип файла: rar ScreenShooter.rar (2.9 Кб, 27 просмотров)
0
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
04.07.2013, 11:20  [ТС] 29
The trick,
никак
Всё равно сохраняет скрин сделанный абы когда, а при работе из exe- получается полностью черный экран.
Миниатюры
Как передать скриншот (принтскрин) по TCP ?   Как передать скриншот (принтскрин) по TCP ?  
0
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
04.07.2013, 11:30 30
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Bati4eli,Странно... Попробуй создай DC и в него отрисуй с GetDC(0), а уже из картинки выбранной в созданный DC делай GetDIBits.

Добавлено через 6 минут
Visual Basic
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
Private Sub Form_Load()
    Dim dDc As Long, dhWnd As Long
    Dim tBmp As Long
    Dim iBmp As BITMAPINFO
    Dim Pix() As Long
    Dim IStream As IUnknown
    Dim hMem As Long
    Dim lSize As Long
    Dim lPt As Long
    Dim Dat() As Byte
    Dim fNum As Integer
    Dim tDc As Long
    Dim oBmp As Long
    
    Dim x As Long, y As Long
    
    dhWnd = GetDesktopWindow()
    dDc = GetDC(dDc)
    tDc = CreateCompatibleDC(dDc)
    tBmp = CreateCompatibleBitmap(dDc, Screen.Width / Screen.TwipsPerPixelX, Screen.Height / Screen.TwipsPerPixelY)
    oBmp = SelectObject(tDc, tBmp)
    BitBlt tDc, 0, 0, Screen.Width / Screen.TwipsPerPixelX, Screen.Height / Screen.TwipsPerPixelY, dDc, 0, 0, vbSrcCopy
    SelectObject tDc, oBmp
    DeleteDC tDc
    
    iBmp.bmiHeader.biSize = Len(iBmp.bmiHeader)
    GetDIBits dDc, tBmp, 0, 0, 0&, iBmp, 0
    
    iBmp.bmiHeader.biBitCount = 32
    ReDim Pix(iBmp.bmiHeader.biWidth - 1, iBmp.bmiHeader.biHeight - 1)
    
    iBmp.bmiHeader.biHeight = -iBmp.bmiHeader.biHeight          ' Для нисходящих рисунков
    iBmp.bmiHeader.biCompression = 0                            ' Убираем компрессию если она есть
    
    GetDIBits dDc, tBmp, 0, -iBmp.bmiHeader.biHeight, Pix(0, 0), iBmp, 0
    ' В массиве Pix содержатся пиксели рисунка делай с ними что захочешь
    ' в моем примере инвертируем их
    
    For x = 0 To iBmp.bmiHeader.biWidth - 1: For y = 0 To -iBmp.bmiHeader.biHeight - 1
        Pix(x, y) = Pix(x, y) Xor &HFFFFFF
    Next: Next
    
    ' Записываем в промежуточный Bitmap изменения
    SetDIBits dDc, tBmp, 0, -iBmp.bmiHeader.biHeight, Pix(0, 0), iBmp, 0
       
    Erase Pix
    
    ReleaseDC dhWnd, dDc
     
    If CreateStreamOnHGlobal(0&, 1&, IStream) Then MsgBox "Ошибка создание потока": Exit Sub
    If Not SaveJPG(tBmp, IStream) Then MsgBox "Ошибка сохранение файла в поток": DeleteObject (tBmp): Exit Sub
    
    DeleteObject tBmp
    
    If GetHGlobalFromStream(ObjPtr(IStream), hMem) Then MsgBox "Ошибка получения хендла памяти": Exit Sub
    lSize = GlobalSize(hMem)
    If lSize Then
        lPt = GlobalLock(hMem)
        ReDim Dat(0 To lSize - 1)
        CopyMemory Dat(0), ByVal lPt, lSize
        GlobalUnlock hMem
    End If
    
    ' Проверка
    fNum = FreeFile
    Open "D:\Temp.jpg" For Binary As fNum
    Put fNum, , Dat
    Close fNum
    
End Sub
2
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
04.07.2013, 14:00  [ТС] 31
The trick,
вооо заработало!
И последний вопросик:
Вот я передал массив Dat .. как его "открыть" на другой машине в PictureBox напрямую из памяти?
0
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
04.07.2013, 14:27 32
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от Bati4eli Посмотреть сообщение
как его "открыть" на другой машине в PictureBox напрямую из памяти?
Visual Basic
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
Option Explicit
 
Private Type GdiplusStartupInput
    GdiplusVersion As Long
    DebugEventCallback As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs As Long
End Type
 
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 
Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Function GdiplusShutdown Lib "gdiplus" (ByVal token As Long) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As Long
Private Declare Function GdipLoadImageFromStream Lib "gdiplus" (ByVal Stream As IUnknown, image As Long) As Long
Private Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hdc As Long, Graphics As Long) As Long
Private Declare Function GdipDrawImage Lib "gdiplus" (ByVal Graphics As Long, ByVal image As Long, ByVal X As Single, ByVal Y As Single) As Long
 
Private Const GMEM_MOVEABLE = &H2
 
Private Sub Form_Load()
    Dim IStream As IUnknown
    Dim hMem As Long
    Dim lPt As Long
    Dim Dat() As Byte
    Dim fNum As Integer
    Dim SI As GdiplusStartupInput
    Dim token As Long, lBmp As Long, Gr As Long
    
    Me.AutoRedraw = True
    
    ' Открытие
    fNum = FreeFile
    Open "D:\Temp.jpg" For Binary As fNum
    ReDim Dat(LOF(fNum) - 1)
    Get fNum, , Dat
    Close fNum
    
    hMem = GlobalAlloc(GMEM_MOVEABLE, UBound(Dat) + 1)
    If hMem = 0 Then MsgBox "Ошибка выделения памяти": Exit Sub
    lPt = GlobalLock(hMem)
    If lPt = 0 Then MsgBox "Ошибка блокировки памяти": GlobalFree hMem: Exit Sub
    CopyMemory ByVal lPt, Dat(0), UBound(Dat) - 1
    Call GlobalUnlock(hMem)
    If CreateStreamOnHGlobal(hMem, 1&, IStream) Then MsgBox "Ошибка создание потока": GlobalFree hMem: Exit Sub
    
    SI.GdiplusVersion = 1
    If GdiplusStartup(token, SI) = 0 Then
        If GdipLoadImageFromStream(IStream, lBmp) = 0 Then
            Call GdipCreateFromHDC(Me.hdc, Gr)
            Call GdipDrawImage(Gr, lBmp, 0, 0)
            Call GdipDisposeImage(lBmp)
        Else
            MsgBox "Ошибка загрузки файла"
        End If
        GdiplusShutdown token
    Else
        MsgBox "Ошибка инициализации GDI+"
    End If
    Set IStream = Nothing
End Sub
2
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
04.07.2013, 14:58  [ТС] 33
The trick,
Потрясающе! Только еще один маааленький вопросик, где нужно "подкрутить" что бы изменить качество скрина?
0
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
04.07.2013, 15:04 34
Цитата Сообщение от Bati4eli Посмотреть сообщение
"подкрутить" что бы изменить качество скрина?
Ну вы бы хоть код посмотрели
Private Function SaveJPG(hBitmap As Long, Stream As IUnknown, Optional Quality As Byte = 50) As Boolean
1
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
04.07.2013, 15:07  [ТС] 35
Спасибо огромное!
Простите, что не внимательно отнесся к некоторым частям кода.. просто для меня WinApi - всё равно что магия =) Неведома и непостижима!
0
366 / 144 / 17
Регистрация: 06.03.2010
Сообщений: 301
Записей в блоге: 1
04.07.2013, 17:02 36
Это не просто Win32API, это ещё в довесок библиотека GDI+, работа с которой требует отдельного описания. Если по использованию Win32API в VB6 книжка целая есть, то вот по использованию GDI+ при помощи Win32API похоже такой уже никогда не будет, а возможности там по рисованию достаточно широкие.
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 625
28.01.2018, 20:54 37
Всем привет!
можно финальную версию?
Задача таже, но просто сброс скрина в Jpg файл...
0
Модератор
9725 / 3686 / 871
Регистрация: 22.02.2013
Сообщений: 5,531
Записей в блоге: 78
28.01.2018, 21:40 38
Как передать скриншот (принтскрин) по TCP ?
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 625
29.01.2018, 07:22 39
Ругается на:
Visual Basic
1
 tDc = CreateCompatibleDC(dDc)
0
6804 / 2831 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
29.01.2018, 08:19 40
Цитата Сообщение от kreotodr Посмотреть сообщение
Ругается на
Visual Basic
1
Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
0
29.01.2018, 08:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2018, 08:19
Помогаю со студенческими работами здесь

Передать int по TCP
Я хочу передать через сокеты TCP размер изображения а затем само изображение. Как правильно...

TCP: на клиента передать видеоизображение
железно есть видеосервер АХIS 241Q, на входе 4 видеокамеры, свой IP На компьютере есть чужая...

Передать xml файл по tcp
Есть клиентское приложение. Отправляем текст и в зависимости от содержания- получаем ответ. Код...

Передать массив byte по TCP
Имеется массив "byte b = ms.ToArray();" в котором содержится файл. Как передать этот массив по TCP?...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru