文章关键字 ‘VBScript’

VBS访问剪贴板的几种方法

2010年11月4日,星期四

最常见的是InternetExplorer.Application对象,网上一搜一大把。

Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate("about:blank")
Set clipboard = IE.document.parentWindow.clipboardData
'SetData设置剪切板的内容
clipboard.SetData "text", "忘记了,喜欢一个人的感觉"
'GetData获取剪切板的内容
WScript.Echo clipboard.GetData("text")
IE.Quit

实践证明,网上一搜一大把的代码一般不是好代码。SetData方法其实是和IE浏览器的设置有关的。

(更多…)

VBS伪造HTTP-REFERER

2010年11月3日,星期三

最近用VBS模拟POST提交表单,发现遇到检测Referer的页面就不管用了。

在测试目录写了一个简单的referer.php,代码如下

<?php
if (!isset($_SERVER["HTTP_REFERER"]))
    echo "No Referer";
else
    echo $_SERVER["HTTP_REFERER"];
?>

如果直接点击上面的链接,那么页面会显示referer页面的链接。

Set http = CreateObject("msxml2.xmlhttp")
http.open "GET","https://demon.tw/test/referer.php",False
http.setRequestHeader "Referer","https://demon.tw"
http.send
WScript.Echo http.responseText

但是如果我用VBS调用msxml2.xmlhttp组件访问这个页面,返回的却是No Referer。实在匪夷所思,难道我的代码写错了?

(更多…)

VBS也玩验证码识别

2010年10月31日,星期日

这几天不是在学Python嘛,怎么还老写VBS的东西。

其实我学Python有两个原因,一是很多开源的BT下载软件是用Python写的,哪天没事可以改改源码做做弊什么的;二是以前无意中看到《python验证码识别之Discuz》的系列文章,顿时感到Python之强大,验证码都能识别,想做什么不行?

几天下来学了点Python的皮毛,于是迫不及待的看了一下《python验证码识别之Discuz(一) 》,发现依然看不懂。并不是看不懂语法,而是看不懂算法。PIL库固然强大,但是光靠库本身还是无法识别验证码,还得加上图形算法。可见语言什么的都是浮云,会算法才是王道。

于是Google了一下验证码识别的原理,自己尝试着用VBS识别晨光BT(该网站需要IPv6网络才能访问)的验证码,发现并没有想象中的困难。之所以选择晨光BT的验证码,是因为它本身比较简单,再加上我还有它的源码,识别起来会相对容易些。

鉴于大部分网络依然是IPv4,我把生成验证码的页面放到了博客的测试目录中,可以点击这里查看。

(更多…)

JavaScript调用VBS中的InputBox和MsgBox函数

2010年10月30日,星期六

严格的是应该是JScript,不过很多不明真相的同学不区分JavaScript和JScript,于是标题就写JavaScript了。JScript和VBScript相互调用搞来搞去都是ScriptControl,一点技术含量也没有。

JavaScript版MsgBox函数,后面两个参数忽略掉,用了那么久VBS我从来没有用过MsgBox最后两个参数。

(更多…)

VBS中Property Set和Property Let的区别

2010年10月28日,星期四

说好不玩VBS来着,但是今天有人问我,简单的写一下吧。

对于这个问题,《VBScript Programmers Reference》第215页说的很清楚:

Functionally, Property Let and Property Set procedures do the same thing. However, the Property Set procedure has two differences:

  • It makes it clearer that the property is an object-based property (any technique that makes the intent of the code more explicit is preferable over any other equally correct technique).
  • Code outside of your class must use the Set Object.Property = Object syntax in order to write to the property (also a good thing, because this is the typical way of doing things).

从功能上说,这两者的作用是一样的。但是Property Set有两点不同:第一,它说明了这个属性是一个与对象有关的属性;第二,在类的外面给属性赋值的时候必须使用Set关键字。

文件说明太抽象了,举个例子:

(更多…)