Фотосъемка экрана с помощью VB.NET - PullRequest
0 голосов
/ 06 июля 2011

В настоящее время у меня есть следующий код VB.NET, чтобы сделать снимок экрана моего рабочего стола, но он только делает снимок активного экрана:

Public Function SaveScreen(ByVal theFile As String) As Boolean

        Try
            SendKeys.Send("%{PRTSC}")          '<alt + printscreen>
            Application.DoEvents()

            Dim data As IDataObject = Clipboard.GetDataObject()

            If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
                Dim bmp As Bitmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Bitmap)
                bmp.Save(theFile, Imaging.ImageFormat.Png)
            End If
            Clipboard.SetDataObject(0)      'save memory by removing the image from the clipboard
            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

Следующий код показывает, как я выполняю вышеупомянутую функцию, если она имеет какое-либо значение, которое я не думаю, что это так:

SaveScreen("C:\Lexer_trace\screen.png")

Теперь мне нужно сделать снимок всего экрана, а не только сфокусированного окна. Как бы я это сделал?

Заранее спасибо,

Logan

Ответы [ 4 ]

4 голосов
/ 06 июля 2011

Вы должны использовать System.Drawing.Graphics.CopyFromScreen() См. Здесь для копирования с экрана

Просто запросите полный размер экрана, чтобы передать в виде точек. Нечто похожее на то, что у вас есть с .CopyFromScreen()

Public Sub SaveScreen(filename As String)

    Dim screenSize = SystemInformation.PrimaryMonitorSize
    Dim bitmap = New Bitmap(screenSize.Width, screenSize.Height)
    Dim g = Graphics.FromImage(bitmap)

    g.CopyFromScreen(New Point(0, 0), New Point(0, 0), screenSize)
    g.Flush()
    bitmap.Save(filename, System.Drawing.Imaging.ImageFormat.Png)

End Sub
2 голосов
/ 06 июля 2011

Ваш комментарий говорит, что вы отправляете alt + printscreen, который просто захватывает текущее активное окно.

Если вы просто отправите printscreen, он должен захватить весь рабочий стол.

0 голосов
/ 06 июля 2011

Вы тоже пытались без отправки клавиши Alt?

Что-то вроде:

SendKeys.Send("{PRTSC}")          '<printscreen> 
0 голосов
/ 06 июля 2011

Что ж, немедленным решением будет отправка только экрана печати:

SendKeys.Send("{PRTSC}")

Но в лучшем случае это неудачный взлом.Чтобы надежно сделать снимок экрана, вам нужно использовать P / Invoke для GetDC дескриптора рабочего стола (0) и BitBlt его содержимого в Bitmap.Не забудьте ReleaseDC DC рабочего стола, прежде чем вы закончите.

Или используйте Graphics.CopyFromScreen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...