VB NET屏幕截图方法2则
VB中PaintPicture图形方法的使用
VB中PaintPicture图形方法的使用(1)出处:eNet学院责任编辑:zwg[01-12-13 18:17] 作者:enet 在VB中提供了完善的做图方法, 可以在窗体或图形框中绘制各种图形, 其中提供了一个方便的图像处理命令即:PaintPicture, 此命令的功能与WINDOWS API 函数BitBlt类似,但由于不用做API函数说明,并且有它独特的功能,所以更有它的方便之处, 使用它可以完成很多图像的特殊处理工作。
一、语法格式:PaintPicturePic,destX,destY,destWidth,destHeight,scrX,scrY,scrWidth,scrHeight 其中Pic:为图片对象, 如图形框Picture等;destX,destY:目标图像位置;destWidth,destHeight:目标图像尺寸;scrX,scrY:原图像的裁剪坐标;scrWidth,scrHeight:原图像的裁剪尺寸;从以上格式可以看出,此命令的功能就是把一个源图像资源任意复制到指定的区域,并且通过改变参数destWidth与destHeight值,还可以改变复制后的图像的尺寸,实现放大或缩小图像显示, 甚至可以置这两个属性为负值, 这样可使目标图像在水平方向翻转,实现特殊效果的图像显示。
二、应用举例1.墙纸的制作所谓的墙纸, 就是用一个小尺寸的图像连续在一个区域显示, 形成规则的重复图像, 也称为图像的平铺显示,利用“PaintPicture"命令可以方便的完成此工作, 即用一个固定的图像资源多次连续复制到窗口中; 复制过程中必须准确计算下一图像的起始位置; 显示过程中可采取两种方法, 第一种方法可置源图像资源即图形框的AutoSize属性为真, 并且显示过程中按源图像的实际尺寸复制, 这是正常的图像平铺显示; 还有一种方法就是通过置AutoSize 属性为假, 然后改变图形框的尺寸, 或者直接修改目标图像的尺寸, 这样可实现放大或缩小图像的平铺显示。
VB使用技巧二.
作者:white 日期:99-6-3 下午 07:52:05 捕捉 MoueExit 事件 MouseDown、MouseUp、MouseMove。
VB 似乎提供了很好的 Mouse 事件。
但好象还缺少什么!对!还差 MouseExit(鼠标移出)事件。
在 VB 中,我们要捕捉 MouseExit 事件,必须用 API 函数: Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long As Long Private Declare Function ReleaseCapture Lib "user32" ( As Long 然后,我们可以在控件(以 Picture1 为例)的 MouseMove 事件上加上以下代码: Dim MouseExit As Boolean MouseOver = (0 <= X And (X <= Picture1.Width And (0 <= Y And (Y <= Picture1.Height If MouseExit Then ........ SetCapture Picture1.hWndElse ........ ReleaseCapture End If [返回技巧索引] -------------------------------------------------------------------------------- 处理多个具有相同要求的控件我们往往有时需要处理多个具有相同特性的控件,如:把 100 个 Text 及 Label 的内容加起来。
这时,我们可以使用下面的技巧:1、如果是同一种类型的控件,我们可以使用控件组达到目标。
2、如果不是同一类型控件,控件组就无法使用,这时,我们还可以利用控件的 Tag 属性,我们可以把每个控件设置一个 Tag 标志。
vb 抓包、截包、发包
目录第一章:截包知识,本章主要介绍用HttpWatch软件截取网络数据包的方法及技巧第二章:发包知识,本章主要介绍数据包的构成第三章:三大利器的使用,本章主要介绍vb使用xmlhttp对象、webbrowser控件、inet控件进行Post发包、Get发包的方法第一章本文要用到的截包工具是HttpWatch,其他软件使用方法都差不多这里不再阐述。
软件下载地址:/source/2688506<只要注册个CSDN号就能下载了没有积分要求的,下载后请注意压缩包内的httpwatch.lic为授权文件,安装完成后把httpwatch.lic复制到安装目录里面>安装完成后打开IE-工具-HttpWatch(IE6的直接能在主界面看到不用进工具里了),打开该软件,如图所示:点击右上角的,软件界面会分离出另外一个窗口我来介绍下按钮的功能, 平常用到的就3个按钮,代表开始截取、停止截取、清除截取的数据再来介绍下面的界面:平常用到的是Qverview、Content、Stream,Qverview的可以查看Post过去的详细目标地址,Content查看请求回来的返回值,Stream查看数据包信息!截取封包:在请求页面前按下按钮开始截取封包,请求完毕后按下按钮停止截取封包.想要清除截取的数据可以按下按钮.数据查看:选中的地址就是Post提交的目标地址Content查看返回的网页源码Stream查看数据内容,详细的数据结构将在下章介绍第二章先发一段数据,我们来分析它<登陆百度的包>POST /?login HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* Referer: https:///?login&tpl=mnAccept-Language: zh-cnContent-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 663; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)Host: Content-Length: 236Connection: Keep-AliveCache-Control: no-cacheCookie:tpl_ok=&next_target=&tpl=mn&skip_ok=&aid=&need_pay=&need_coin=& pay_method=&u=http%3A%2F%%2F&return_method=get&more _param=&return_type=&psp_tt=0&password=123465&safeflg=0&username=sunshi nebean&verifycode=&mem_pass=on关于Http头的构成我不阐述,详见:/absky_cxb/blog/item/f28065017032760a738da5cb.html这里主要讲Post包的构成及比较重要的Http头参数1.Http头里的Referer参数,简单的说就是来路,然后目标服务器能知道你这个Http请求是哪个页面请求过去的,有些服务器就是判断来路的所以这个参数比较重要2.Http头里的Content-Type参数,提交的是网页信息可以是application/x-www-form-urlencoded,假如提交图片信息这个参数也会随之变成data3.Post的包参数全部用&符号隔开的,=号后面的是参数的值。
在VB.NET中进行抓屏
在中进行抓屏Public Class Form1Inherits 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 ThenIf Not (components Is Nothing) Thencomponents.Dispose()End IfEnd IfMyBase.Dispose(disposing)End Sub’Windows 窗体设计器所必需的Private components As ponentModel.IContainer ’注意:以下过程是 Windows 窗体设计器所必需的’可以使用 Windows 窗体设计器修改此过程。
’不要使用代码编辑器修改它。
Friend WithEvents Button1 As System.Windows.Forms.ButtonFriend WithEvents Timer1 As System.Windows.Forms.TimerFriend WithEvents PictureBox1 As System.Windows.Forms.PictureBoxFriend WithEvents Button2 As System.Windows.Forms.Button<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()ponents = New ponentModel.Container Me.Button1 = New System.Windows.Forms.ButtonMe.Timer1 = New System.Windows.Forms.Timer(ponents)Me.PictureBox1 = New System.Windows.Forms.PictureBox Me.Button2 = New System.Windows.Forms.ButtonMe.SuspendLayout()’’Button1’Me.Button1.ForeColor = System.Drawing.Color.BlackMe.Button1.Location = New System.Drawing.Point(8, 312) = "Button1"Me.Button1.Size = New System.Drawing.Size(112, 32)Me.Button1.TabIndex = 0Me.Button1.Text = "抓屏"’’PictureBox1’Me.PictureBox1.Location = New System.Drawing.Point(8, 8) = "PictureBox1"Me.PictureBox1.Size = New System.Drawing.Size(392, 288) Me.PictureBox1.TabIndex = 4Me.PictureBox1.TabStop = False’’Button2’Me.Button2.ForeColor = System.Drawing.Color.BlackMe.Button2.Location = New System.Drawing.Point(264, 312) = "Button2"Me.Button2.Size = New System.Drawing.Size(112, 32)Me.Button2.TabIndex = 5Me.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)) = "Form1"Me.Text = "wgscd"Me.ResumeLayout(False)End Sub#End Region’中进行图象捕获,需要先引用一些API,以下是声明:Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Integer) As IntegerPrivate Declare Function CreateCompatibleBitmap Lib"GDI32" (ByVal hDC As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As IntegerPrivate 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 IntegerPrivate Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Integer) As IntegerPrivate Declare Function DeleteObject Lib "GDI32" (ByVal hObj As Integer) As IntegerDeclare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Integer) As IntegerConst 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 IntegerDim hBMP, hBMPOld As IntegerDim sw, sh As IntegerhDC = GetDC(0)hMDC = CreateCompatibleDC(hDC)sw = Screen.PrimaryScreen.Bounds.Widthsh = Screen.PrimaryScreen.Bounds.HeighthBMP = 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 = TrueEnd SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Button2.Enabled = FalseEnd SubDim ofd As New SaveFileDialogPrivate 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.ImageIf ofd.ShowDialog = DialogResult.OK Thenbmp.Save(ofd.FileName)End IfEnd SubEnd Class。
VBA与屏幕自动截图的应用方法
VBA与屏幕自动截图的应用方法随着信息技术的迅猛发展,图像和截图在我们的日常工作中起着越来越重要的作用。
对于需要频繁进行截图的用户来说,手动截图往往效率低下且不够准确。
在这种情况下,利用VBA (Visual Basic for Applications)编程语言来实现自动截图的方法就变得非常有吸引力。
VBA是一种宏语言,它可以与Microsoft Office软件整合,包括Excel、Word和PowerPoint等常用软件。
通过使用VBA,我们可以编写自定义的宏来实现各种自动化任务。
在本文中,将介绍如何利用VBA在Microsoft Office软件中实现自动截图的方法。
在开始介绍具体的应用方法之前,我们需要明确所需软件和工具。
首先,我们需要安装Microsoft Office软件,包括Excel、Word和PowerPoint。
其次,我们需要了解VBA编程语言的基础知识,以便能够编写自定义的宏。
为了实现自动截图的功能,我们可以利用VBA中的一些内置的对象和方法。
以下是具体步骤:1. 打开所需的Office软件(例如Excel)。
在工具栏中选择“开发工具”,然后选择“Visual Basic”选项。
这将打开VBA编辑器。
2. 在VBA编辑器中,我们可以创建一个新的宏(或者在已有的宏中添加代码)。
通过点击“新建”按钮,然后将下列代码粘贴到新的代码模块中:```Sub Screenshot()Dim ScreenshotPath As StringDim ScreenshotName As StringScreenshotPath = "C:\Screenshots\" '指定截图的保存路径ScreenshotName = "Screenshot" '指定截图的名称SendKeys "%{PRTSC}" '按下“Alt + Print Screen”快捷键Application.Wait (Now + TimeValue("00:00:01")) '等待1秒钟以确保截图已保存到剪贴板With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") '打开Paint应用程序.invokeverb "Paste" '将剪贴板中的内容粘贴到Paint中Application.Wait (Now + TimeValue("00:00:01")) '等待1秒钟以确保截图已粘贴到Paint中.invokeverb "SaveAs", ScreenshotPath & ScreenshotName & ".png" '保存截图为PNG格式.invokeverb "FileExit" '关闭Paint应用程序End WithEnd Sub```在上述代码中,我们首先指定了截图保存的路径和名称。
VB.NET中的图形处理
中的图形处理的图形处理需要五个环节:第⼀:定义绘图对象Dim g As Graphics '定义绘图对象 g第⼆:定好绘图的区域g = Me.CreateGraphics '将窗体指定为绘画区域g = PictureBox1.creategraphics '将图⽚框指定为绘画区域第三:定义绘图⼯具绘图⼯具分三类,如果是画边型的就定义画笔 如果是填充区域型的就定义画刷 如果是画⽂字就需定义字刷对象举例如下:Dim p As New Pen(Color.Red, 3) '定义颜⾊是红⾊,宽度为3个单位的画笔⼯具Dim sb As New SolidBrush(Color.Purple) '定义颜⾊是紫⾊的画刷⼯具Dim f As New Font("⾪书", 8, FontStyle.Regular) '定义刷⽂字的对象第四:绘制图型绘制直线:g.DrawLine(画笔,起点,终点)绘制矩形:⽅法1: g.DrawRectangle(画笔, 左上⾓横坐标,左上⾓纵坐标, 宽度, ⾼度)⽅法2: g.DrawRectangle(画笔, 矩形区域对象)举例:pt1 = New Point(10, 20) '设置点对象s = New Size(60, 50) '确定⼤⼩对象的范围:宽 60 ⾼ 50rect = New Rectangle(pt1, s) '确定矩形区域的范围:左上⾓横坐标10,纵坐标20,宽60,⾼50 g.DrawRectangle(p, rect) '画矩形,或如下直接书写g.DrawRectangle(Pens.PaleGoldenrod, 10, 20, 60, 50)第五:释放资源p.Dispose() '释放画笔对象g.Dispose() '释放绘图对象 。
截屏技巧
屏幕截取技巧:教你十种屏幕抓取方法说起屏幕截图,相信大家都不会陌生:随意翻翻每期的《电脑报》,但是对于刚刚接触电脑的朋友来说,对如何进行抓图还摸不着头脑,以为需要什么高深的技术或什么专业的软件,甚至还以为需要动用DC来帮忙呢。
其实抓图的方法有很多种,但种种都很简单,看了下面的介绍,相信你也能抓出“美”图来!一、PrintScreen按键+画图工具不论你使用的是台式机还是笔记本电脑,在键盘上都有一个PrintScreen按键,但是很多用户不知道它是干什么用的,其实它就是屏幕抓图的“快门”!当按下它以后,系统会自动将当前全屏画面保存到剪贴板中,只要打开任意一个图形处理软件并粘贴后就可以看到了,当然还可以另存或编辑。
提示:PrintScreen键一般位于F12的右侧。
二、抓取全屏抓取全屏幕的画面是最简单的操作:直接按一下PrintScreen键,然后打开系统自带的“画图”(也可以使用PS),再按下Ctrl+V即可。
该处没有什么技术含量,只是要记住防止某些“不速之客”污染了画面,比如:输入法的状态条、“豪杰超级解霸”的窗口控制按钮等等。
提示:提醒想投稿的朋友:这样的画面比较大,一般的报纸或杂志要求300像素×300像素,最大不超过500像素×500像素(当然特殊需要除外),这就需要到PS或ACDSee中进行调整。
三、抓取当前窗口有时由于某种需要,只想抓取当前的活动窗口,使用全屏抓图的方法显然不合适了。
此时可以按住Alt键再按下PrintScreen键就可只将当前的活动窗口抓下了。
四、抓取级联菜单在写稿的过程中,免不了“以图代文”,特别是关于级联菜单的叙述,一张截图胜过千言万语。
但是,若想使用抓取当前窗口的方法来抓级联菜单就不行了:当按下Alt键以后菜单就会消失。
此时可以直接按下PrintScreen键抓取全屏,然后粘贴到图形处理软件中进行后期的处理。
如果使用画图工具,就可以使用方形选定工具将所需要的部分“选定”并“剪切”,然后按下Ctrl+E打开“属性”界面将“宽度”和“高度”中的数值设的很小,最后再粘贴并另存即可(如图1)。
用VB6屏幕截图
用VB6.0实现,本人vb比较菜,所以最好是完整代码,也希望能附上注释,在这里多谢了~问题补充:借助外部工具比较简单,我想用代码实现,希望高手帮一下,非常感谢!!辛语辛辰,savepicture可以保存图片,不过我想保存时主窗体中的一部分,并且上面可能有控件,不知道还有什么方法吗?最佳答案Dim t As BooleanDim f As BooleanPrivate Sub Form_Load()Pic.Height = 100Pic.Width = 100Pic.AutoRedraw = TrueEnd SubPrivate Sub Pic0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)If t = False ThenPic.Left = XPic.Top = YEnd IfIf Button = 1 And f = False Thent = TruePic.Width = X - Pic.LeftPic.Height = Y - Pic.TopPic.PaintPicture Pic0.Picture, 0, 0, , , Pic.Left, Pic.Top, Pic.Width, Pic.Height End IfEnd SubPrivate Sub Pic0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 Then f = TruePic2.Picture = Pic.ImageIf Button = 2 Thent = Falsef = FalsePic.Width = 100Pic.Height = 100End IfEnd Sub注释不用了吧,用SavePicture 语句保存图片说详细点,它截取的是背景vb 屏幕区域截图悬赏分:0 |解决时间:2008-3-8 19:24 |提问者:開始習慣孤單例如我要截下屏幕上728,292,766,305处的图并保存,怎样写代码代码越短越好最佳答案Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As LongPrivate Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Const Srccopy = &HCC0020Private Sub Picture1_Click()StretchBlt Picture1.hdc, 0, 0, 766 - 728, 305 - 292, GetDC(0), 728, 292, 766 - 728, 305 - 292,Srccopy'自己写保存图片的过程吧~End SubPictureBox的ScaleMode要设置为pixel.你试试这个行不~PS 这个问题我好像见过?_?通过VB的BitBlt API来实现窗口局部区域截图悬赏分:150 |解决时间:2010-10-21 22:52 |提问者:诚信欢迎你我想将这个代码写成一个函数形式,保存为DLL文件自己用SavePicture方法可以保存图片但是,保存为DLL的时候报错说未定义什么我想各位帮忙想想通过什么方法能保存为图片问题补充:此问题通过交换方法已经解决了,3楼给的方法就是我说的那方法不过用到了插件故无法生成DLL吧,不过还是非常感谢最佳答案这个问题我以前也弄过,后来卡在你这个问题同样的地方没弄下去,现在看到你的问题,很有感触,准备再弄一下看看,没想到成功了哈,下面是代码,实现了后台截图并且保存,可以用到一些游戏脚本里面哈。
vbinet控件的全部用法(详细讲解)
VB INET控件的全部用法(详细讲解)使用 Internet Transfer 控件Internet Transfer 控件实现了两种广泛使用的 Internet 协议: 超文本传送协议(HyperText Transfer Protocol)(HTTP) 和文件传送协议(File Transfer Protocol) (FTP)。
使用 Internet Transfer 控件可以通过 OpenURL 或 Execute 方法连接到任何使用这两个协议的站点并检索文件。
可能的用途在应用程序中添加 FTP 浏览器。
创建自动从公共 FTP 站点下载文件的应用程序。
分析 World Wide Web 站点中的图形引用,并只下载图形。
提供以自定义格式显示从 Web 页获得的动态数据。
基本操作Internet Transfer 控件的功能依赖于将要使用的协议。
由于所支持的两种协议工作起来不尽相同,所能够进行的操作就依赖于正在使用的协议。
例如,GetHeader 方法只能用于 HTTP(HTML 文档)协议。
然而,有些过程对两个协议是通用的。
最基本的,如果要使用任何一个协议,则必须:将 AccessType 属性设置为合法的代理服务器。
用合法的 URL 调用 OpenURL 方法。
用合法的 URL 和协议支持的命令调用 Execute 方法。
用 GetChunk 方法从缓冲区获取数据。
设置 AccessType 属性:使用代理服务器为了与 Internet 建立任何形式的连接,必须确定计算机如何连接到 Internet 上。
如果在 intranet 上,可能需要提供代理服务器才能连接到 Internet 上。
简单地说,代理服务器是计算机和 Internet 之间的媒介。
intranet 上所有需要连接到 Internet 上的计算机,都必须通过代理服务器。
代理行使 intranet 和 Internet 之间的防火墙功能,能够阻止非法的最终用户和外部请求,也就保护了 intranet 不受破坏。
vbnet getwindowrect 用法 -回复
vbnet getwindowrect 用法-回复"vbnet getwindowrect 用法"是一个关于Visual Basic .NET编程中GetWindowRect函数用法的主题。
在本文中,我将逐步解释如何使用这个函数,并提供相关的示例代码。
从了解基本概念开始,到详细介绍函数的各个参数和返回值,我将一步一步向您展示如何正确使用GetWindowRect。
让我们开始吧!第一步:了解GetWindowRect函数的基本概念GetWindowRect函数是一个Windows API函数,用于获取窗口的矩形坐标。
它的作用是返回包含指定窗口边界的矩形坐标。
这个函数对于需要获取窗口位置和大小的应用程序非常有用。
第二步:学习函数的语法和参数在Visual Basic .NET编程中,您可以使用DllImport和StructLayout属性来导入和声明GetWindowRect函数。
函数的语法如下:vb<DllImport("user32.dll", SetLastError:=True)>Public Function GetWindowRect(ByVal hWnd As Integer, ByRef lpRect As RECT) As BooleanEnd Function<StructLayout(LayoutKind.Sequential)>Public Structure RECTPublic Left As IntegerPublic Top As IntegerPublic Right As IntegerPublic Bottom As IntegerEnd Structure这段代码中,DllImport属性用于从user32.dll导入GetWindowRect函数。
StructLayout属性用于声明矩形坐标的结构体RECT。
VB实现截图、复制、剪切和粘贴功能
'ReleaseDC函数释放设备上下文环境(DC)供其他应用程序使用Private Declare Function ReleaseDC Lib "user32" (ByV al hwnd As Long, ByV al hdc As Long) As Long'OpenClipboard函数用于打开剪切板Private Declare Function OpenClipboard Lib "user32" (ByV al hwnd As Long) As Long'EmptyClipboard函数用于清空剪切板Private Declare Function EmptyClipboard Lib "user32" () As Long'SetClipboardData函数用于把数据放到具有指定格式的剪切板,窗口必须是当前剪切板的拥有者,该函数必须在OpenClipboard调用后才可以用Private Declare Function SetClipboardData Lib "user32" (ByV al wFormat As Long, ByV al hMem As Long) As Long'SelectObject 函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
Private Declare Function SelectObject Lib "gdi32" (ByV al hdc As Long, ByV al hObject As Long) As Long'DeleteDC 该函数删除指定的设备上下文环境(Dc)。
Private Declare Function DeleteDC Lib "gdi32" (ByV al hdc As Long) As Long'BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
电脑截图及截屏的操作步骤
微信制作技术——电脑截图及截屏的操作步骤常用的电脑截图有两种,下面分别叙述。
一、系统自带截图功能如果电脑没有联网,或者说即使联网,但没有登录qq,这时,我们可以使用系统自带的截图功能。
此功能大家在计算机职称考试中学习过,在这里我们温习一下。
如图所示,键盘中红色圆圈所圈中的键便是截图键,直接按此键,便是截取全屏。
PrtScrSysRq如下图,便是截取全屏:倘若不想截取全屏,如下图所示,我们只想截取格式工厂的页面,其实也很简单。
首先,左键单击“格式工厂”任何位置,其次按Alt+ (即按住Alt 键不松手,再按一次 键),最后,在word 、ppt 其它程序中单击右键粘贴即可。
如截取的图片有无用区域,则利用之前学的裁剪工具截图。
(Alt 键的位置)PrtScrSysRq PrtScr SysRq下面是截取的图片。
二、利用腾讯qq截图如果有qq在电脑中登录,则可以使用qq的截图功能进行截图。
方法如下:1、按Ctrl+Alt+A(即按住Ctrl和Alt不松手,再按一次A键)键盘位置如图:2、当屏幕变暗,鼠标变为彩色时,即可选取。
此时,将鼠标放入起始位置然后按住鼠标左键不松手,向相关方向拖动,到合适位置,松开鼠标。
如果无需其它标注,在图中双击,或者点单击“完成”。
之后,在word、ppt或其它应用软件中粘贴即可。
3、如果需要对图片进行文字标注、或者圈中相关区域,如下图:每次选定截图区域后,单击不同的选项,可以在选定区域进行不同的操作,然后点击完成即可。
大家不妨亲自试一下。
如有疑问,请向我咨询。
阿旗职教中心教务处2015年11月8日。
屏幕截取招招看 教你十种屏幕抓取方法
屏幕截取招招看教你十种屏幕抓取方法资料来源:说起屏幕截图,相信大家都不会陌生:随意翻翻每期的《电脑报》,哪篇不是图文并茂?但是对于刚刚接触电脑的朋友来说,对如何进行抓图还摸不着头脑,以为需要什么高深的技术或什么专业的软件,甚至还以为需要动用DC来帮忙呢。
其实抓图的方法有很多种,但种种都很简单,看了下面的介绍,相信你也能抓出“美”图来!一、PrintScreen按键+画图工具不论你使用的是台式机还是笔记本电脑,在键盘上都有一个PrintScreen按键,但是很多用户不知道它是干什么用的,其实它就是屏幕抓图的“快门”!当按下它以后,系统会自动将当前全屏画面保存到剪贴板中,只要打开任意一个图形处理软件并粘贴后就可以看到了,当然还可以另存或编辑。
提示:PrintScreen键一般位于F12的右侧。
二、抓取全屏抓取全屏幕的画面是最简单的操作:直接按一下PrintScreen键,然后打开系统自带的“画图”(也可以使用PS),再按下Ctrl+V即可。
该处没有什么技术含量,只是要记住防止某些“不速之客”污染了画面,比如输入法的状态条、“豪杰超级解霸”的窗口控制按钮等等。
提示:提醒想投稿的朋友:这样的画面比较大,一般的报纸或杂志要求300像素×300像素,最大不超过500像素×500像素(当然特殊需要除外),这就需要到PS或ACDSee中进行调整。
三、抓取当前窗口有时由于某种需要,只想抓取当前的活动窗口,使用全屏抓图的方法显然不合适了。
此时可以按住Alt键再按下PrintScreen键就可只将当前的活动窗口抓下了。
四、抓取级联菜单在写稿的过程中,免不了“以图代文”,特别是关于级联菜单的叙述,一张截图胜过千言万语。
但是,若想使用抓取当前窗口的方法来抓级联菜单就不行了:当按下Alt键以后菜单就会消失。
此时可以直接按下PrintScreen键抓取全屏,然后粘贴到图形处理软件中进行后期的处理。
如果使用画图工具,就可以使用方形选定工具将所需要的部分“选定”并“剪切”,然后按下Ctrl+E打开“属性”界面将“宽度”和“高度”中的数值设的很小,最后再粘贴并另存即可(如图1)。
利用VB捕捉并保存屏幕图像
利用VB捕捉并保存屏幕图像大家知道在VB下利用API函数Bitblt可以将屏幕或者窗口上的图象拷贝到VB 中的PictureBox对象中,但是如果简单的利用PictureBox的SavePicture函数来保存图象,会发现什么也保存不了。
这篇文章就是介绍如何捕获并利用Windows下的OLE API函数保存图象。
首先来看源程序,首先建立一个新的工程文件,然后在Form1中加入5个CommandButton对象和一个PictureBox对象,然后在Form1中加入以下代码:Option ExplicitOption Base 0Private Type PALETTEENTRYpeRed As BytepeGreen As BytepeBlue As BytepeFlags As ByteEnd TypePrivate Type LOGPALETTEpalVersion As IntegerpalNumEntries As IntegerpalPalEntry(255) As PALETTEENTRYEnd TypePrivate Type GUIDData1 As LongData2 As IntegerData3 As IntegerData4(7) As ByteEnd TypePrivate Const RASTERCAPS As Long = 38Private Const RC_PALETTE As Long = &H100Private Const SIZEPALETTE As Long = 104Private Type RECTLeft As LongTop As LongRight As LongBottom As LongEnd TypePrivate Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Long) As LongPrivate Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Long, _ByVal nWidth As Long, ByVal nHeight As Long) As LongPrivate Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal _iCapabilitiy As Long) As LongPrivate Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, _ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries _As PALETTEENTRY) As LongPrivate Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) _As LongPrivate Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject _As Long) As LongPrivate Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As _Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, _ByVal hDCSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop _As Long) As LongPrivate Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long Private Declare Function GetForegroundWindow Lib "USER32" () As Long Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette _As Long, ByVal bForceBackground As Long) As LongPrivate Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As LongPrivate Declare Function GetWindowDC Lib "USER32" (ByVal hWnd As Long) As LongPrivate Declare Function GetDC Lib "USER32" (ByVal hWnd As Long) As Long Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Long, lpRect As _RECT) As LongPrivate Declare Function ReleaseDC Lib "USER32" (ByVal hWnd As Long, ByVal hDC As _Long) As LongPrivate Declare Function GetDesktopWindow Lib "USER32" () As LongPrivate Type PicBmpSize As LongType As LonghBmp As LonghPal As LongReserved As LongEnd TypePrivate Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As _PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long'捕捉整个屏幕Private Sub Command1_Click()Set Picture1.Picture = CaptureScreen()End Sub'在两秒钟后捕捉当前的活动窗口Private Sub Command2_Click()MsgBox "当你关闭这个对话框两秒钟之后程序会捕捉处于活动状态的窗口."'等待两秒钟Dim EndTime As DateEndTime = DateAdd("s", 2, Now)Do Until Now > EndTimeDoEventsLoopSet Picture1.Picture = CaptureActiveWindow()Me.SetFocusEnd SubPrivate Sub Command3_Click()Set Picture1.Picture = NothingEnd SubPublic Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As PictureDim r As LongDim Pic As PicBmpDim IPic As IPictureDim IID_IDispatch As GUID'填充IDispatch界面With IID_IDispatch.Data1 = &H20400.Data4(0) = &HC0.Data4(7) = &H46End With'填充PicWith Pic.Size = Len(Pic) ' Pic结构长度.Type = vbPicTypeBitmap ' 图象类型.hBmp = hBmp ' 位图句柄.hPal = hPal ' 调色板句柄End With'建立Picture图象r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)'返回Picture对象Set CreateBitmapPicture = IPicEnd FunctionPublic Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, ByVal _LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc _As Long) As PictureDim hDCMemory As LongDim hBmp As LongDim hBmpPrev As LongDim r As LongDim hDCSrc As LongDim hPal As LongDim hPalPrev As LongDim RasterCapsScrn As LongDim HasPaletteScrn As LongDim PaletteSizeScrn As LongDim LogPal As LOGPALETTEIf Client ThenhDCSrc = GetDC(hWndSrc)ElsehDCSrc = GetWindowDC(hWndSrc)End IfhDCMemory = CreateCompatibleDC(hDCSrc)hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)hBmpPrev = SelectObject(hDCMemory, hBmp)'获得屏幕属性RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS)HasPaletteScrn = RasterCapsScrn And RC_PALETTEPaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE)'如果屏幕对象有调色板则获得屏幕调色板If HasPaletteScrn And (PaletteSizeScrn = 256) Then'建立屏幕调色板的拷贝LogPal.palVersion = &H300LogPal.palNumEntries = 256r = GetSystemPaletteEntries(hDCSrc, 0, 256,LogPal.palPalEntry(0))hPal = CreatePalette(LogPal)'将新建立的调色板选如建立的内存绘图句柄中hPalPrev = SelectPalette(hDCMemory, hPal, 0)r = RealizePalette(hDCMemory)End If'拷贝图象r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)hBmp = SelectObject(hDCMemory, hBmpPrev)If HasPaletteScrn And (PaletteSizeScrn = 256) ThenhPal = SelectPalette(hDCMemory, hPalPrev, 0)End If'释放资源r = DeleteDC(hDCMemory)r = ReleaseDC(hWndSrc, hDCSrc)Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)End Function'capturescreen函数捕捉整个屏幕图象Public Function CaptureScreen() As PictureDim hWndScreen As Long'获得桌面的窗口句柄hWndScreen = GetDesktopWindow()Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, Screen.Width _\ Screen.TwipsPerPixelX, Screen.Height \ Screen.TwipsPerPixelY) End FunctionPublic Function CaptureActiveWindow() As PictureDim hWndActive As LongDim r As LongDim RectActive As RECThWndActive = GetForegroundWindow()r = GetWindowRect(hWndActive, RectActive)Set CaptureActiveWindow = CaptureWindow(hWndActive, False, 0, 0, _ RectActive.Right - RectActive.Left, RectActive.Bottom - RectActive.Top)End FunctionPublic Sub PrintPictureToFitPage(Prn As Printer, Pic As Picture) Const vbHiMetric As Integer = 8Dim PicRatio As DoubleDim PrnWidth As DoubleDim PrnHeight As DoubleDim PrnRatio As DoubleDim PrnPicWidth As DoubleDim PrnPicHeight As DoubleIf Pic.Height >= Pic.Width ThenPrn.Orientation = vbPRORPortraitElsePrn.Orientation = vbPRORLandscapeEnd IfPicRatio = Pic.Width / Pic.HeightPrnWidth = Prn.ScaleX(Prn.ScaleWidth, Prn.ScaleMode, vbHiMetric) PrnHeight = Prn.ScaleY(Prn.ScaleHeight, Prn.ScaleMode, vbHiMetric) PrnRatio = PrnWidth / PrnHeightIf PicRatio >= PrnRatio ThenPrnPicWidth = Prn.ScaleX(PrnWidth, vbHiMetric, Prn.ScaleMode)PrnPicHeight = Prn.ScaleY(PrnWidth / PicRatio, vbHiMetric, Prn.ScaleMode)ElsePrnPicHeight = Prn.ScaleY(PrnHeight, vbHiMetric, Prn.ScaleMode)PrnPicWidth = Prn.ScaleX(PrnHeight * PicRatio, vbHiMetric, Prn.ScaleMode)End IfPrn.PaintPicture Pic, 0, 0, PrnPicWidth, PrnPicHeightEnd SubPrivate Sub Command4_Click()CommonDialog1.DefaultExt = ".BMP"CommonDialog1.Filter = "Bitmap Image (*.bmp)|*.bmp"CommonDialog1.ShowSaveIf CommonDialog1.FileName <> "" ThenSavePicture Picture1.Picture, CommonDialog1.FileName End IfEnd SubPrivate Sub Command5_Click()PrintPictureToFitPage Printer, Picture1.PicturePrinter.EndDocEnd SubPrivate Sub Form_Load()Command1.Caption = "捕捉整个屏幕"Command2.Caption = "两秒钟后捕捉活动窗口"Command3.Caption = "清除图象"Command4.Caption = "保存图象"Command5.Caption = "打印图象"End Sub运行程序,点击command1或者Command2就可以捕捉成个屏幕或者窗口到Picture1中,然后点击Command4或者Command5就可以保存或打印图象。
VBA调用API实现屏幕截图和图像处理的实例
VBA调用API实现屏幕截图和图像处理的实例在Excel中使用Visual Basic for Applications(VBA)编程语言,可以实现许多功能,包括屏幕截图和图像处理。
通过调用应用程序编程接口(API),我们可以实现更高级的图像处理任务,以及捕捉屏幕上的特定区域。
本文将介绍如何使用VBA调用API实现屏幕截图和图像处理的实例。
第一部分:调用API实现屏幕截图在VBA中,我们可以使用API函数来捕捉屏幕上的特定区域,并保存为图像文件。
以下是实现这一功能的步骤:1. 在VBA编辑器中,在代码窗口中插入一个新的模块,以便编写我们的代码。
2. 在模块中添加以下代码,以声明我们将要使用的API函数:```vbaDeclare PtrSafe Function BitBlt Lib "gdi32" _(ByVal hDestDC As LongPtr, ByVal x As Long, ByVal y As Long, ByValnWidth As Long, ByVal nHeight As Long, _ByVal hSrcDC As LongPtr, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongDeclare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtrDeclare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hDC As LongPtr) As LongDeclare PtrSafe Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As LongPtr) As LongPtrDeclare PtrSafe Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As LongPtr, ByVal nWidth As Long, ByVal nHeight As Long) As LongPtrDeclare PtrSafe Function SelectObject Lib "gdi32" (ByVal hDC As LongPtr, ByVal hObject As LongPtr) As LongPtrDeclare PtrSafe Function DeleteDC Lib "gdi32" (ByVal hDC As LongPtr) As LongPtrDeclare PtrSafe Function DeleteObject Lib "gdi32" (ByVal hObject As LongPtr) As LongPtrDeclare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long```3. 添加以下代码,在一个按钮的点击事件中触发屏幕截图:```vbaSub CaptureScreen()Dim hWnd As LongPtrDim hDC As LongPtrDim hWinDC As LongPtrDim hBitmap As LongPtrDim lWidth As LongDim lHeight As LonghWnd = GetDesktopWindow()hDC = GetDC(hWnd)lWidth = GetSystemMetrics(0)lHeight = GetSystemMetrics(1)hWinDC = CreateCompatibleDC(0)hBitmap = CreateCompatibleBitmap(hDC, lWidth, lHeight)SelectObject hWinDC, hBitmapBitBlt hWinDC, 0, 0, lWidth, lHeight, hDC, 0, 0, SRCCOPYDeleteDC hWinDCReleaseDC hWnd, hDCSavePicture hBitmap, "C:\Screenshot.jpg"DeleteObject hBitmapMsgBox "截图已保存在C盘根目录下的Screenshot.jpg文件中。
VB NET 获取屏幕的大小
VB NET 获取屏幕的大小--------------------------------------------------------------------------------------------------------------1 [ puter.Screen.Bounds ]和[ Screen.PrimaryScreen.Bounds ]都是一样的。
puter.Screen.Bounds.Height.ToString ’获取屏幕的高度。
puter.Screen.Bounds.Width.ToString ’获取屏幕的长度。
--------------------- 屏幕的高度和长度, 在文本框上显示’获取屏幕的高度,在文本框上显示。
TextBox1.Text =puter.Screen.Bounds.Height.ToString’获取屏幕的长度,在文本框上显示。
TextBox2.Text =puter.Screen.Bounds.Width.ToString’获取屏幕的高度和长度,在文本框上显示。
[1050*1400]TextBox3.Text =puter.Screen.Bounds.Height.ToString & "*" & puter.Screen.Bounds.Width.ToString’获取屏幕的长度和高度,在文本框上显示。
[1400*1050]TextBox4.Text =puter.Screen.Bounds.Width.ToString & "*" & puter.Screen.Bounds.Height.ToString--------------------- 將程序窗口放在屏幕的中间Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadDim i1, i2 As Integer '用整数类型。
用VB6屏幕截图
用VB6.0实现,本人vb比较菜,所以最好是完整代码,也希望能附上注释,在这里多谢了~问题补充:借助外部工具比较简单,我想用代码实现,希望高手帮一下,非常感谢!!辛语辛辰,savepicture可以保存图片,不过我想保存时主窗体中的一部分,并且上面可能有控件,不知道还有什么方法吗?最佳答案Dim t As BooleanDim f As BooleanPrivate Sub Form_Load()Pic.Height = 100Pic.Width = 100Pic.AutoRedraw = TrueEnd SubPrivate Sub Pic0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)If t = False ThenPic.Left = XPic.Top = YEnd IfIf Button = 1 And f = False Thent = TruePic.Width = X - Pic.LeftPic.Height = Y - Pic.TopPic.PaintPicture Pic0.Picture, 0, 0, , , Pic.Left, Pic.Top, Pic.Width, Pic.Height End IfEnd SubPrivate Sub Pic0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 Then f = TruePic2.Picture = Pic.ImageIf Button = 2 Thent = Falsef = FalsePic.Width = 100Pic.Height = 100End IfEnd Sub注释不用了吧,用SavePicture 语句保存图片说详细点,它截取的是背景vb 屏幕区域截图悬赏分:0 |解决时间:2008-3-8 19:24 |提问者:開始習慣孤單例如我要截下屏幕上728,292,766,305处的图并保存,怎样写代码代码越短越好最佳答案Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As LongPrivate Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Const Srccopy = &HCC0020Private Sub Picture1_Click()StretchBlt Picture1.hdc, 0, 0, 766 - 728, 305 - 292, GetDC(0), 728, 292, 766 - 728, 305 - 292,Srccopy'自己写保存图片的过程吧~End SubPictureBox的ScaleMode要设置为pixel.你试试这个行不~PS 这个问题我好像见过?_?通过VB的BitBlt API来实现窗口局部区域截图悬赏分:150 |解决时间:2010-10-21 22:52 |提问者:诚信欢迎你我想将这个代码写成一个函数形式,保存为DLL文件自己用SavePicture方法可以保存图片但是,保存为DLL的时候报错说未定义什么我想各位帮忙想想通过什么方法能保存为图片问题补充:此问题通过交换方法已经解决了,3楼给的方法就是我说的那方法不过用到了插件故无法生成DLL吧,不过还是非常感谢最佳答案这个问题我以前也弄过,后来卡在你这个问题同样的地方没弄下去,现在看到你的问题,很有感触,准备再弄一下看看,没想到成功了哈,下面是代码,实现了后台截图并且保存,可以用到一些游戏脚本里面哈。
十种切屏抓取方法(图形)
屏幕截取招招看!教你十种屏幕抓取方法(图形)说起屏幕截图,相信大家都不会陌生:随意翻翻每期的《电脑报》,哪篇不是图文并茂?但是对于刚刚接触电脑的朋友来说,对如何进行抓图还摸不着头脑,以为需要什么高深的技术或什么专业的软件,甚至还以为需要动用DC来帮忙呢。
其实抓图的方法有很多种,但种种都很简单,看了下面的介绍,相信你也能抓出“美”图来!一、PrintScreen按键+画图工具不论你使用的是台式机还是笔记本电脑,在键盘上都有一个PrintScreen按键,但是很多用户不知道它是干什么用的,其实它就是屏幕抓图的“快门”!当按下它以后,系统会自动将当前全屏画面保存到剪贴板中,只要打开任意一个图形处理软件并粘贴后就可以看到了,当然还可以另存或编辑。
提示:PrintScreen键一般位于F12的右侧。
二、抓取全屏抓取全屏幕的画面是最简单的操作:直接按一下PrintScreen 键,然后打开系统自带的“画图”(也可以使用PS),再按下Ctrl+V 即可。
该处没有什么技术含量,只是要记住防止某些“不速之客”污染了画面,比如输入法的状态条、“豪杰超级解霸”的窗口控制按钮等等。
提示:提醒想投稿的朋友:这样的画面比较大,一般的报纸或杂志要求300像素×300像素,最大不超过500像素×500像素(当然特殊需要除外),这就需要到PS或ACDSee中进行调整。
三、抓取当前窗口有时由于某种需要,只想抓取当前的活动窗口,使用全屏抓图的方法显然不合适了。
此时可以按住Alt键再按下PrintScreen 键就可只将当前的活动窗口抓下了。
四、抓取级联菜单在写稿的过程中,免不了“以图代文”,特别是关于级联菜单的叙述,一张截图胜过千言万语。
但是,若想使用抓取当前窗口的方法来抓级联菜单就不行了:当按下Alt键以后菜单就会消失。
此时可以直接按下PrintScreen键抓取全屏,然后粘贴到图形处理软件中进行后期的处理。
如果使用画图工具,就可以使用方形选定工具将所需要的部分“选定”并“剪切”,然后按下Ctrl+E打开“属性”界面将“宽度”和“高度”中的数值设的很小,最后再粘贴并另存即可(如图1)。
截取部分文件的VB编程技巧
截取部分文件的VB编程技巧·Dennis·截取文件的一部分方法很多,有的用分割工具软件,有的ARJ等压缩软件实现。
本文介绍用编程方法来实现。
在VB环境中,完全可以利用VB自身提供的命令和函数,提取、分割任何文件,定位准确、速度快。
思路及重点如下:1)因VB的OPEN语句的二进制方式可以读写有任意结构的文件,把源文件和截取的目标文件作为二进制方式读出和写入;2)GET语句语法为:GET#<源文件号>,<起始位置>,<变量>利用GET语句提供的起始位置可以对源文件读的位置进行控制;3)把每次读取字节的长度放于字节变量数组中,以提高程序速度;4)若需截取的目标文件较大,应把源文件需读的内容分成一个个读写块(注:目标文件仍只有一个),每一读写块内容放入字节数组中,读写块未完部分须对字节数组的上下标进行重新设置,以便读写。
源程序如下:Dim TargetFileLength, StartLength As Long'目标文件长度及在源文件中的开始长度Dim SourceFileName, TargetFileName As String '源文件全路径名和目标文件全路径名Dim ReadPos, WritePos As Long '读写位置Dim DSX() As Byte'为字节数组,用来存储读写内容Dim ReadFileNo, WriteFileNo As Integer'读写文件号Const Unit = 100000'读写块的大小StartLength = InputBox("输入目标文件在源文件中的开始长度")'此值也可以通过其它方式获取TargetFileLength = InputBox("输入目标文件长度")'1)同上;'2)或由目标文件在源文件中的结束长度转换而来;'3)该值在读写过程中是个变数SourceFileName = InputBox("输入源文件名") TargetFileName = InputBox("输入目标文件名")ReadFileNo = FreeFileOpen SourceFileName For Binary Access Read As ReadFileNo'打开欲截取的源文件名WriteFileNo = FreeFileOpen TargetFileName For Binary Access Write As WriteFileNo'欲打开的目标文件名ReadPos = 1: WritePos = 1ReadPos = ReadPos + StartLength'给读写位置赋初值'以下部分读出写入读写块的整数部分ReDim DSX(Unit) As Byte'设置存储字节数组的大小Do While TargetFileLength > Unit'TargetFileLength为变数,反映读写过程中还剩的字节数Get #ReadFileNo, ReadPos, DSX() Put #WriteFileNo, WritePos, DSX()ReadPos = ReadPos + UnitWritePos = WritePos + UnitTargetFileLength = TargetFileLength - UnitLoop'以下读写除读写块倍数后的剩余部分ReDim DSX(TargetFileLength) As ByteGet #ReadFileNo, ReadPos, DSX()Put #WriteFileNo, WritePos, DSX()Close WriteFileNo, ReadFileNo说明:1、对源文件和目标文件较大时,对Unit 的取值比较考究。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
屏幕截图方法2则
' 根据VB6代码改的,经过本人优化。
请先导入Drawing类库。
DeclareFunction SelectObject Lib"gdi32" (ByVal hdc AsInteger,
ByVal hObject AsInteger) AsInteger
DeclareFunction BitBlt Lib"gdi32" (ByVal hDestDC AsInteger, ByVal x AsInteger, ByVal y AsInteger, ByVal nWidth AsInteger,
ByVal nHeight AsInteger, ByVal hSrcDC AsInteger, ByVal xSrc AsInteger, ByVal ySrc AsInteger, ByVal dwRop AsInteger) AsInteger DeclareFunction CreateCompatibleBitmap Lib"gdi32"(ByVal hdc AsInteger, ByVal nWidth AsInteger, ByVal nHeight AsInteger) AsInteger DeclareFunction CreateDC Lib"gdi32"Alias"CreateDCA"
(ByVal lpDriverName AsString, ByVal lpDeviceName AsString,
ByVal lpOutput AsString, ByRef lpInitData AsInteger) AsInteger DeclareFunction CreateCompatibleDC Lib"gdi32" (ByVal hdc AsInteger) AsInteger
Function GetSerPic(OptionalByVal BitWidth AsInteger = -1, OptionalByVal BitHeight AsInteger = -1) As Image
If BitWidth<0Then BitWidth = puter.Screen.Bounds.Width
If BitHeight<0Then BitHeight = puter.Screen.Bounds.Height
Dim Bhandle, DestDC, SourceDC As IntPtr
SourceDC = CreateDC("DISPLAY", Nothing, Nothing, 0)
DestDC = CreateCompatibleDC(SourceDC)
Bhandle = CreateCompatibleBitmap(SourceDC, BitWidth, BitHeight) SelectObject(DestDC, Bhandle)
BitBlt(DestDC, 0, 0, BitWidth, BitHeight, SourceDC, 0, 0, &HCC0020) Return Image.FromHbitmap(Bhandle)
End Function
' 最近学了Graphics类的画图方法,所以无聊就写了两个小程序。
' 这一例是不使用系统API就可以进行屏幕截取的代码。
PublicClass frmMain
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Hide()
Dim p1 AsNew Point(0, 0)
Dim p2 AsNew Point(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim pic AsNew Bitmap(p2.X, p2.Y)
Using g As Graphics = Graphics.FromImage(pic)
g.CopyFromScreen(p1, p1, p2)
Me.BackgroundImage = pic
EndUsing
Me.Show() End Sub End Class。