VC++:制作一个控件注册的小工具
在平时的工作中,时常需要注册与反注册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++:制作一个控件注册的小工具的更多相关文章
- CAD向控件注册一个命令
_DMxDrawX::RegistUserCustomCommand 向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令事件的id就是该注册时的id值,成功返回true. ...
- CAD向控件注册一个命令(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::Mx_RegistUserCustomCommand 向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令 ...
- C#制作ActiveX控件及部署升级(摘自网络)
使用C#开发ActiveX控件 控件开发.制作CAB包.签名.部署 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序 ...
- VC++编写ActiveX控件
ActiveX这门技术是通过生成“*.ocx”文件来实现的.先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件.如果你用过Visual ...
- C#-WebForm-WebForm开发基础、如何给控件注册事件?——事件委托写法、http无状态性、三层结构
(小知识 - xml:可扩展的标记语言 html:超文本标记语言) 一.创建WebForm:新建→网站 此时文件夹中只有一个 config 文件,打开后 二.在项目下右键添加新项 在设计页面中打开 从 ...
- VFP中OCX控件注册检测及自动注册
这是原来从网上搜集.整理后编制用于自己的小程序使用的OCX是否注册及未注册控件的自动注册函数. CheckCtrlFileRegist("ctToolBar.ctToolBarCtrl.4& ...
- 第二十一篇:SOUI中的控件注册机制
Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...
- WPF--Blend制作Button控件模板
博客园新人,WPF初学者.不涉及理论知识,直接进入操作. 记录一下使用Blend制作Button控件模板过程中,学到Blend几个知识点: 1.渐变画笔编辑器的Alpha选项可以调控件的透明度.即下图 ...
- 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)
原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...
随机推荐
- SQL游标操作每隔5分钟时间段数据统计信息
Tb_People 表信息: id uname era amount plushtime 1000031 张亮 中年 100000 ...
- VC++ 知识点
1.寻找文件时,CFileFind类的使用. 2.寻找目录时使用BROWSEINFO,其中包含了用户选中目录的重要信息. 3.LPITEMIDLIST类 4.目录选择对话框的使用SHBrowseFor ...
- RSS是什么,RSS怎么玩,RSS原理是什么 (zhuan)
http://www.cjjjs.com/paper/gzsh/201622721397372.aspx *********************************************** ...
- c++多继承浅析
图一 图二 ...
- C#的参数类型:params、out和ref
parmas类型的参数 using System; public class MyClass { public static void UseParams(params int[] list) { ; ...
- 一款基于jquery的手风琴图片展示效果
今天要给大家分享一款基于jquery的手风琴图片展示效果.这款图片的展示效果鼠标经过前是灰色的,当鼠标经过时图片变大且变为彩色.效果图如下: 在线预览 源码下载 实现的代码. html代码: &l ...
- SQL Injection绕过技巧
0x00 sql注入的原因 sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量. 但是更深层次的原因是,将用户输入的字符串,当成了 "sql语 ...
- 找你妹+ipad+wifi,回顾那年的经典游戏
昨天,不是从前天同事拿平板给我后,就没睡过一个安稳觉. 先是看电视看得爽歪了,再就是昨天晚上的游戏之夜.IPAD比較老.连系统都不好更新了.就用了留存的应用. 打开酷我看看有什么音乐推荐,听到一首&l ...
- 【Unity/SVN】使用SVN管理Unity项目
本文转载自:http://blog.csdn.net/neil3d/article/details/38437237 Unity提供了自己的XXXServer,不过大家评论好像不是很好用,主要是不支持 ...
- CAS (3) —— Mac下配置CAS客户端经代理访问Tomcat CAS
CAS (3) -- Mac下配置CAS客户端经代理访问Tomcat CAS tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9 ...