本篇文章为大家展示了如何在vbscript中使用LoadPicture函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
& lt; title> LoadPicture函数& lt;/title>, & lt; form name=癴rm"祝辞, 选择图片& lt; input 类型=癴ile", name=皃ic", onChange=癎etPicInfor()“,在, 时间/form> & lt; & lt; script 语言=皏bscript"祝辞, Sub GetPicInfor (), dim objpic iWidth iHeight dim pictype picpath picpath=document.frm.pic.value set objpic=Loadpicture (picpath), iWidth =,圆(objpic.width /, 26.4583), & # 39; 26.4583是像素值, iHeight =,圆(objpic.height /, 26.4583), select case  objpic.type case 0, 时间=pictype “None", case 1, 时间=pictype “Bitmap", case 2, 时间=pictype “Metafile", case 3, 时间=pictype “Icon", case 4, 时间=pictype “Win32-enhanced  metafile", 最终获得select document.write “你选择了图片“,picpath document.write “& lt; li>长度:“,iHeight&“& lt;/li>“, document.write “& lt; li>宽度:“,iwidth&“& lt;/li>“, document.write “& lt; li>类型:“,pictype&“& lt;/li>“, 最终获得Sub & lt;/script>
不过这个函数有个漏洞,可以探测电脑上存在的文件名.2004年的漏洞,微软现在也没补,示例:
& lt; form onsubmit=癲oIt (); return false"祝辞, & lt; input name=癴ilename",价值=https://www.yisu.com/zixun/癱:/ini”大?" 80 " type=" text "> 形式 <脚本语言="改变"> 子loadIt(文件名) LoadPicture(文件名) 终止子> 脚本 <=>“javascript脚本语言 函数doIt () { 尝试{ loadIt (form.filename.value); }捕捉(e) { 结果=e.number; } 如果(结果!=-2146827856){ alert('文件存在'); 其他}{ alert('文件不存在'); } } 脚本>
这段代码中有一个“魔法数字(数字)”26.4583,曾经有位昵称是“乱码”的朋友问过我这26.4583个是怎么来的,当时我也不知道。
前段时间逆向分析了一下vbscript。dll,才发现了其中的奥秘:
26.4583,=,2540,/,96
那你一定要问,这个2540和96又是怎么来的?
要弄清楚这个问题,首先要知道于六月的LoadPicture函数返回的到底是什么,根据文档是这么描述LoadPicture函数的:
返回一个图片对象。使用alt="如何在vbscript中使用LoadPicture函数”>
LoadPicture函数内部调用了OleLoadPicture函数,查文档可知返回的是IPictureDisp接口。不过后来我发现了更简单的方法,那就是查VB的函数声明(谁让它们是一家人呢),在VB的对象浏览器中查找LoadPicture函数:
函数LoadPicture((文件名),(大小),[ColorDepth], [X]、[Y])作为IPictureDisp虽然于六月的LoadPicture函数比VB的简单,但是返回值应该是一样的。
好了,知道返回的是IPictureDisp接口,文档说它支持下面的属性:
我们只关心宽度和高度,它们分别表示图片的宽和高,但是它们的单位不是像素(像素),而是Himetric,我们要做的是把Himetric换算成像素。
首先把Himetric换算成英寸(英寸),1 Himetric=0.01毫米,1英寸=2.54厘米,所以1英寸=2540 Himetric。
然后从英寸换算成像素,1英寸等于多少像素呢?这是由系统的DPI(每英寸点)设置决定的,默认值是96 .
现在知道2540年和96年是怎么来的了吧?不过上面的代码存在两个问题:第一,使用了2540/96的近似值,可能会有误差;第二,使用了DPI的默认值96,而DPI的值是可以在控制面板中修改的。
根据中LoadPicture函数的正确用法是:
Option Explicit & # 39;By Demon Dim p Set p =, LoadPicture (“D: \ test.jpg"), WScript.Echo “宽度:,,,,,Himetric2Pixel (p.Width), WScript.Echo “高度:,,,,,Himetric2Pixel (p.Height), Function Himetric2Pixel (n), & # 39;1,Inch =, 2540, Himetric Const key =,“HKEY_CURRENT_USER \ Control 面板\桌面\ WindowMetrics \ AppliedDPI", Dim WshShell, dpi Set WshShell =, WScript.CreateObject (“Wscript.Shell"), 时间=dpi WshShell.RegRead(关键), Himetric2Pixel =,圆(n *, dpi /, 2540), 最终获得函数如何在vbscript中使用LoadPicture函数