在平时的工作中,时常需要注册与反注册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. 一些通用性的haproxy调优tips

    一.硬件和系统 haproxy是单线程,非阻塞,事件驱动,所以会最大化利用单个CPU内核,选择haproxy的硬件时要关注如下:   1.选择CPU的时候,选择高主频,大缓存的型号,比内核数更重要 2 ...

  2. angular学习笔记(十六) -- 过滤器(2)

    本篇主要介绍angular自定义的过滤器: 直接看例子: <!DOCTYPE html> <html ng-app="MyFilter"> <head ...

  3. maven打包可以行文件,包含依赖包等

    <build> <!-- 设定打包的名称 --> <finalName>ismp2xy</finalName> <plugins> < ...

  4. .net core相关博客

    http://www.cnblogs.com/artech/蒋金楠,网名Artech,知名IT博主, 微软多领域MVP,畅销IT图书作者,著<WCF全面解析>.<ASP.NET MV ...

  5. LeetCode: Reverse Words in a String 解题报告

    Reverse Words in a String Given an input string, reverse the string word by word. For example,Given ...

  6. egret请求参数

    egret的文档还不错,不过http请求参数的文档居然没有,于是自己摸索了一下, 发现原来是直接传字符串参数就可以了.于是封装了一个类,方便使用. class RequestParam { publi ...

  7. enter快捷键盘

    protected override bool ProcessDialogKey(Keys keyData) { #region PageDown if (keyData == Keys.Enter) ...

  8. 【Unity笔记】Awake()和Start()的区别

    Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在该Monobehavior.enabled == true的情况下执行. v ...

  9. 恶补java基础 位运算符

    以前不知道在哪看过别人写博客里的一句话  “越学的深入觉得自己会的东西越少”.最近研究了一下java的基础算法  hash表 被一些位运算符搞的头都大了 决心花一些时间研究一下以前一直觉得没用的东西! ...

  10. win7怎么把软件加入开机启动项

    点击开机菜单进入. 2 然后点击菜单栏中的所有程序. 3 在所有程序中找到‘启动’,这个启动就是开机启动项来的. 4 右键进行打开启动项. 5 把快捷方式复制到开机启动项中.如果找不到快捷方式可以右键 ...