Как бы там ни было с "доносами" на ИИ, эти доносы могут быть и положительными. Так, нейронная сеть, Клод( Claude 3,5 Sonnet ), теперь, отличается тем, что можно легко вводить, кроме прочих, довольно большие тексты и цифровых, программных кодов, для анализа, исправления и улучшения такой сетью. В том числе, и для пользователей ограниченного, но свободного плана. Для этого, тексты ни требуется дополнительно специально готовить, каким-либо образом, просто вставляя текст из буфера обмена, в поле запроса можно сразу получить готовое оформление текста в отдельное целое, с которым сеть далее может работать по запросу пользователя. И, это довольно часто срабатывает. То есть, нейронная сеть довольно сметливо, оценивая в человеческих мерках, инкрустирует в готовый код новые функции по запросу, преобразовывает уже имеющийся код для иных целей и задач, сохраняя необходимые функции и методы. И да, это может быть, куда как удобно. Тем более, что свободный ни лимитированный план GPT4-o, таким же образом, словно и "Клод", предоставляет время для вхождения в процесс создания кодов и программ, теперь, кроме прочих, нейронной сети "Клод". Так, в код программы записи экрана в видео файл, часть которой была создана, как раз, той же нейронной сетью, а именно часть, относящаяся к созданию ближайшего экрана монитора, удалось добавить опцию скриншота на основе кода такого временного экрана переднего плана монитора, на котором можно выделить выбранную область, включая практически всю площадь, а иногда и всю площадь экрана монитора. После чего, такую опцию оказалось легко, в виду ООП, добавить в графический редактор, в котором теперь можно делать скриншоты не только бланка формы с любыми элементами управления и тем что размещено в таких окнах, пользовательского интерфейса программы, будет ли она развернута на весь экран монитора или нет, но любой части ближайшего временного экрана переднего плана монитора. Это состояние может быть, в известном смысле, невероятно красноречивой демонстрацией особенности действительных границ, на которых находиться, вообще говоря, любое тело. Они, и внешние, и внутренние. Для органических тел, это может быть, тем более, значимо. Пожимая самим себе руку, мы находимся, и вне, и внутри тела, неким образом, и из внутри, и из вне. Аналогия может быть отчасти прямой. Делая скриншот экрана, опция позволяет снимать ни только поверхность бланка формы, но и любую иную на экране монитора. Но сохранить изображение можно только через буфер обмена и вставив его на бланк формы пользовательского интерфейса программы графического редактора, или быть может, разместив в более специально выбранный и предназначенный для этого элемент управления, условно размещенный на бланке формы интерфейса такого редактора. Вообще же говоря, практически в любое иное окно, любого иного элемента управления, что может быть таким окном размещения, кроме прочего, для картинок и изображений. Это в известном смысле трансгрессия границы ни покидает таким образом, но в известном смысле может существенно расширить возможности быстро собирать и объединять изображения посредством графического редактора. Программа Майкрософт "Ножницы", словно и множество иных программ добавляют в программу изготовления скриншота некоторые функции графических редакторов, почему бы ни добавить функцию скриншота в графический редактор? Таков может быть результирующий код, VB, Net 4.7.2 и выше, Net 6, GUI, Option Strict On, Windows7и выше. Для рабочего стола.
'Ссылки на пространства имен
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
'Объявления и декларации переменных
'Пользовательская область экрана
Private selectedArea As Rectangle
Private isSelectingArea As Boolean = False
Private startPoint As Point
Private selectionForm As Form
Private capturedImage As Image
' P/Invoke declarations
<DllImport("user32.dll")>
Private Shared Function GetCursorPos(ByRef lpPoint As Point) As Boolean
End Function
#Region "Пользовательская область User Region, скриншоты экрана"
Private Sub RadioButton3_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton3.CheckedChanged
Try
Tab2()
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub Button121_Click(sender As Object, e As EventArgs) Handles Button121.Click
Try
If RadioButton3.Checked = True Then
selectionForm = New Form()
selectionForm.FormBorderStyle = FormBorderStyle.None
selectionForm.Opacity = 0.5
selectionForm.BackColor = Color.Gray
selectionForm.Cursor = Cursors.Cross
selectionForm.WindowState = FormWindowState.Maximized
selectionForm.TopMost = True
AddHandler selectionForm.MouseDown, AddressOf SelectionForm_MouseDown
AddHandler selectionForm.MouseMove, AddressOf SelectionForm_MouseMove
AddHandler selectionForm.MouseUp, AddressOf SelectionForm_MouseUp
AddHandler selectionForm.KeyDown, AddressOf SelectionForm_KeyDown
selectionForm.Show()
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub Button122_Click(sender As Object, e As EventArgs) Handles Button122.Click
Try
If RadioButton3.Checked = True Then
selectionForm = New Form()
selectionForm.FormBorderStyle = FormBorderStyle.None
selectionForm.Opacity = 0.5
selectionForm.BackColor = Color.Gray
selectionForm.Cursor = Cursors.Cross
selectionForm.WindowState = FormWindowState.Maximized
selectionForm.TopMost = True
AddHandler selectionForm.MouseDown, AddressOf SelectionForm_MouseDown
AddHandler selectionForm.MouseMove, AddressOf SelectionForm_MouseMove
AddHandler selectionForm.MouseUp, AddressOf SelectionForm_MouseUp
AddHandler selectionForm.KeyDown, AddressOf SelectionForm_KeyDown
selectionForm.Show()
'Form minimaize
Form3.WindowState = FormWindowState.Minimized
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub SelectionForm_MouseDown(sender As Object, e As MouseEventArgs)
Try
If RadioButton3.Checked = True Then
startPoint = e.Location
isSelectingArea = True
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub SelectionForm_MouseMove(sender As Object, e As MouseEventArgs)
Try
If RadioButton3.Checked = True Then
If isSelectingArea Then
Dim g As Graphics = selectionForm.CreateGraphics()
g.Clear(Color.Gray)
g.DrawRectangle(Pens.Red, GetRectangle(startPoint, e.Location))
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub SelectionForm_MouseUp(sender As Object, e As MouseEventArgs)
Try
If RadioButton3.Checked = True Then
isSelectingArea = False
selectedArea = GetRectangle(startPoint, e.Location)
selectionForm.Close()
' Capture the selected area
Using bmp As New Bitmap(selectedArea.Width, selectedArea.Height)
Using g As Graphics = Graphics.FromImage(bmp)
g.CopyFromScreen(selectedArea.Location, Point.Empty, selectedArea.Size)
End Using
capturedImage = New Bitmap(bmp)
Clipboard.SetImage(capturedImage)
End Using
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
MessageBox.Show("Область скопирована в буфер обмена", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Private Sub SelectionForm_KeyDown(sender As Object, e As KeyEventArgs)
Try
If RadioButton3.Checked = True Then
If e.KeyCode = Keys.Escape Then
selectionForm.Close()
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Function GetRectangle(p1 As Point, p2 As Point) As Rectangle
Try
If RadioButton3.Checked = True Then
Return New Rectangle(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y), Math.Abs(p1.X - p2.X), Math.Abs(p2.Y - p1.Y))
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Function
Private Sub PastToForm1Bl_MouseDown(sender As Object, e As MouseEventArgs)
Try
If RadioButton3.Checked = True Then
If RadioButton2.Checked = True Then Exit Sub
If e.X - m_X = 0 And e.Y - m_Y = 0 Then Exit Sub
sel = True
If Clipboard.ContainsImage() Then
Dim cursorPosition As Point
GetCursorPos(cursorPosition)
cursorPosition = Me.PointToClient(cursorPosition)
Dim pasteImage As Image = Clipboard.GetImage()
Using g As Graphics = Me.CreateGraphics()
g.DrawImage(pasteImage, cursorPosition)
End Using
End If
'Dim screenPoint As Point
'screenPoint = PointToScreen(New Point(e.X, e.Y))
'If My.Computer.Clipboard.ContainsImage Then
'originalImage = CType(My.Computer.Clipboard.GetImage, Bitmap)
' currentImage = CType(originalImage.Clone(), Image)
' Dim Графика As Graphics = CreateGraphics()
'Графика.DrawImage(originalImage, screenPoint)
' Графика.Dispose()
' My.Computer.Clipboard.Clear()
'End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Protected Overridable Sub OnPaint1(e As PaintEventArgs)
MyBase.OnPaint(e)
Try
If capturedImage IsNot Nothing Then
e.Graphics.DrawImage(capturedImage, Point.Empty)
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
#End Region
"СТЛА"
Караваев В.Г.