Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785

Как сделать скрин формы?

16.09.2011, 21:35. Показов 6204. Ответов 12

Студворк — интернет-сервис помощи студентам
Привет всем!

Подскажите, пожалуйста, возможно ли каким-то образом программно "снять" скриншот формы со всем её содержимым и поместить этот скрин в PictureBox? И еще... Есть ли у PictureBox какие-то функции управления цветами рисунка?

Спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2011, 21:35
Ответы с готовыми решениями:

Как сделать скрин активного окна?
Как сделать скрин активного окна? скок искал находил только на общий скрин С Vb общаюсь недавно, сам сообразить пока не могу

Как сделать скрин pictureBox, но не всей формы
Приветствую программистов. Мне очень нужен код для слудующей задачи - на форме расположен pictureBox и принажатиии кнопки происходит...

Как сделать скрин области экрана?
Помогите :( Как сделать скрин экрана без пуска, панели управления, панели быстрого доступа, проводника, точнее узнать их координаты в...

12
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
16.09.2011, 21:49
да, конечно, сейчас код напишу
1
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
16.09.2011, 21:49
Цитата Сообщение от Vinemax Посмотреть сообщение
возможно ли каким-то образом программно "снять" скриншот формы со всем её содержимым и поместить этот скрин в PictureBox?
Да:
VB.NET
1
2
3
4
        Dim BM As New Bitmap(Me.Bounds.Width, Me.Bounds.Height)
        Dim G As Graphics = Graphics.FromImage(BM)
        G.CopyFromScreen(Me.Bounds.X, Me.Bounds.Y, 0, 0, Me.Bounds.Size, CopyPixelOperation.SourceCopy)
        PictureBox1.BackgroundImage = BM
Цитата Сообщение от Vinemax Посмотреть сообщение
Есть ли у PictureBox какие-то функции управления цветами рисунка?
Нет
3
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
16.09.2011, 22:13
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

VB.NET
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
Public Class Form1
#Region "API"
    <System.Runtime.InteropServices.DllImport("User32.dll", SetLastError:=True)> _
Private Shared Function PrintWindow(ByVal hwnd As IntPtr, ByVal hDC As IntPtr, ByVal nFlags As UInteger) As Boolean
    End Function
    <System.Runtime.InteropServices.DllImport("user32.dll")> _
 Private Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean
    End Function
    Public Structure RECT
        Public Left As Integer     '  // x position of upper-left corner
        Public Top As Integer     ' // y position of upper-left corner
        Public Right As Integer   ' // x position of lower-right corner
        Public Bottom As Integer '   // y position of lower-right corner
    End Structure
    Private Function GetPlacement(ByVal ind As IntPtr)
        Dim rect As New RECT
        GetWindowRect(ind, rect)
        Return rect
    End Function
#End Region
 
    Private Function fotka(ByVal id As IntPtr) As Bitmap
        Dim place As RECT = GetPlacement(id)
        If place.Left > -30000 Then
            Dim s As Size = Screen.PrimaryScreen.Bounds.Size
            Dim point As System.Drawing.Rectangle = New System.Drawing.Rectangle(0, 0, place.Right - place.Left, place.Bottom - place.Top)
            Dim g As Graphics = Me.CreateGraphics()
            Dim bmp As New Bitmap(point.Width - point.X, point.Height - point.Y, g)
            Dim memoryGraphics As Graphics = Graphics.FromImage(bmp)
            Dim dc As IntPtr = memoryGraphics.GetHdc()
            If PrintWindow(id, dc, 0) = True Then
                memoryGraphics.ReleaseHdc(dc)
                Return bmp
            Else
                Return Nothing
            End If
        Else
            Return Nothing
        End If
    End Function
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox1.Image = fotka(Me.Handle)
    End Sub
End Class
Добавлено через 3 минуты
комментарий к моему коду: можно сделать снимок любой, формы, любого окна,
PictureBox1.Image = fotka(hwnd)
hwnd может принимать значения Form1.Handle, Form2.Handle или просто число соответствующее хендлу окна, например, 564165

Добавлено через 14 минут

Не по теме:

Памирыч, твой код у меня как-то коряво работает, не всю часть формы что-ли фоткает

2
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
17.09.2011, 04:17  [ТС]
Благодарю, Ciberst! Спасибо, Памирыч! Оба кода отлично работают. Управление цветами нашел в Bitmap, отчего получился прямо-таки бомбейский выход из моей программы с плавным "чёрно-беливанием" (через Timer) задней формы, как в Windows... Посмотрите, если интересно:

http://narod.ru/disk/253718160... t.zip.html

...это локальная база данных под Framework 2.0. Вирусов и вредоносных модулей в этой проге нет - я фигнeй не занимаюсь
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
17.09.2011, 04:28
Vinemax, а твоя программа имеет какое-то отношение к теме?
0
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
17.09.2011, 13:10
Симпотично написанно
1
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
17.09.2011, 15:30  [ТС]
Кстати, если кому интересно, привожу код того, что у меня получилось с "чёрно-беливанием" основной формы (весь код в пределах одной формочки):

рисуем дочернюю формочку (какая-то основная у вас уже должны быть - любая), ставим на эту формочку три Button: Button1 - "Сменить пользователя", Button2 - "Выход" и Button3 - "Отмена". Также ставим Timer с именем Timer1, у которого Enabled = False, а Interval = 10. В коде этой формочки (у меня она называется frmВыход) прописываем:

VB.NET
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
Public Class frmВыход
    '
    'ВСТАВИТЬ ЭТОТ КОД В ПРОЦЕДУРУ FormClosing ОСНОВНОЙ ФОРМЫ ПРОГРАММЫ:
    '
    'With frmВыход
    '    If Not .Выход Then .Показать()
    '    e.Cancel = Not .Выход
    'End With
    '
 
    Public MainForm As Form = frmMain 'основная форма программы
 
    Public Выход As Boolean = False
 
    Dim F As Form
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Выход = False : Me.Hide() : Me.Close()
 
        'вызов процедуры смены пользователя
        frmЗаказы.СменитьПользователяToolStripMenuItem_Click(Nothing, Nothing)
    End Sub
 
    Private Sub frmВыход_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        If Not F Is Nothing Then
            If F.Created Then
                F.Close() : F.Dispose()
            End If
        End If
    End Sub
 
    Private Sub frmВыход_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        'активация основной формы во избежание мерцания
        With MainForm
            If .Created Then
                .Select() : .Activate()
            End If
        End With
    End Sub
 
    Private Sub frmВыход_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button3.Select()
    End Sub
 
    Private Sub frmВыход_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged
        If Not F Is Nothing Then
            If F.Created Then
                F.Visible = Me.Visible
            End If
        End If
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Выход = True : frmMain.Close()
    End Sub
 
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Выход = False : Me.Close()
    End Sub
 
    Public Sub Показать()
        Dim Img As Bitmap
 
        With MainForm.Bounds
            Img = New Bitmap(.Width, .Height)
            Graphics.FromImage(Img).CopyFromScreen(.X, .Y, 0, 0, .Size, CopyPixelOperation.SourceCopy)
        End With
 
 
        Dim c As Color, Gray As Byte
 
        With Img
            For x As Integer = 0 To .Width - 1
                For y As Integer = 0 To .Height - 1
                    c = .GetPixel(x, y)
 
                    Gray = 0.3 * c.R + 0.59 * c.G + 0.11 * c.B
 
                    c = Color.FromArgb(Gray, Gray, Gray)
                    .SetPixel(x, y, c)
                Next
            Next
        End With
 
 
        F = New Form
 
        AddHandler F.Activated, AddressOf F_Activate
 
        With F
            .StartPosition = FormStartPosition.Manual
            .Bounds = MainForm.Bounds
            .FormBorderStyle = Windows.Forms.FormBorderStyle.None
            .ShowInTaskbar = False
 
            .BackgroundImage = Img
 
            .Opacity = 0
            .ShowDialog(MainForm)
        End With
    End Sub
 
    Private Sub F_Activate(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Timer1.Enabled = True
        Me.ShowDialog()
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        With F
            .Opacity = .Opacity + 0.01
            Application.DoEvents()
 
            If .Opacity = 1 Then Timer1.Enabled = False
        End With
    End Sub
End Class
...получается при выполнении процедуры frmВыход_FormClosing выпадет эта формочка, как модальное окно, а эта самая форма, которая вызвала эту формочку (основная форма) плавно станет черно-белой. Естественно, что скорость перехода в черно-белое регулируется переменной Interval Timer'a на формочке.
1
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
19.09.2011, 09:55  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
Vinemax, а твоя программа имеет какое-то отношение к теме?
Сама программа, конечно, не имеет к моей теме отношения, просто в качестве красивого выхода из этой программы я применил код, который ты мне передал, Памирыч, отчего и хотел показать что получилось.
0
 Аватар для Emser
4 / 4 / 0
Регистрация: 25.06.2006
Сообщений: 81
31.12.2017, 06:52
Для Памирыча:
у меня Касперский на этот код обзывается трояном и удаляет файл, создаваемый при отладке.
VB.NET
1
2
3
4
Dim BM As New Bitmap(Me.Bounds.Width, Me.Bounds.Height)
Dim G As Graphics = Graphics.FromImage(BM)
G.CopyFromScreen(Me.Bounds.X, Me.Bounds.Y, 0, 0, Me.Bounds.Size, CopyPixelOperation.SourceCopy)
PictureBox1.BackgroundImage = BM
А при первом запуске отладки вообще устроил "Лечение с перезагрузкой".
Что там такого в этом коде, что этот, вобщем то хороший антивирус, так себя ведёт?
2
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
31.12.2017, 11:44
Emser, CopyFromScreen ему видимо достаточно, чтобы начать "вонять".
Ну, а как ты хотел?
Мало ли не скриншоты делаются, а пароли фотографируются

Если серьезно, то это ложное срабатывание https://support.kaspersky.ru/viruses/general/1870
Пишите в поддержку, может соизволят и внесут сигнатуру в исключения.
1
85 / 75 / 15
Регистрация: 18.01.2014
Сообщений: 359
31.12.2017, 14:05
Emser, Хороший антивирус у юзера в голове должен быть, а все остальные т.н. програмные решения - это всегда компромисс между раздолбайством и паранойей , помноженное на всякие глюки программы.
1
 Аватар для Emser
4 / 4 / 0
Регистрация: 25.06.2006
Сообщений: 81
01.01.2018, 08:58
_Radik_, Вот я просто! спросил - какая часть кода касперу не нравится...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.01.2018, 08:58
Помогаю со студенческими работами здесь

Как сделать чтобы показывало значение переменных в отладке кода?(Скрин ниже)
https://www.cyberforum.ru/attachment.php?attachmentid=1089927&amp;stc=1&amp;d=1575213619

Как сделать скриншот экрана (просто скрин полного экрана) и сохранить изображение в определённую папку?
Как сделать скриншот экрана (просто скрин полного экрана) и сохранить изображение в определённую папку? Программа без кнопок просто...

Сделать скрин выбранного окна
Здравствуйте господа. Требуется вот что: сделать скриншот выбранного окна. т.е. получить список процессов, выбрать из списка...

Сделать сплеш-скрин с прогрессом
всем привет!) у меня долго загружается форма, так как при загрузке формы загружаются данные которые после выводятся, как мне сделать чтобы...

Сделать скрин Web-сайта и отправить на e-mail
protected void Page_Load(object sender, EventArgs e) { MailMessage mail = new MailMessage(); ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru