0

現在、デスクトップのスクリーンショットを作成する次の 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")

ここで、フォーカスされたウィンドウだけでなく、画面全体の写真を撮れるようにする必要があります。どうすればいいですか?

前もって感謝します、

ローガン

4

4 に答える 4

4

画面からコピーするには、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
于 2011-07-06T19:28:26.840 に答える
2

あなたのコメントはあなたがalt + printscreen現在アクティブなウィンドウをキャプチャするだけで送信していると言っています。

送信するだけの場合printscreenは、デスクトップ全体をキャプチャする必要があります。

于 2011-07-06T19:26:34.543 に答える
0

Altキーも送信せずに試しましたか?

何かのようなもの:

SendKeys.Send("{PRTSC}")          '<printscreen> 
于 2011-07-06T19:30:29.913 に答える
0

さて、当面の修正は、印刷画面のみを送信することです。

SendKeys.Send("{PRTSC}")

しかし、それはせいぜい不完全なハックです。画面のスクリーンショットを確実に撮るにGetDCは、デスクトップハンドル(0)のP /InvoketoとBitBltその内容を使用する必要がありますBitmapReleaseDC完了する前に、デスクトップのDCを忘れないでください。

または使用するGraphics.CopyFromScreen

于 2011-07-06T19:28:34.933 に答える