在我们的Windows系统里提供了一个叫ScriptControl的OCX组件
我们可以用这个组件来实现脚本故事世界的精彩
创建ScriptControl组件服务
首先我们来看一下该组件都有哪些方法和属性如图
图
图
接着我们用Delphi创建组件服务
从图可知该组件的ProgID为MSScriptControlScriptControl所以我们可以这样创建组件
Var
sc : OleVariant;
begin
sc := CreateOleObject(MSScriptControlScriptControl);
//使用Language属性来设定该组件所使用的语??
//语言可以为VbScriptJavaScript(也可缩写为JScript)
//相当于在HTML里用的
Delphi中使用JavaScript的Base
的加解密算法
搜索googlejavascript base加密 就会找到很多base加密的代码以下就是本人搜索到的一段代码(以下代码版权归其原作者)
var baseEncodeChars = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/
var baseDecodeChars = new Array(
)
function baseencode(str) {
var out i len
var c c c
len = strlength
i =
out =
while(i < len) {
c = strcharCodeAt(i++) & xff
if(i == len)
{
out += baseEncodeCharscharAt(c >> )
out += baseEncodeCharscharAt((c & x) << )
out += ==
break
}
c = strcharCodeAt(i++)
if(i == len)
{
out += baseEncodeCharscharAt(c >> )
out += baseEncodeCharscharAt(((c & x)<< ) | ((c & xF) >> ))
out += baseEncodeCharscharAt((c & xF) << )
out += =
break
}
c = strcharCodeAt(i++)
out += baseEncodeCharscharAt(c >> )
out += baseEncodeCharscharAt(((c & x)<< ) | ((c & xF) >> ))
out += baseEncodeCharscharAt(((c & xF) << ) | ((c & xC) >>))
out += baseEncodeCharscharAt(c & xF)
}
return out
}
function basedecode(str) {
var c c c c
var i len out
len = strlength
i =
out =
while(i < len) {
/* c */
do {
c = baseDecodeChars[strcharCodeAt(i++) & xff]
} while(i < len && c == )
if(c == )
break
/* c */
do {
c = baseDecodeChars[strcharCodeAt(i++) & xff]
} while(i < len && c == )
if(c == )
break
out += StringfromCharCode((c << ) | ((c & x) >> ))
/* c */
do {
c = strcharCodeAt(i++) & xff
if(c == )
return out
c = baseDecodeChars[c]
} while(i < len && c == )
if(c == )
break
out += StringfromCharCode(((c & XF) << ) | ((c & xC) >> ))
/* c */
do {
c = strcharCodeAt(i++) & xff
if(c == )
return out
c = baseDecodeChars[c]
} while(i < len && c == )
if(c == )
break
out += StringfromCharCode(((c & x) << ) | c)
}
return out
}
function utfto(str) {
var out i len c
out =
len = strlength
for(i = i < len i++) {
c = strcharCodeAt(i)
if ((c >= x) && (c <= xF)) {
out += strcharAt(i)
} else if (c > xFF) {
out += StringfromCharCode(xE | ((c >> ) & xF))
out += StringfromCharCode(x | ((c >>) & xF))
out += StringfromCharCode(x | ((c >>) & xF))
} else {
out += StringfromCharCode(xC | ((c >>) & xF))
out += StringfromCharCode(x | ((c >>) & xF))
}
}
return out
}
function utfto(str) {
var out i len c
var char char
out =
len = strlength
i =
while(i < len) {
c = strcharCodeAt(i++)
switch(c >> )
{
case case case case case case case case
// xxxxxxx
out += strcharAt(i)
break
case case
// x xxxx xx xxxx
char = strcharCodeAt(i++)
out += StringfromCharCode(((c & xF) << ) | (char & xF))
break
case
// xxxxxx xxxxxx xxxx
char = strcharCodeAt(i++)
char = strcharCodeAt(i++)
out += StringfromCharCode(((c & xF) << ) |
((char & xF) << ) |
((char & xF) << ))
break
}
}
return out
}
这么长的一段代码我们怎样才能以AddCode()的方法加入进去呢?
)第一种方法把这么长的代码定义给一个字符串这个工作量肯定非常大而且容易出错
)第二种方法把它定义到一个记事本里程序运行的时候读入安全性很低容易被人修改导致出错
)第三种方法把它以资源文件的形式存放在一个Dll里这种方法比较适合以下我们就用这种方法来处理
生成DLL的步骤
)新建一个记事本粘贴上面的代码最后保存为Basetxt
)新建一个记事本写上以下代码最后保存为 Baserc
BaseFile exefile Basetxt
)同目录下新建一个批处理文件保存为Basebat
Brccexe Baserc
)编译成资源文件Res双击执行Basebat完后会生成一个Baseres的文件这个就是JavaScript脚本的资源文件
)新建一个DLL保存为Basedpr加上以下代码然后编译成Basedll
library Base
{$R BaseRES}
begin
end
这样我们的资源文件打包成dll就完成了!
下面我们的工作就是通过dll来读取JavaScript代码
{读取资源文件到一个String变量}
Function ReadResourc()String
Var
Hinst Thandle
StreamTResourceStream
CodeString TStrings
begin
Result =
//加载dll
Hinst=Loadlibrary(Basedll)
If Hinst= Then Exit
Try
//读取资源文件
Stream=TResourceStreamCreate(HinstBaseFileexefile)
CodeString = TStringListCreate()
Try
//将资源文件存放到列