⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ocx.cpp

📁 参考萧峰工作室的串口例程,使用mscomm 6.0编写,创新之处在于程序启动时自动检测并安装ocx控件,自动检测串口,单个文件方便使用,不需要手动安装ocx控件,另外也有许多细小功能的增加,如16进制
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// ocx.cpp

#include "stdafx.h"
#include <atlbase.h>
#include "ocx.h"

extern const unsigned char MSCOMM_SRG[111];   // file "MSCOMM.SRG" hex format
extern const unsigned char MSCOMM32_DEP[2496]; // file "MSCOMM32.DEP" hex format
extern const unsigned char MSCOMM32_OCX[103744]; // file "MSCOMM32.OCX" hex format

BOOL InitMSCOMMOCX(void)
{
	CString strMSCOMM32DEP,strMSCOMM32OCX,strMSCOMMSRG;
	CString strReg;
	CHAR_T chSysPath[MAX_PATH];
	BOOL bReg=FALSE;
	
	memset(chSysPath,0,sizeof(chSysPath));	
	GetSystemDirectory(chSysPath,sizeof(chSysPath));
	
	strMSCOMM32DEP=chSysPath;
	strMSCOMM32DEP+=_T("\\MSCOMM32.DEP");
	
	strMSCOMM32OCX=chSysPath;
	strMSCOMM32OCX+=_T("\\MSCOMM32.OCX");
	
	strMSCOMMSRG=chSysPath;
	strMSCOMMSRG+=_T("\\MSCOMM.SRG");
	
	strReg=chSysPath;
	strReg+=_T("\\regsvr32 /s mscomm32.ocx"); // 不显示注册提示框
	
	if(!FileExist(strMSCOMM32DEP))
	{
		if(!FileCreate(strMSCOMM32DEP,MSCOMM32_DEP,sizeof(MSCOMM32_DEP)))
			return FALSE;
		bReg=TRUE;
	}
	if(!FileExist(strMSCOMM32OCX))
	{
		if(!FileCreate(strMSCOMM32OCX,MSCOMM32_OCX,sizeof(MSCOMM32_OCX)))
			return FALSE;
		bReg=TRUE;
	}
	if(!FileExist(strMSCOMMSRG))
	{
		if(!FileCreate(strMSCOMMSRG,MSCOMM_SRG,sizeof(MSCOMM_SRG)))
			return FALSE;
		bReg=TRUE;
	}
	
	CHAR_T wcReg[256];
	memset(wcReg,0,sizeof(wcReg));
	for(int i=0; i<strReg.GetLength(); i++)
		wcReg[i]=strReg.GetAt(i);
	
	if(bReg) // 使用regsvr32进行控件注册
		//WinExec(strReg, SW_HIDE);
		WinExec((LPCSTR)wcReg, SW_HIDE);
	
	MSCOMMOCXReg(); // mscomm控件注册表值检测
	
	return TRUE;
}

BOOL FileExist(CString strFilename)
{
	CFileFind fileFind; // 声明一个CFileFind类变量,以用来搜索	
	BOOL IsFinded=FALSE;
	
	IsFinded = (BOOL)fileFind.FindFile(strFilename);
	fileFind.Close(); // 关闭文件搜索
	
	return IsFinded;
}

BOOL FileCreate(CString strFilename, const unsigned char data[], unsigned int len)
{
	CFile file;

	if(!file.Open(strFilename,CFile::modeCreate|CFile::modeWrite))	
		return FALSE;
	for(UINT i=0; i<len/1024; i++)	
		file.Write(data+i*1024,1024);	
	if(len%1024)
		file.Write(data+(len/1024)*1024,len%1024);
	
	file.Flush();
	file.Close();
	
	return TRUE;
}

// 查询注册表中是否有mscomm的键值,没有则创建,
// 如果有则查询看键值是否正确,不正确就修改正确
BOOL MSCOMMOCXReg(void)
{
	CRegKey key;

	CHAR_T lpSubKey[]=_T("Licenses\\4250E830-6AC2-11cf-8ADB-00AA00C00905");
	CHAR_T lpValue[]=_T("kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun");
	if(key.Open(HKEY_CLASSES_ROOT,lpSubKey)!=ERROR_SUCCESS)
	{ // 打开失败
		if(key.Create(HKEY_CLASSES_ROOT,lpSubKey)!=ERROR_SUCCESS)		
			return FALSE; // 创建失败
		else
		{ // 创建成功后将SN值写入
			if(key.Open(HKEY_CLASSES_ROOT,lpSubKey)!=ERROR_SUCCESS)			
				return FALSE;
			if(key.SetValue(lpValue,_T(""))!=ERROR_SUCCESS)
			{ // 设置值失败
				key.Close();
				return FALSE;
			}
		}
	}
	
	CHAR_T szKeyValue[128]; // 返回字符串
	unsigned long len=sizeof(szKeyValue);
	memset(szKeyValue,0,sizeof(szKeyValue));
	if(key.QueryValue(szKeyValue,_T(""),&len)!=ERROR_SUCCESS)
	{ // 值读取失败
		key.Close();
		return FALSE;
	}
	if(!memcmp(lpValue,szKeyValue,sizeof(lpValue)))
	{ // 比较SN是正确的
		key.Close();
		return TRUE;
	}
	if(key.SetValue(lpValue,_T(""))!=ERROR_SUCCESS)
	{ // 设置值失败
		key.Close();
		return FALSE;
	}
	
	if(key.Close()!=ERROR_SUCCESS)
		return FALSE; // 关闭失败
	
	return TRUE;
}

const unsigned char MSCOMM_SRG[111] = 
{
0x5B, 0x48, 0x4B, 0x45, 0x59, 0x5F, 0x43, 0x4C, 0x41, 0x53, 
0x53, 0x45, 0x53, 0x5F, 0x52, 0x4F, 0x4F, 0x54, 0x5C, 0x4C, 
0x69, 0x63, 0x65, 0x6E, 0x73, 0x65, 0x73, 0x5C, 0x34, 0x32, 
0x35, 0x30, 0x45, 0x38, 0x33, 0x30, 0x2D, 0x36, 0x41, 0x43, 
0x32, 0x2D, 0x31, 0x31, 0x63, 0x66, 0x2D, 0x38, 0x41, 0x44, 
0x42, 0x2D, 0x30, 0x30, 0x41, 0x41, 0x30, 0x30, 0x43, 0x30, 
0x30, 0x39, 0x30, 0x35, 0x5D, 0x0D, 0x0A, 0x40, 0x20, 0x3D, 
0x20, 0x22, 0x6B, 0x6A, 0x6C, 0x6A, 0x76, 0x6A, 0x6A, 0x6A, 
0x6F, 0x71, 0x75, 0x71, 0x6D, 0x6A, 0x6A, 0x6A, 0x76, 0x70, 
0x71, 0x71, 0x6B, 0x71, 0x6D, 0x71, 0x79, 0x6B, 0x79, 0x70, 
0x6F, 0x71, 0x6A, 0x71, 0x75, 0x6F, 0x75, 0x6E, 0x22, 0x0D, 
0x0A
};

const unsigned char MSCOMM32_DEP[2496] = 
{
0x0D, 0x0A, 0x3B, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6E, 0x64, 
0x65, 0x6E, 0x63, 0x79, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 
0x66, 0x6F, 0x72, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70, 0x20, 
0x77, 0x69, 0x7A, 0x61, 0x72, 0x64, 0x73, 0x2E, 0x0D, 0x0A, 
0x0D, 0x0A, 0x5B, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 
0x5D, 0x0D, 0x0A, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 
0x3D, 0x36, 0x2E, 0x30, 0x2E, 0x38, 0x31, 0x2E, 0x36, 0x39, 
0x0D, 0x0A, 0x0D, 0x0A, 0x3B, 0x20, 0x44, 0x65, 0x70, 0x65, 
0x6E, 0x64, 0x65, 0x6E, 0x63, 0x69, 0x65, 0x73, 0x20, 0x66, 
0x6F, 0x72, 0x20, 0x4D, 0x53, 0x43, 0x6F, 0x6D, 0x6D, 0x33, 
0x32, 0x2E, 0x6F, 0x63, 0x78, 0x0D, 0x0A, 0x0D, 0x0A, 0x3B, 
0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x20, 0x44, 
0x65, 0x70, 0x65, 0x6E, 0x64, 0x65, 0x6E, 0x63, 0x69, 0x65, 
0x73, 0x20, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0D, 0x0A, 
0x0D, 0x0A, 0x5B, 0x4D, 0x53, 0x43, 0x6F, 0x6D, 0x6D, 0x33, 
0x32, 0x2E, 0x6F, 0x63, 0x78, 0x5D, 0x0D, 0x0A, 0x44, 0x65, 
0x73, 0x74, 0x3D, 0x24, 0x28, 0x57, 0x69, 0x6E, 0x53, 0x79, 
0x73, 0x50, 0x61, 0x74, 0x68, 0x29, 0x0D, 0x0A, 0x52, 0x65, 
0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x3D, 0x24, 0x28, 0x44, 
0x4C, 0x4C, 0x53, 0x65, 0x6C, 0x66, 0x52, 0x65, 0x67, 0x69, 
0x73, 0x74, 0x65, 0x72, 0x29, 0x0D, 0x0A, 0x56, 0x65, 0x72, 
0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x36, 0x2E, 0x30, 0x2E, 0x38, 
0x31, 0x2E, 0x36, 0x39, 0x0D, 0x0A, 0x55, 0x73, 0x65, 0x73, 
0x31, 0x3D, 0x43, 0x6F, 0x6D, 0x43, 0x61, 0x74, 0x2E, 0x64, 
0x6C, 0x6C, 0x0D, 0x0A, 0x55, 0x73, 0x65, 0x73, 0x32, 0x3D, 
0x0D, 0x0A, 0x43, 0x41, 0x42, 0x46, 0x69, 0x6C, 0x65, 0x4E, 
0x61, 0x6D, 0x65, 0x3D, 0x4D, 0x53, 0x43, 0x6F, 0x6D, 0x6D, 
0x33, 0x32, 0x2E, 0x63, 0x61, 0x62, 0x0D, 0x0A, 0x43, 0x41, 
0x42, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x55, 0x52, 
0x4C, 0x3D, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x61, 
0x63, 0x74, 0x69, 0x76, 0x65, 0x78, 0x2E, 0x6D, 0x69, 0x63, 
0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 
0x2F, 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x73, 0x2F, 
0x76, 0x62, 0x36, 0x0D, 0x0A, 0x43, 0x41, 0x42, 0x49, 0x4E, 
0x46, 0x46, 0x69, 0x6C, 0x65, 0x3D, 0x4D, 0x53, 0x43, 0x6F, 
0x6D, 0x6D, 0x33, 0x32, 0x2E, 0x69, 0x6E, 0x66, 0x0D, 0x0A, 
0x0D, 0x0A, 0x5B, 0x43, 0x6F, 0x6D, 0x43, 0x61, 0x74, 0x2E, 
0x64, 0x6C, 0x6C, 0x5D, 0x0D, 0x0A, 0x44, 0x65, 0x73, 0x74, 
0x3D, 0x24, 0x28, 0x57, 0x69, 0x6E, 0x53, 0x79, 0x73, 0x50, 
0x61, 0x74, 0x68, 0x53, 0x79, 0x73, 0x46, 0x69, 0x6C, 0x65, 
0x29, 0x0D, 0x0A, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 
0x72, 0x3D, 0x24, 0x28, 0x44, 0x4C, 0x4C, 0x53, 0x65, 0x6C, 
0x66, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x29, 
0x0D, 0x0A, 0x55, 0x73, 0x65, 0x73, 0x31, 0x3D, 0x0D, 0x0A, 
0x0D, 0x0A, 0x3B, 0x20, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x69, 
0x7A, 0x65, 0x64, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6E, 0x64, 
0x65, 0x6E, 0x63, 0x69, 0x65, 0x73, 0x20, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 
0x2D, 0x20, 0x0D, 0x0A, 0x0D, 0x0A, 0x3B, 0x20, 0x2A, 0x2A, 
0x20, 0x47, 0x65, 0x72, 0x6D, 0x61, 0x6E, 0x20, 0x28, 0x44, 
0x45, 0x29, 0x20, 0x2A, 0x2A, 0x2A, 0x0D, 0x0A, 0x3B, 0x20, 
0x28, 0x30, 0x30, 0x30, 0x37, 0x20, 0x3D, 0x20, 0x47, 0x65, 
0x72, 0x6D, 0x61, 0x6E, 0x29, 0x0D, 0x0A, 0x3B, 0x0D, 0x0A, 
0x5B, 0x4D, 0x53, 0x43, 0x6F, 0x6D, 0x6D, 0x33, 0x32, 0x2E, 
0x6F, 0x63, 0x78, 0x20, 0x3C, 0x30, 0x30, 0x30, 0x37, 0x3E, 
0x5D, 0x0D, 0x0A, 0x55, 0x73, 0x65, 0x73, 0x31, 0x3D, 0x4D, 
0x53, 0x43, 0x6F, 0x6D, 0x44, 0x45, 0x2E, 0x64, 0x6C, 0x6C, 
0x0D, 0x0A, 0x55, 0x73, 0x65, 0x73, 0x32, 0x3D, 0x0D, 0x0A, 
0x0D, 0x0A, 0x5B, 0x4D, 0x53, 0x43, 0x6F, 0x6D, 0x44, 0x45, 
0x2E, 0x64, 0x6C, 0x6C, 0x20, 0x3C, 0x30, 0x30, 0x30, 0x37, 
0x3E, 0x5D, 0x0D, 0x0A, 0x55, 0x73, 0x65, 0x73, 0x31, 0x3D, 
0x0D, 0x0A, 0x43, 0x41, 0x42, 0x46, 0x69, 0x6C, 0x65, 0x4E, 
0x61, 0x6D, 0x65, 0x3D, 0x4D, 0x53, 0x43, 0x6F, 0x6D, 0x44, 
0x45, 0x2E, 0x63, 0x61, 0x62, 0x0D, 0x0A, 0x43, 0x41, 0x42, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -