其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi中ScriptControl的高级应用


发布日期:2021年04月01日
 
Delphi中ScriptControl的高级应用
在我们的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

//将资源文件存放到列

               

上一篇:Delphi与C++之间通过实现函数与对象共享

下一篇:Delphi中三种延时方法及其定时精度分析