“程序设计”目录存档

VBS里的变量名和标识符(Identifiers)

2010年11月5日,星期五

标识符可以简单的认为就是类名、变量名和过程名。

VBS其实存在两种标识符:

  1. 普通标识符(NORMALIDENTIFIER)
  2. 中括号标识符(BRACKETIDENTIFIER)

但是我看过的VBS书籍上都只讲了普通标识符,没有讲中括号标识符。

普通标识符的规则我们已经很熟悉了:

  • 第一个字符必须是字母。
  • 后面的字符可以是字母、数字和下划线(_)
  • 长度不能超过 255 个字符
  • 不能是VBS保留的关键字

中括号标识符的规则更简单:

  • 中括号括起来的任意Unicode字符(换行、回车和NULL除外)
  • 长度不能超过 255 个字符(可以是0个,不包括中括号)

有了中括号标识符,就可以用任意字符来做变量名了,包括VBS保留字

Dim [if],[昵称]
[if] = "Hello world"
[昵称] = "Demon"
WScript.Echo [if]
WScript.Echo [昵称]

这样给变量或者函数命名的时候就可以使用中文了,看起来比较牛逼。

参考链接:VBScript Trivia: Bracket Identifiers and Reserved Word Incompatibilities

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最后两个参数。

(更多…)