.net 当windows窗体不可见时,屏幕捕获不起作用
当我运行窗体时,以下程序不会捕获屏幕。计时器在窗体加载事件中启动 有没有办法让这个程序在窗体不可见模式下捕获屏幕。请帮我解决这个问题。谢谢.net 当windows窗体不可见时,屏幕捕获不起作用,.net,vb.net,.net,Vb.net,当我运行窗体时,以下程序不会捕获屏幕。计时器在窗体加载事件中启动 有没有办法让这个程序在窗体不可见模式下捕获屏幕。请帮我解决这个问题。谢谢 Private keepInvisible As Boolean Public Sub New() InitializeComponent() keepInvisible = True End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Ti
Private keepInvisible As Boolean
Public Sub New()
InitializeComponent()
keepInvisible = True
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
keepInvisible = False
Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Dim screenGrab As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenGrab)
g.CopyFromScreen(New Point(0, 0), New Point(0, 0), ScreenSize)
End Using
screenGrab = New Bitmap(screenGrab, 800, 600) 'Defines the new image size
Dim Filename As String
Filename = Format(Now, "dd-MM-yyyy hh-mm-ss tt") 'I want the date to be the name of the image
screenGrab.Save(Application.StartupPath & "/" & Filename & ".Jpeg", Imaging.ImageFormat.Jpeg)
End Sub
Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
If keepInvisible Then
MyBase.SetVisibleCore(False)
Else
MyBase.SetVisibleCore(value)
End If
End Sub
计时器在窗体加载事件中启动
这就是提示,加载事件不会触发。因为您重写了SetVisibleCore(),并决定保持窗口不可见。这也可以防止加载事件触发。除非你真的让窗户可见,否则它不会开火。使用调试器很容易诊断,只需在事件处理程序上设置一个断点
只是不要使用Load事件,您根本不需要它。只有当您需要知道表单的实际位置和大小属性时,才需要加载。其他所有内容都需要放在类的构造函数中<在VB.NET应用程序中,代码>子新建。不幸的是,Load是默认事件,这是从VB6继承来的一个怪癖,因此程序员倾向于在其中放入太多的内容。别这样
Public Sub New()
InitializeComponent()
Timer1.Enabled = True
End Sub
Protected Overrides Sub SetVisibleCore(value As Boolean)
If Not Me.IsHandleCreated Then
value = False
CreateHandle()
End If
MyBase.SetVisibleCore(value)
End Sub
请注意SetVisibleCore()中的更改,它仍然创建本机窗口,以确保Close()方法执行您期望的操作。您如何知道它不工作?为什么您使用的是
SetVisibleCore
而不仅仅是Me.Visible?计时器的时间间隔是多少。如果它太小,您可能会在上面写入同一个文件。你也不是在浪费资源。如果它运行一段时间,你会得到一个GDI例外。隐藏它不会使窗体不可见。我尝试过不使用SetVisibleCore,最初效果很好,但之后我只添加了SetVisibleCore,现在表单不可见,但屏幕捕获不起作用您在某处有其他问题,因为Me.Visible
和Me.Hide
应始终使表单不可见我手头有代码,并与我一起在计时器上使用它。Visible和它可以很好地保存文件…我确实调整了名称,使其差异超过了1秒。谢谢Hans,我调用了timer.start from sub new()并成功了。