熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi中ScriptControl的高級應用

2022-06-13   來源: Delphi編程 
在我們的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
  
  // xxxx xx xxxx xx 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
  
  //將資源文件存放到列


From:http://tw.wingwit.com/Article/program/Delphi/201311/24677.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.