实现mscomm32.ocx自动注册的程序(ActiveX控件注册/注销/检测 )

一、参考资料

二、详细介绍

1.增加管理员权限

控件注册需要管理员权限 ,否则会打开DllRegisterServer失败。

2、注册控件

void CMFCApplication1Dlg::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码
 //装载ActiveX控件  
 HINSTANCE hLib = LoadLibrary(_T("MSCOMM32\\mscomm32.ocx"));
 if (hLib < (HINSTANCE)HINSTANCE_ERROR)
 {
  MessageBox(_T("不能载入OCX文件!"));  
  //return FALSE;
 }
 //获取注册函数DllRegisterServer地址  
 FARPROC lpDllEntryPoint;
 lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");//注意这里是DllRegisterServer  
                //调用注册函数DllRegisterServer注册  
 if (lpDllEntryPoint != NULL)
 {
  if (FAILED((*lpDllEntryPoint)()))
  {
  MessageBox(_T("调用DllRegisterServer失败!"));  
   FreeLibrary(hLib);
  // return FALSE;
  }
  MessageBox(_T("OCX注册成功!"));  
  //return TRUE;
 }
 else
 {
  MessageBox(_T("OCX注册失败!"));  
  //return FALSE;
 }
}

3.注销控件

void CMFCApplication1Dlg::OnBnClickedButton2()
{
	//装载ActiveX控件  
	HINSTANCE hLib = LoadLibrary(_T("MSCOMM32\\mscomm32.ocx"));
	if (hLib < (HINSTANCE)HINSTANCE_ERROR)
	{
		 MessageBox(_T("不能载入OCX文件!"));  
	//	return FALSE;
	}

	//获取注销函数DllUnregisterServer地址  
	FARPROC lpDllEntryPoint;
	lpDllEntryPoint = GetProcAddress(hLib, "DllUnregisterServer");//注意这里是DllUnregisterServer  

																  //调用注销函数DllUnregisterServer注销  
	if (lpDllEntryPoint != NULL)
	{
		if (FAILED((*lpDllEntryPoint)()))
		{
		 MessageBox(_T("调用DllUnregisterServer失败!"));  
			FreeLibrary(hLib);
			//return FALSE;
		}
		 MessageBox(_T("OCX注销成功!"));  
		//return TRUE;
	}
	else
	{
		 MessageBox(_T("OCX注销失败!"));  
		//return FALSE;
	}
}

4、检测控件

Mscomm控件注册后存在注册表三个地方可查
1、
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MSCOMMLib.MSComm]
@="Microsoft Communications Control, version 6.0"

[HKEY_CLASSES_ROOT\MSCOMMLib.MSComm\CLSID]
@="{648A5600-2C6E-101B-82B6-000000000014}"

[HKEY_CLASSES_ROOT\MSCOMMLib.MSComm\CurVer]
@="MSCOMMLib.MSComm.1"


2、
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSCOMMLib.MSComm.1]
@="Microsoft Communications Control, version 6.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSCOMMLib.MSComm.1\CLSID]
@="{648A5600-2C6E-101B-82B6-000000000014}"


3、

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}]
@="Microsoft Communications Control, version 6.0"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Control]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Implemented Categories]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Implemented Categories\{0DE86A52-2BAA-11CF-A229-00AA003D7352}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Implemented Categories\{0DE86A53-2BAA-11CF-A229-00AA003D7352}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Implemented Categories\{0DE86A57-2BAA-11CF-A229-00AA003D7352}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Implemented Categories\{40FC6ED4-2438-11CF-A3DB-080036F12502}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\InprocServer32]
@="C:\\Users\\Administrator\\Documents\\Visual Studio 2015\\Projects\\MFCApplication1\\Debug\\MSCOMM32\\mscomm32.ocx"
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\MiscStatus]
@="0"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\MiscStatus\1]
@="132497"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\ProgID]
@="MSCOMMLib.MSComm.1"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Programmable]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\ToolboxBitmap32]
@="C:\\Users\\Administrator\\Documents\\Visual Studio 2015\\Projects\\MFCApplication1\\Debug\\MSCOMM32\\mscomm32.ocx, 1"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\TypeLib]
@="{648A5603-2C6E-101B-82B6-000000000014}"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\Version]
@="1.1"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{648A5600-2C6E-101B-82B6-000000000014}\VersionIndependentProgID]
@="MSCOMMLib.MSComm"

所以检测控件通过检查注册表来确定
void CMFCApplication1Dlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	HKEY hKey;
	if (RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("MSCOMMLib.MSComm\\CLSID"), 0, KEY_READ, &hKey) != ERROR_SUCCESS)
		//if (RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("Wow6432Node\\CLSID\\{648A5600-2C6E-101B-82B6-000000000014}\\InprocServer32"), 0, KEY_READ, &hKey) != ERROR_SUCCESS)

	{
		MessageBox(_T("OCX没有注册!!!"));  
	//	return FALSE;
	}
	else
	{
		 MessageBox(_T("OCX已经注册!!!"));  
	//	return TRUE;
	}
}

三、案例下载

这里介绍的是在当前目录下进行的注册,如果0cx文件目录改变,控件注册就失效了,应该把文件复制到c:\widnows\system32下面去注册
 
  


猜你喜欢

转载自blog.csdn.net/greless/article/details/80289936