在我們的Windows系統裡提供了一個叫ScriptControl的OCX組件
我們可以用這個組件來實現腳本故事世界的精彩
創建ScriptControl組件服務
首先
我們來看一下該組件都有哪些方法和屬性
如圖
圖
圖
接著
我們用Delphi創建組件服務
從圖
可知
該組件的ProgID為
MSScriptControl
ScriptControl
所以我們可以這樣創建組件
Var
sc : OleVariant;
begin
sc := CreateOleObject(
MSScriptControl
ScriptControl
);
//使用Language屬性來設定該組件所使用的語??
//語言可以為
VbScript
JavaScript(也可縮寫為JScript)
//相當於在HTML裡用的
Delphi中使用JavaScript的Base
的加解密算法
搜索google
javascript base
加密 就會找到很多base
加密的代碼
以下就是本人搜索到的一段代碼(以下代碼版權歸其原作者)
var base
EncodeChars =
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+/
var base
DecodeChars = new Array(
)
function base
encode(str) {
var out
i
len
var c
c
c
len = str
length
i =
out =
while(i <
len) {
c
= str
charCodeAt(i++) &
xff
if(i == len)
{
out += base
EncodeChars
charAt(c
>>
)
out += base
EncodeChars
charAt((c
&
x
) <
<
)
out +=
==
break
}
c
= str
charCodeAt(i++)
if(i == len)
{
out += base
EncodeChars
charAt(c
>>
)
out += base
EncodeChars
charAt(((c
&
x
)<
<
) | ((c
&
xF
) >>
))
out += base
EncodeChars
charAt((c
&
xF) <
<
)
out +=
=
break
}
c
= str
charCodeAt(i++)
out += base
EncodeChars
charAt(c
>>
)
out += base
EncodeChars
charAt(((c
&
x
)<
<
) | ((c
&
xF
) >>
))
out += base
EncodeChars
charAt(((c
&
xF) <
<
) | ((c
&
xC
) >>
))
out += base
EncodeChars
charAt(c
&
x
F)
}
return out
}
function base
decode(str) {
var c
c
c
c
var i
len
out
len = str
length
i =
out =
while(i <
len) {
/* c
*/
do {
c
= base
DecodeChars[str
charCodeAt(i++) &
xff]
} while(i <
len && c
==
)
if(c
==
)
break
/* c
*/
do {
c
= base
DecodeChars[str
charCodeAt(i++) &
xff]
} while(i <
len && c
==
)
if(c
==
)
break
out += String
fromCharCode((c
<
<
) | ((c
&
x
) >>
))
/* c
*/
do {
c
= str
charCodeAt(i++) &
xff
if(c
==
)
return out
c
= base
DecodeChars[c
]
} while(i <
len && c
==
)
if(c
==
)
break
out += String
fromCharCode(((c
&
XF) <
<
) | ((c
&
x
C) >>
))
/* c
*/
do {
c
= str
charCodeAt(i++) &
xff
if(c
==
)
return out
c
= base
DecodeChars[c
]
} while(i <
len && c
==
)
if(c
==
)
break
out += String
fromCharCode(((c
&
x
) <
<
) | c
)
}
return out
}
function utf
to
(str) {
var out
i
len
c
out =
len = str
length
for(i =
i <
len
i++) {
c = str
charCodeAt(i)
if ((c >=
x
) && (c <
=
x
F)) {
out += str
charAt(i)
} else if (c >
x
FF) {
out += String
fromCharCode(
xE
| ((c >>
) &
x
F))
out += String
fromCharCode(
x
| ((c >>
) &
x
F))
out += String
fromCharCode(
x
| ((c >>
) &
x
F))
} else {
out += String
fromCharCode(
xC
| ((c >>
) &
x
F))
out += String
fromCharCode(
x
| ((c >>
) &
x
F))
}
}
return out
}
function utf
to
(str) {
var out
i
len
c
var char
char
out =
len = str
length
i =
while(i <
len) {
c = str
charCodeAt(i++)
switch(c >>
)
{
case
case
case
case
case
case
case
case
//
xxxxxxx
out += str
charAt(i
)
break
case
case
//
x xxxx
xx xxxx
char
= str
charCodeAt(i++)
out += String
fromCharCode(((c &
x
F) <
<
) | (char
&
x
F))
break
case
//
xxxx
xx xxxx
xx xxxx
char
= str
charCodeAt(i++)
char
= str
charCodeAt(i++)
out += String
fromCharCode(((c &
x
F) <
<
) |
((char
&
x
F) <
<
) |
((char
&
x
F) <
<
))
break
}
}
return out
}
這麼長的一段代碼
我們怎樣才能以AddCode()的方法加入進去呢?
) 第一種方法
把這麼長的代碼定義給一個字符串
這個工作量肯定非常大
而且容易出錯
) 第二種方法
把它定義到一個記事本裡
程序運行的時候讀入
安全性很低
容易被人修改
導致出錯
) 第三種方法
把它以資源文件的形式存放在一個Dll裡
這種方法比較適合
以下我們就用這種方法來處理
生成DLL的步驟
) 新建一個記事本
粘貼上面的代碼
最後保存為Base
txt
) 新建一個記事本
寫上以下代碼
最後保存為 Base
rc
Base
File exefile
Base
txt
) 同目錄下新建一個批處理文件
保存為Base
bat
Brcc
exe Base
rc
) 編譯成資源文件Res
雙擊執行Base
bat
完後會生成一個Base
res的文件
這個就是JavaScript腳本的資源文件
) 新建一個DLL
保存為Base
dpr
加上以下代碼
然後編譯成Base
dll
library Base
{$R Base
RES}
begin
end
這樣
我們的資源文件打包成dll就完成了!
下面
我們的工作就是通過dll來讀取JavaScript代碼
{讀取資源文件到一個String變量}
Function ReadResourc()
String
Var
Hinst
Thandle
Stream
TResourceStream
CodeString
TStrings
begin
Result
=
//加載dll
Hinst
=Loadlibrary(
Base
dll
)
If Hinst=
Then Exit
Try
//讀取資源文件
Stream
=TResourceStream
Create(Hinst
Base
File
exefile
)
CodeString
= TStringList
Create()
Try
//將資源文件存放到列
From:http://tw.wingwit.com/Article/program/Delphi/201311/24677.html