Picturebox的图像什么都不是,即使Clipboard.ContainsImage = True?



我正在制作一个程序,不断发送密钥"{PRTSC}",然后设置PictureBox1.BackgroundImage = My.Computer.Clipboard.GetImage

起初,它工作得很好,但一两分钟后,图片框变为空白,没有给出任何错误。

我的代码是:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If Not My.Computer.Clipboard.ContainsImage Then
        SendKeys.Send("{PRTSC}")
    Else
        PictureBox1.BackgroundImage = My.Computer.Clipboard.GetImage
        My.Computer.Clipboard.Clear()
    End If
End Sub

我试过:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    'SendKeys.Send("{PRTSC}")
    'If My.Computer.Clipboard.ContainsImage Then PictureBox1.BackgroundImage = My.Computer.Clipboard.GetImage
    Dim bounds As New Rectangle
    Dim screenshot As System.Drawing.Bitmap
    Dim graph As Graphics
    bounds = Screen.PrimaryScreen.Bounds
    screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height) ', System.Drawing.Imaging.PixelFormat.Format32bppRgb)
    graph = Graphics.FromImage(screenshot)
    graph.CopyFromScreen(0, 0, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
    PictureBox1.BackgroundImage = screenshot
    graph.Dispose()
    'screenshot.Save("d:\dcap.jpg", Imaging.ImageFormat.Bmp)
End Sub

但试图处理屏幕截图会立即产生错误。我不知道为什么。

  1. {PRTSC}在有焦点时抓取活动窗口,否则抓取屏幕。

  2. 最好在tick事件开始时禁用计时器,并在结束时启动它。这可以防止再次进入,并且,根据计时器的类型(有计时器控件、system.timers.timer和system.threading.timer,它们都有点不同),您可能需要在每次滴答事件中重新启动计时器。

  3. 将图像指定给picturebox图像而不是背景图像是正常的。如果应用程序中有东西将位图分配给picturebox1.image或空白picturebox1-image,它将覆盖picturebox1.背景图像中的屏幕截图。

相关内容

  • 没有找到相关文章

最新更新