2009年4月16日 星期四

HTA與vbscript

MS的vbscript可以在不同的host環境中執行 一般我們寫.vbs副檔名的檔案
通常是在wscript.exe或是cscript.exe這兩個環境中執行
在wscript.exe中執行時 就會有vbscript programmer都很熟悉的Wscript物件可以使用

但是這在HTA中是不行的 因為.hta檔案是在mshta.exe環境中執行
在這個環境中並沒有Wscript可以使用
就是因為這個原因 讓我在最近寫一個HTA文件時遭遇了很大的挫折

要解釋這件事情 得先說說createobject以及wscript.createobject這兩個函式
在vbscript中 這兩個函式可以create出一個COM物件讓programmer使用
但是這兩個函式其實是 不 一 樣 的
作為vbscript內建的createobject function 有兩個參數
第二個參數可以指定你要把這個物件create在哪台電腦上 也就是說可以遠端電腦裡create一個物件
例如 set obj=createobject("someobject", "remote_host_name")
這樣會在remote_host_name這台電腦裡創出一個物件來使用

而作為wscript物件的createobject method 也有兩個參數
第二個參數是作為programmer自己撰寫的event handler的prefix
例如 set obj=wscipt.createobject("internetexplorer.application", "ie_")
則接下來就可以用
sub ie_beforenavigate()
//some code
end sub
去listen internetexplorer物件的beforenavigate event了

這真是十分的好用 但是很可惜的是在HTA裡並沒有Wscript物件
因此也就沒有wcript.createobject可以用了

我想在HTA裡面 也可以用自己的event handler去listen某個COM物件的event
不過至今還沒有找到方法

不過 雖然不在wscript.exe裡面就沒有wscript物件可以用
並不表示以wscript為prefix的物件也不能用
例如wscript.shell物件 這個物件和wscript物件是分開的
即使環境不是在wscript.exe中 也可以用createobject("wscript.shell")去建立這個物件
這有時候是一件很容易讓人困惑的事情

沒有留言:

張貼留言