在VB.NET中进行抓屏

’Author:wgscd
’功能:抓屏
’QQ153964481
’Date:2005-4-12
’********************************* 
Public Class Form1
    Inherits System.Windows.Forms.Form
#Region " Windows 窗体设计器生成的代码 "
    Public Sub New()
        MyBase.New()
        ’该调用是 Windows 窗体设计器所必需的。
        InitializeComponent()
        ’在 InitializeComponent() 调用之后添加任何初始化
    End Sub
    ’窗体重写处置以清理组件列表。
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
    ’Windows 窗体设计器所必需的
    Private components As System.ComponentModel.IContainer
    ’注意:以下过程是 Windows 窗体设计器所必需的
    ’可以使用 Windows 窗体设计器修改此过程。
    ’不要使用代码编辑器修改它。
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Timer1 As System.Windows.Forms.Timer
    Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
    Friend WithEvents Button2 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container
        Me.Button1 = New System.Windows.Forms.Button
        Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
        Me.PictureBox1 = New System.Windows.Forms.PictureBox
        Me.Button2 = New System.Windows.Forms.Button
        Me.SuspendLayout()
        ’
        ’Button1
        ’
        Me.Button1.ForeColor = System.Drawing.Color.Black
        Me.Button1.Location = New System.Drawing.Point(8, 312)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(112, 32)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "抓屏"
        ’
        ’PictureBox1
        ’
        Me.PictureBox1.Location = New System.Drawing.Point(8, 8)
        Me.PictureBox1.Name = "PictureBox1"
        Me.PictureBox1.Size = New System.Drawing.Size(392, 288)
        Me.PictureBox1.TabIndex = 4
        Me.PictureBox1.TabStop = False
        ’
        ’Button2
        ’
        Me.Button2.ForeColor = System.Drawing.Color.Black
        Me.Button2.Location = New System.Drawing.Point(264, 312)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(112, 32)
        Me.Button2.TabIndex = 5
        Me.Button2.Text = "保存"
        ’
        ’Form1
        ’
        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
        Me.BackColor = System.Drawing.Color.FromArgb(CType(192, Byte), CType(192, Byte), CType(255, Byte))
        Me.ClientSize = New System.Drawing.Size(408, 358)
        Me.Controls.Add(Me.Button2)
        Me.Controls.Add(Me.PictureBox1)
        Me.Controls.Add(Me.Button1)
        Me.ForeColor = System.Drawing.Color.FromArgb(CType(192, Byte), CType(255, Byte), CType(255, Byte))
        Me.Name = "Form1"
        Me.Text = "wgscd"
        Me.ResumeLayout(False)
    End Sub
#End Region

    ’VB.NET中进行图象捕获 ,需要先引用一些API,以下是声明:
    Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Integer) As Integer
    Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer
    Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer
    Private Declare Function BitBlt Lib "GDI32" (ByVal srchDC As Integer, ByVal srcX As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH As Integer, ByVal desthDC As Integer, ByVal destX As Integer, ByVal destY As Integer, ByVal op As Integer) As Integer
    Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Integer) As Integer
    Private Declare Function DeleteObject Lib "GDI32" (ByVal hObj As Integer) As Integer
    Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Integer) As Integer
    Const SRCCOPY As Integer = &HCC0020
    ’将以下代码添加到Button1_Click事件中:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim hDC, hMDC As Integer
        Dim hBMP, hBMPOld As Integer
        Dim sw, sh As Integer
        hDC = GetDC(0)
        hMDC = CreateCompatibleDC(hDC)
        sw = Screen.PrimaryScreen.Bounds.Width
        sh = Screen.PrimaryScreen.Bounds.Height
        hBMP = CreateCompatibleBitmap(hDC, sw, sh)
        hBMPOld = SelectObject(hMDC, hBMP)
        BitBlt(hMDC, 0, 0, sw, sh, hDC, 0, 0, SRCCOPY)
        hBMP = SelectObject(hMDC, hBMPOld)
        PictureBox1.Image = Image.FromHbitmap(New IntPtr(hBMP))
        DeleteDC(hDC)
        DeleteDC(hMDC)
        DeleteObject(hBMP)
        Me.Button2.Enabled = True
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Button2.Enabled = False
    End Sub
    Dim ofd As New SaveFileDialog
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ofd.Filter = "jpg file|*.jpg|bmp file|*.bmp"
        Dim bmp As Bitmap = Me.PictureBox1.Image
        If ofd.ShowDialog = DialogResult.OK Then
            bmp.Save(ofd.FileName)
        End If
    End Sub
End Class

时间: 2024-08-01 18:40:43

在VB.NET中进行抓屏的相关文章

问高手,vb.net如何抓屏并且自动保存到excel里面呢

问题描述 问高手,vb.net如何抓屏并且自动保存到excel里面呢比较好的写法. 解决方案 解决方案二:抓屏返回图片?然后粘贴到excel?解决方案三:好强大解决方案四:该回复于2011-12-26 09:58:29被版主删除

Linux中如何在终端下抓屏?

Linux中如何在终端下抓屏? 我们可以通过cat命令来实现, 用法:cat [选项]... [文件]...将[文件]或标准输入组合输出到标准输出. &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; -A, --show-all           等于-vET  -b, --number-nonblank    对非空输出行编号  -e                       等于-vE  -E, --sho

在VB6和VB.NET中进行图象捕获

在VB6和VB.NET中进行图象捕获 VB6中进行图象捕获   '---------------------------------------------------------------------------- ' 'Author:lihonggen0 'Date:2002-6-19 '功能:抓屏 '---------------------------------------------------------------------------- Private Type POINT

android抓屏

现在无论是应用,还是游戏中,都经常会有分享的功能.分享,不仅要分享文字,也要分享应用或者游戏的屏幕截图,这样才能做到图文并茂,吸引到更多的用户. 想要做图片的分享功能,首先就需要抓屏,将当前屏幕保存为一个图片文件. 下面就是一个将当前的Activity直接保存为一个图片文件的类库,可以直接使用.需要的,直接拿来主义就好了. package com.gaolei.framework.android.util;      import java.io.File;   import java.io.F

vb.net中使用webbrowser的问题

问题描述 1.目前已经做到自动登录获取信息,但是会跳转到短信验证界面,验证后不久会再次要求验证,正常登录没有这种问题,不知道用Cookies可以解决吗?2.退而求其次手动登录保存后加载本地文件,打开后首次加载总是要点两下,不然等很久...而且本身加载也很慢,vb.net中可以直接读取本地htm文件代码不用加载页面吗?HttpWebRequest可以吗?本人比较业余,敬请各位大神指点.登录的网址是Booking一类的酒店管理后台. 解决方案 解决方案二:有验证码一般都要手动...关键是看你要上的网

PHP抓屏函数实现屏幕快照代码分享

 谁说抓图只能用QQ.用打印屏幕,PHP也能做到,本文主要介绍PHP抓屏函数实现屏幕快照的方法   代码如下: <?php * 屏幕快照 $im = imagegrabscreen(); imagepng($im, "myscreenshot.png");     * 抓取一个窗口(IE为例)   $browser = new COM("InternetExplorer.Application"); $handle = $browser->HWND; $

在VB.NET中应用SMTP和POP3 服务

在VB.NET中应用SMTP和POP3 服务 介绍 这里介绍的例程代码最小化地展示了SMTP和POP3协议的执行,并且有意地演示VB.NET中的多线程.套接字和输入输出的能力.这个程序需要固定一些目录结构. 应用程序邮箱的目录 C:\Temp\SMTP C:\Temp\SMTP \SPOOL C:\Temp\SMTP \[Pop 3用户名作为目录] 程序也可以向局域网外部发送E-mail,但这就需要依赖于SMTP服务器.本例程中指定了SMTP服务器的硬代码,并且至少要在C:\Temp\SMTP下

VB.NET中的多线程开发

多线程 引言 对于使用VB6的开发者而言,要在程序中实现多线程(multi-thread)功能,一般就是使用Win32 API调用.但凡是进行过这种尝试的开发者都会感觉到实现过程非常困难,而且总是会发生些null terminated strings GPF的错误.可是有了VB.NET,一切烦恼都成为过去. 自由线程(free threaded) 在VB6中,我们只能对组件设置多线程模式,这通常就是单元模式的多线程.对于单元线程组件而言,组件中的每个可执行方法都将在一个和组件相联系的线程上运行.

VB.net中HOOK的应用(CNET中文网)

中文 VB.net中HOOK的应用 在vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法.小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨.本人水平有限,不免错误与遗漏多多,请朋友们批评指正. 基本的想法是,写一系列的文章,讲解一下vb.net与vb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法.如果时间允许,我希望自己能快快开展这个工作.更重要的是网友们的支持与鼓励会是我继续的