C#開發ActiveX控件參考資料:
http://www.cnblogs.com/zhf/archive/2009/03/02/1401299.html
http://www.cnblogs.com/homer/archive/2005/01/08/88780.html
C#開發ActiveX的詳細介紹見以上兩篇文章,我只補充這兩篇文章未說明的。
1.實現腳本調用ActiveX方法,必需將方法定義到一個接口中(該接口使用一個唯一的GUID,不能與ActiveX控件的GUID相同),然後在ActiveX方法即控件類中實現該接口中的方法。
2.在ActiveX中使用WebBrowser控件,不可直接從工具箱中拖出該控件使用,只需聲明一個WebBrowser對象,在需要使用的時候實例化即可。不然在ActiveX中無法正常使用,即使在本地測試的時候沒有問題,在頁面中使用你會發現WebBrowser對象已經被釋放。
3.在Windows 7下,必需以管理員權限運行VS,設置的COM自動注冊才能順利完成。
以我的代碼為例:
代碼using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace EstatePrintMapActiveX
{
//控件類,GUID可以在工具中生成,此處的GUID即為頁面中引用控件時使用的CLASSID
//ComVisible(true)設置是否自動注冊控件,設置項目屬性中的“生成”項下的“為COM互操作注冊”為勾選實現在本地自動注冊(windows7需要以管理員運行該項目)
[Guid("1161E5A8-B698-4e57-8B56-B5B06B69FF4D"), ProgId("EstatePrintMapActiveX.UserControl1"),
ClassInterface(ClassInterfaceType.None), ComVisible(true)]
public partial class UserControl1 : UserControl, IMonitor, IObjectSafety
{
#region 實現IObjectSafety 成員
public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}
public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
{
throw new NotImplementedException();
}
#endregion
System.Windows.Forms.WebBrowser webBrowser;
bool isDetailPrint = false;//默認打印多張
string stringUrl;//需要打印的頁面的URL
public UserControl1()
{
InitializeComponent();
}
//供JS調用的方法(必需在IMonitor接口中定義,接口名可自定)
public void SetUrlText(string strUrl, string pra)
{
if (pra == "1")//