使用截图程序VB.net预览桌面
我只是想知道。如何调整代码使用截图程序VB.net预览桌面,vb.net,Vb.net,我只是想知道。如何调整代码 Dim Size As Rectangle Dim Capt As System.Drawing.Bitmap Dim Pic As Graphics Do While 1 Size = Form2.Bounds Capt = New System.Drawing.Bitmap(Size.Width, Size.Height, System.Drawing.Imaging.PixelFormat
Dim Size As Rectangle
Dim Capt As System.Drawing.Bitmap
Dim Pic As Graphics
Do While 1
Size = Form2.Bounds
Capt = New System.Drawing.Bitmap(Size.Width, Size.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
Pic = Graphics.FromImage(Capt)
Pic.CopyFromScreen(Size.X, Size.Y, 0, 0, Size.Size, CopyPixelOperation.MergeCopy)
PictureBox1.Image = Capt
Loop
从窗体所看到的内容显示图片。
更清楚的理解是必要的
我有两种形式,一种是图片框,另一种是透明形式,我想让图片框显示第二种形式所看到的东西,它的透明部分可以是整个形式的边框和全部。然后继续将其保存到一个文件中,我认为我的代码会自动更新到屏幕上第二个表单所在的位置,并自动填充图片框,但显然不是这样。这里有一个可能的解决方案,如果我正确理解您的意思,这将达到您想要的结果 如果您有任何问题,请随时提问:
Public Class Form2
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.BackColor = Color.Magenta
Me.TransparencyKey = Color.Magenta
End Sub
End Class
我希望您在单独的线程中运行此代码,因为如果窗体在窗体的类中,此循环将阻止窗体响应…我很愚蠢,但还没有愚蠢到忘记这一点。一切都很好,直到事实上我似乎无法让它更新到我拖动第二个表单的位置,这是我到目前为止唯一的问题。我没有冒犯的意思。只是有时候我们错过了一些小事情,这让我们以后最头疼:我知道你说的不是什么意思,这个问题一直困扰着我,我打赌这是一个我看不到的简单解决方案:/n不,同样的问题,它只显示框的起始位置,不会更新到屏幕上的第二个框,要么我做错了什么的,但我不知道。我的代码来自Form1.vb,请不要对跨线程调用大喊大叫;-;这实际上是一个跨线程问题。表单的控件只能从表单的创建线程更新,这就是我在示例中使用计时器的原因。如果要使用新线程,需要使用另一个子线程\u main包装refreshview子线程,该子线程将在新线程上运行,并且在该线程\u main内,需要在Form1的线程上调用refreshview。我不记得确切的语法,有Form SealPosikKy,稍后我会在电脑上写一个例子。唉,我担心这会成为一个问题:唯一的问题是我知道C++的基础知识,不知道如何将表单控件传递给VisualBasic上的子函数,我想我可以绕过它。哦,好吧。谢谢你抽出时间来。别担心,这没什么大不了的,对代表们做一个快速的调查,当我到电脑前,我会更新我的答案。你只需要额外的4行代码就可以了。@Jalomba好吧,我测试了你的代码,问题似乎不是跨线程操作。尽管无论如何都应该避免表单上的跨线程,但问题是您需要实例化form2并计算实例的边界。我会更新我的答案。
Imports System.Threading
Public Class Form1
Private ScreenShot As Thread
Dim F2 As Form2
Private Sub Capt_Click(sender As Object, e As EventArgs) Handles Capt.Click
CheckForIllegalCrossThreadCalls = False
F2 = New Form2
F2.Show()
ScreenShot = New Thread(AddressOf RefreshView)
ScreenShot.IsBackground = True
ScreenShot.Start()
End Sub
Private Sub RefreshView()
Dim Size As Rectangle
Dim Capt As System.Drawing.Bitmap
Dim Pic As Graphics
Do While 1
Size = F2.RectangleToScreen(F2.ClientRectangle)
Capt = New System.Drawing.Bitmap(Size.Width, Size.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
Pic = Graphics.FromImage(Capt)
Dim boundsLeft = Size.X
Dim boundsTop = Size.Y
Pic.CopyFromScreen(boundsLeft, boundsTop, 0, 0, Size.Size, CopyPixelOperation.MergeCopy)
pictureBox1.Image = Capt
Loop
End Sub
End Class