ActiveX開發

轉載:http://chinazblz.blog.163.com/blog/static/93939173201057102943116/

如果你想通過C#和VB.net來做ActiveX的請,我勸你儘快打消這個念頭。.net認爲ActiveX技術是過時的,所以C#和Vb.net都做不了ActiveX。C#和VB.net可以做類似的東西,但它不叫ActiveX而是叫windows控件,前提是客戶端機器必須安裝了.net framework才能運行。但是,目前很多機器都沒有安裝.net framework,至少也要等到Vista普及得差不多的時候,ActiveX技術纔可能退出歷史舞臺。

那麼,我應該採用什麼技術開發ActiveX呢?可以採用VB6和C++或C++.net。由於本人不懂C++,本以爲會和C#差不多,用VS新建了一個MFC ActiveX項目,打開一看,代碼像天書一樣完全看不懂,所以決定採用VB6。雖然VB偶也不會,但是VB還是相對要簡單一些,資料也多一些。

如何用VB開發ActiveX在這裏不細說,可以參考這篇文章:ASP與ActiveX控件交互實戰(http://blog.csdn.net/online/archive/2004/08/09/68872.aspx) ,講得非常詳細。

這裏只介紹本人遇到的幾個難題:
1.如何在ActiveX內部提交所在網頁的表單?

可以用js將form傳遞到AcitveX中去。用VB操作Html元素(dom),需要添加一個引用,方法是:工程 > 引用 > 勾選Microsoft HTML Object Library > 確定

然後在代碼中,添加一個接受客戶端form的方法:
Public HtmlForm As HTMLFormElement '記錄htmlform值
Public Sub Init(ByRef form As HTMLFormElement)
Set HtmlForm = form
End Sub

客戶端html將form傳遞到ActiveX內部去:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <script type="text/javascript">
     window.onload = function(){
       document.getElementById("KelliLogin").Init(form1);//把form傳遞到ActiveX內部中去
     }
    </script>

</head>
<body>
    <form id="form1">
    <div>
        <object classid="clsid:{1179091E-1F78-4D09-B876-B7C1ABEA4BF3}" id="KelliLogin" width="198" height="88"></object>
    </div>
    </form>
</body>
</html>

將form傳遞到ActiveX後,ActiveX就可以操作這個form了,假如用戶單擊ActiveX內部的一個按鈕,然後提交這個表單:
Private Sub Submit_Click()
    HtmlForm.Action = "test.aspx?username=123"
    ...可以像js那樣任意設置form的方法和屬性
    HtmlForm.Submit
End Sub

下面說第二個問題
2.如何標記Activex控件爲安全腳本?

這個問題其實是第一個問題引出來的,通常ActiveX控件在開發並註冊後,一旦在網頁中運行,IE並不認爲這是一個腳本安全的,會彈出一個IE提示:已經阻止此站點以不安全的方式使用ActiveX控件。因此,此頁可能現實不正確。

如果不解決這個問題,我們前面的工作等於白乾。怎麼辦呢?需要修改客戶端註冊表,

添加類似於下面這樣的項(用控件的類 ID 取代 {06889605-B8D0-101A-91F1-00608CEAD5B3}),使您的鍵同下列類 ID 相關聯:

HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4} HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

但是怎麼去修改客戶端機器的註冊表呢?這就需要在ActiveX控件安裝時操作了。因此,我們需要製作一個ActiveX安裝程序,這裏我們採用Visual Studio 2005來製作安裝程序。

1.打開vs,新建一個安裝項目
2.在解決方案資源管理器窗口當中右擊項目 > 添加 > 添加文件 > 選擇你生成的AtiveX文件,如Hello.ocx.
3.再右擊項目,視圖 > 註冊表
   1> 按照上面的註冊表節點順序依次添加註冊表
    2> 在註冊表的最後一節中右擊 > 屬性窗口 > 設置AlwaysCreate爲true,它表示此註冊表項作爲安裝項目的一分部,即使是空的。這樣設置後,在安裝的時候就會自動地修改客戶端註冊表了。
4.生成安裝程序
5.運行安裝程序
6.瀏覽包含了該ActiveX的頁面

你會發現,那個提示沒有了,而且不需要在IE中添加信任站點即可直接使用!是不是特別爽啊?

到此爲止,介紹的差不多了。還有幾個問題需要研究:
1.不製作安裝包,上面的這個問題能否解決?
2.如何在AciveX中存儲數據,比如一個用戶名,第一次輸入後,第二次就記住它了。

有興趣的朋友可以和我一起探討或指教,謝謝!

參考資料:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_upgrading_an_existing_activex_control_to_be_used_on_the_internet.asp

http://wenhaobing.spaces.live.com/blog/cns!9d6443eb4bff9145!143.entry

 

轉自:http://hi.baidu.com/%B7%E7%D6%D0%C1%E9%D2%A9/blog/item/9fb6cdc8d320e3137e3e6f42.html

相關:http://www.ithome-cn.net/technology/vc/vc15.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章