在平时的工作中,时常需要注册与反注册ActiveX控件,有时需要判断控件是否已经注册。

     所以通过查找资料编写了一个控件注册的小工具,欢迎学习交流,不当之处请多多交流。

   先直接上图:

   

     主要代码:

 //ControlRegisterDlg.h

  CEdit m_EditOcxPath;
  CString m_strOcxPath;

  afx_msg void OnBtnSelect();
  afx_msg void OnBtnRegister();
  afx_msg void OnBtnUnregister();
  afx_msg void OnBtnIsregisted();

  

 //ControlRegisterDlg.cpp

  ON_BN_CLICKED(IDC_BTN_SELECT, OnBtnSelect)
  ON_BN_CLICKED(IDC_BTN_REGISTER, OnBtnRegister)
  ON_BN_CLICKED(IDC_BTN_UNREGISTER, OnBtnUnregister)
  ON_BN_CLICKED(IDC_BTN_ISREGISTED, OnBtnIsregisted)


void CControlRegisterDlg::OnBtnSelect()
{
TCHAR szBuffer[MAX_PATH] = {};
OPENFILENAME ofn = {};
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = m_hWnd;
ofn.lpstrFilter = _T("ocx文件(*.ocx)\0*.ocx\0dll文件(*.dll)\0*.dll\0所有文件(*.*)\0*.*\0");
ofn.lpstrInitialDir = _T("D:\\Program Files");
ofn.lpstrFile = szBuffer;
ofn.nMaxFile = sizeof(szBuffer)/sizeof(*szBuffer);
ofn.nFilterIndex = ;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER ;
BOOL bSel = GetOpenFileName(&ofn);
if (bSel)
{
m_EditOcxPath.SetWindowText(szBuffer);
m_strOcxPath = szBuffer;
}
} void CControlRegisterDlg::OnBtnRegister()
{
if (m_strOcxPath.IsEmpty() || m_strOcxPath.CompareNoCase(_T("Please select a ocx/dll control...")) == )
{
MessageBox(_T("Please first select a ocx/dll file!"));
return;
} HINSTANCE hLib = LoadLibrary(m_strOcxPath); if (hLib == NULL)
{
MessageBox(_T("Fail to load ocx/dll file!"));
return;
} FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer"); if(lpDllEntryPoint != NULL)
{
if(FAILED((*lpDllEntryPoint)()))
{
MessageBox(_T("Fail to regist ocx/dll file!"));
FreeLibrary(hLib);
return;
};
MessageBox(_T("Bingo! Succed to regist ocx/dll file!"));
}
else
{
MessageBox(_T("Fail to get DllRegisterServer!"));
}
} void CControlRegisterDlg::OnBtnUnregister()
{
if (m_strOcxPath.IsEmpty() || m_strOcxPath.CompareNoCase(_T("Please select a ocx/dll control...")) == )
{
MessageBox(_T("Please first select a ocx/dll file!"));
return;
} HINSTANCE hLib = LoadLibrary(m_strOcxPath);
if (hLib==NULL)
{
MessageBox(_T("Fail to load ocx/dll file!"));
return;
} FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,"DllUnregisterServer"); if(lpDllEntryPoint != NULL)
{
if(((*lpDllEntryPoint)()))
{
MessageBox(_T("Fail to get DllUnRegisterServer!!!"));
FreeLibrary(hLib);
return;
};
MessageBox(_T("Bingo! Succed to unregist ocx/dll file!"));
}
else
{
MessageBox(_T("Fail to get DllUnRegisterServer!!!"));
} } void CControlRegisterDlg::OnBtnIsregisted()
{
if (m_strOcxPath.IsEmpty() || m_strOcxPath.CompareNoCase(_T("Please select a ocx/dll control...")) == )
{
MessageBox(_T("Please first select a ocx/dll file!"));
return;
} HKEY hKey = NULL;
BOOL bIsRegisted = FALSE;
TCHAR szPath[_MAX_PATH] = {};
DWORD dwRegType;
DWORD cbData = sizeof(szPath) * sizeof(TCHAR); USES_CONVERSION;
ITypeLib* pTypeLib;
if(SUCCEEDED(LoadTypeLib(T2OLE(m_strOcxPath), &pTypeLib)))
{
TLIBATTR* tlibAttr;
pTypeLib->GetLibAttr(&tlibAttr);
//tlibAttr.guid就是要的CLSID
GUID guid = tlibAttr->guid;
CString strGuid;
strGuid.Format( _T("{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}")
,guid.Data1
,guid.Data2
,guid.Data3
,guid.Data4[], guid.Data4[]
,guid.Data4[], guid.Data4[], guid.Data4[], guid.Data4[]
,guid.Data4[], guid.Data4[] );
CString strClsIdFormat(_T("CLSID\\%s\\InprocServer32"));
CString strClsId;
strClsId.Format(strClsIdFormat, strGuid);
::RegOpenKey(HKEY_CLASSES_ROOT, strClsId, &hKey); if(hKey)
{
bIsRegisted = TRUE;
MessageBox(_T("Ocx/Dll State: Registed!"));
}
else
{
bIsRegisted = FALSE;
MessageBox(_T("Ocx/Dll State: UnRegisted!"));
} pTypeLib->Release();
}
}

  代码下载: http://pan.baidu.com/s/1kV3aARP 密码:a9zs

  仅供学习交流、参考~

VC++:制作一个控件注册的小工具的更多相关文章

  1. CAD向控件注册一个命令

    _DMxDrawX::RegistUserCustomCommand 向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令事件的id就是该注册时的id值,成功返回true. ...

  2. CAD向控件注册一个命令(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_RegistUserCustomCommand 向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令 ...

  3. C#制作ActiveX控件及部署升级(摘自网络)

    使用C#开发ActiveX控件 控件开发.制作CAB包.签名.部署 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序 ...

  4. VC++编写ActiveX控件

    ActiveX这门技术是通过生成“*.ocx”文件来实现的.先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件.如果你用过Visual ...

  5. C#-WebForm-WebForm开发基础、如何给控件注册事件?——事件委托写法、http无状态性、三层结构

    (小知识 - xml:可扩展的标记语言 html:超文本标记语言) 一.创建WebForm:新建→网站 此时文件夹中只有一个 config 文件,打开后 二.在项目下右键添加新项 在设计页面中打开 从 ...

  6. VFP中OCX控件注册检测及自动注册

    这是原来从网上搜集.整理后编制用于自己的小程序使用的OCX是否注册及未注册控件的自动注册函数. CheckCtrlFileRegist("ctToolBar.ctToolBarCtrl.4& ...

  7. 第二十一篇:SOUI中的控件注册机制

    Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...

  8. WPF--Blend制作Button控件模板

    博客园新人,WPF初学者.不涉及理论知识,直接进入操作. 记录一下使用Blend制作Button控件模板过程中,学到Blend几个知识点: 1.渐变画笔编辑器的Alpha选项可以调控件的透明度.即下图 ...

  9. 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

    原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...

随机推荐

  1. 【转】PNG文件结构

    本文转自:http://blog.csdn.net/bisword/article/details/2777121  前言 我们都知道,在进行J2ME的手机应用程序开发的时候,在图片的使用上,我们可以 ...

  2. Mock制作假数据

    name 为属性名, rule 为规则, value 为值,属性名和生成规则之间用|分隔,生成规则的格式有7种: 字符串 String, 数字 Number, 布尔型 Boolean, 对象 Obje ...

  3. <a>设置长宽

    因为只有块元素才会有物理属性,在css世界里边,有三种形态的东西, 1. 块元素. 特性:有物理属性,width,height写值起作用,而且要占据一行.2. 内联元素. 特性:没有物理属性.但是ma ...

  4. DevExpress的DateEdit设置显示日期和时间

    1. 设置Mask.EditMask和DisplayFormat,EditFormat属性.设置为一致:'yyyy-MM-dd HH:mm';  //依照想要的显示格式设置此字符串. [csharp] ...

  5. [uboot]What is MLO file?

    转自:https://coherentmusings.wordpress.com/2012/09/05/what-is-mlo-file/ I have had the Beagle-xM for a ...

  6. Eclipse里安装插件

    1.在eclipse中选择 help->install new software. 2.在work with 框中输入:Indigo - http://download.eclipse.org/ ...

  7. Shell替换:Shell变量替换,命令替换,转义字符

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本复制 #!/bin/bash a=10 echo -e &quo ...

  8. iOS基础--UIView的常见属性

    UIView的常见属性以及方法 @property(nonatomic,readonly) UIView *superview; // 获得自己的父控件对象 @property(nonatomic,r ...

  9. Tomcat负载均衡和集群环境的搭建

    实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道整个操作流程的真正作者是谁.下面就是我用我们真实的项目去实现这个过程.同时修复这过程中一些问题.以下的所有步骤均为亲自测试 ...

  10. WCF系列

    转自:1) http://www.cnblogs.com/zhili/p/WCFSummary.html 2)  http://www.cnblogs.com/artech/archive/2009/ ...