Board logo

标题: [分享]关于PrintScreen与屏幕截图 [打印本页]

作者: qinchun36     时间: 2010-1-26 14:30    标题: [分享]关于PrintScreen与屏幕截图

我们很多时候想要截屏,全屏或者当前窗口。

会VBS的都知道有个 SendKeys 方法能够发送按键,于是试着用它发送 PrintScreen,结果不行,官方文档中也说了就这个键不能发送,原因好像是没有与之对应的ASCII码。

因此纯的 VBS 是不能完成这个功能的。

但是如果机器上装了Microsoft Office Word (非绿色版)的话,系统中会多出许多能用的对象,其中有一个叫 Word.Basic ,它也有一个 SendKeys 方法,VBS利用这个方法就能够发送 PrintScreen :
CreateObject("Word.Basic").SendKeys "{1068}"
更好记的
CreateObject("Word.Basic").SendKeys "{PRTSC}"
如果要截取当前活动窗口的话就用  "%{PRTSC}"
至于如何保证在截取的时候保证那个活动窗口还是当前的活动窗口,可以有很多办法,比如你加入一个等待时间(WScript.Sleep)双击这个脚本后再切换到那个窗口,或者脚本是循环执行间隔一定时间截取一次,或者你知道哪个窗口的标题的话在前加上 CreateObject("WScript.Shell").AppActivate "标题或结尾的字符串" 激活它之后马上截取。。。

这样就能够模拟键盘按下PrintScreen,并且把图像信息保存在剪贴板中。
很遗憾,我们并不能在桌面或文件夹中按 Ctrl+V 把它粘贴下来,你想想,你要得到的是特定格式的图片(jpg、bmp、gif等),而剪贴板中的只包含像素信息,无法转换的,只能粘贴到能编辑或者显示图片的应用程序内,比如Word、画图(mspaint.exe)、写字板(write.exe)等,然后再做处理。
(有方法能将剪贴板的数据保存为图片文件,但不是VBS可以用的,或者又要使用PowerPoint.Application,因此不关注。)

第三方命令行工具 NirCMD 也有个屏幕打印功能,而且很方便,可以将截图保存为多种格式图片文件(.bmp, .gif, .png, .jpg, .tiff )。
(Windows XP/2003/Vista ,GDI+ is required)
截屏主监视器:
nircmd savescreenshot "D:\temp\Monitor1.jpg"
截屏所有监视器:
nircmd savescreenshotfull "D:\temp\Monitors.png"
截屏当前活动窗口:
nircmd savescreenshotwin "D:\temp\Window.bmp"
这里活动窗口的处理思路与VBS也很相似,如
@echo off
nircmd win activate ititle "标题包含的字符串"
nircmd savescreenshotwin "D:\temp\Window.gif"
参考资料:
How to do a screen capture using VBA --- http://word.mvps.org/FAQS/MacrosVBA/PrtSc.htm
Print Screen in VBScript --- http://www.visualbasicscript.com/m53752.aspx
NirCMD --- http://www.nirsoft.net/utils/nircmd.html
作者: moniuming     时间: 2010-1-26 16:34
一直都用nircmd,呵呵...