基本信息
源码名称:C# 创建activeX 例子源码(要求客户端得有.net framework)
源码大小:0.01M
文件格式:.zip
开发语言:C#
更新时间:2015-07-21
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
using System; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Windows.Forms; using Microsoft.Win32; namespace Kosmala.Michal.ActiveXTest { /// <summary> /// Summary description for Class1. /// </summary> [ProgId("Dendrite.WebForce.MMP.Web.OurActiveX")] [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(ControlEvents))] //Implementing interface that will be visible from JS [Guid("121C3E0E-DC6E-45dc-952B-A6617F0FAA32")] [ComVisible(true)] public class ActiveXObject { private string myParam = "Empty"; public ActiveXObject() { } public event ControlEventHandler OnClose; /// <summary> /// Opens application. Called from JS /// </summary> [ComVisible(true)] public void Open() { //TODO: Replace the try catch in aspx with try catch below. The problem is that js OnClose does not register. try { MessageBox.Show(myParam); //Show param that was passed from JS Thread.Sleep(2000); //Wait a little before closing. This is just to show the gap between calling OnClose event. Close(); //Close application } catch (Exception e) { //ExceptionHandling.AppException(e); throw e; } } /// <summary> /// Parameter visible from JS /// </summary> [ComVisible(true)] public string MyParam { get { return myParam; } set { myParam = value; } } [ComVisible(true)] public void Close() { if(OnClose != null) { OnClose("http://otherwebsite.com"); //Calling event that will be catched in JS } else { MessageBox.Show("No Event Attached"); //If no events are attached send message. } } /// <summary> /// Register the class as a control and set it's CodeBase entry /// </summary> /// <param name="key">The registry key of the control</param> [ComRegisterFunction()] public static void RegisterClass ( string key ) { // Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it StringBuilder sb = new StringBuilder ( key ) ; sb.Replace(@"HKEY_CLASSES_ROOT\","") ; // Open the CLSID\{guid} key for write access RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(),true); // And create the 'Control' key - this allows it to show up in // the ActiveX control container RegistryKey ctrl = k.CreateSubKey ( "Control" ) ; ctrl.Close ( ) ; // Next create the CodeBase entry - needed if not string named and GACced. RegistryKey inprocServer32 = k.OpenSubKey ( "InprocServer32" , true ) ; inprocServer32.SetValue ( "CodeBase" , Assembly.GetExecutingAssembly().CodeBase ) ; inprocServer32.Close ( ) ; // Finally close the main key k.Close ( ) ; MessageBox.Show("Registered"); } /// <summary> /// Called to unregister the control /// </summary> /// <param name="key">Tke registry key</param> [ComUnregisterFunction()] public static void UnregisterClass ( string key ) { StringBuilder sb = new StringBuilder ( key ) ; sb.Replace(@"HKEY_CLASSES_ROOT\","") ; // Open HKCR\CLSID\{guid} for write access RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(),true); // Delete the 'Control' key, but don't throw an exception if it does not exist k.DeleteSubKey ( "Control" , false ) ; // Next open up InprocServer32 //RegistryKey inprocServer32 = k.OpenSubKey ( "InprocServer32" , true ) ; // And delete the CodeBase key, again not throwing if missing k.DeleteSubKey ( "CodeBase" , false ) ; // Finally close the main key k.Close ( ) ; MessageBox.Show("UnRegistered"); } } /// <summary> /// Event handler for events that will be visible from JavaScript /// </summary> public delegate void ControlEventHandler(string redirectUrl); /// <summary> /// This interface shows events to javascript /// </summary> [Guid("68BD4E0D-D7BC-4cf6-BEB7-CAB950161E79")] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface ControlEvents { //Add a DispIdAttribute to any members in the source interface to specify the COM DispId. [DispId(0x60020001)] void OnClose(string redirectUrl); //This method will be visible from JS } }