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

📄 hmscanfs531ctl.cpp

📁 一个与控件的测试程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
函数功能:普通身份证的扫描
函数类型:short	
输入参数:
输出参数:short
返回值:  0--成功,1--失败
****************************************************!*/
short CHMScanFS531Ctrl::IdScanRcog() 
{
	WriteParseLog(__FILE__,__LINE__,"%s","普通证扫描线程运行,。,IdScanRcog。,, !!");

    if(hThreadScanProc)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","普通证扫描。正运行,强制结束线程。。IdScanRcog,, !!");

		hThreadScanProc = NULL;
	}

	if(!g_load)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","未初始化,返回失败。。IdScanRcog,, !!");
		
		return OLD_CARD_SCAN_FAIL;
	}
//清理
	memset(&g_card, 0x00, sizeof(IDCARD_ALL));
	
	hThreadScanProc = (HANDLE)_beginthread(ThreadScanProc,0,(LPVOID)this);

	if (!hThreadScanProc)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","普通证扫描线程启动失败,。,IdScanRcog。。,, !!");

		hThreadScanProc = NULL;
		return OLD_CARD_SCAN_FAIL;
	}

	WriteParseLog(__FILE__,__LINE__,"%s","普通证扫描线程运行 成功。。,。,IdScanRcog。。,, !!");

	return OLD_CARD_SCAN_SUCCEED;
}


void ThreadScanProc(LPVOID pParam)
{
	CHMScanFS531Ctrl *pCtrl = (CHMScanFS531Ctrl*)pParam;
	int ret = 0;
	char filename[PATH_SIZE];

	WriteParseLog(__FILE__,__LINE__,"%s","普通证扫描副线程运行。。。,, !!");

	pCtrl->m_sDeviceStatus = OLD_CARD_DEVICE_STATUS_NULL;

	IDCARD_ALL card;
	memset(&card,0x00,sizeof(IDCARD_ALL));
	memset(filename,0x00,sizeof(filename));

	strcpy(filename,"..\\log");
	strcat(filename, FILENAME);

	char cPathName[200];
    memset(&cPathName,0x00,sizeof(cPathName));
	
    GetPrivateProfileString("PHOTOPATH", "No1Path", "", cPathName, 150, LOG_CFG_FILENAME);
	
	while(1)   
	{
		WaitForSingleObject(pCtrl->hThreadScanProc, 200);
		
		if(g_bScanFlag)
		{
			break;
		}
		
		ret = 0;
		ret = pScanRecogExAll(filename, card,true,2,63,NULL,IDCARD_FLAG);    //(short)pParam);
		
		WriteParseLog(__FILE__,__LINE__,"[扫描运行返回状态]=[%d]",ret);
		
		if(!ret)
		{
			WriteParseLog(__FILE__,__LINE__,"%s","扫描成功,读取信息。。,, !!");
			
			pCtrl->m_sDeviceStatus = OLD_CARD_IDENTIFY_SUCCEED;
			
			EnterCriticalSection(&cs);
			
			memset(&g_card,0x00,sizeof(IDCARD_ALL));
			memcpy(&g_card,&card,sizeof(IDCARD_ALL));
			
			LeaveCriticalSection(&cs);
			
			WriteParseLog(__FILE__,__LINE__,"%s","普通证扫描成功, 发送消息WM_THREADSCANEVENT。。。,, !!");
			PostMessage(pCtrl->hWndMsg, WM_THREADSCANEVENT, (WPARAM)NULL, (LPARAM)NULL); 
			WriteParseLog(__FILE__,__LINE__,"%s","扫描线程运行成功。。。。,, !!");
			
			//////////////////////////////////////////////////////////////////////////
			////  更改文件名,,,。。
			
			char Temp[200];
			memset(Temp,0x00,sizeof(Temp));
			sprintf(Temp, "%s\\%s_No1.bmp",cPathName,g_card.number);
			MoveFileEx(filename, Temp, MOVEFILE_REPLACE_EXISTING);

			memset(Temp,0x00,sizeof(Temp));
			sprintf(Temp, "%s\\%s_No1.bmp.txt",cPathName, g_card.number);

			memset(cPathName, 0x00, sizeof(cPathName));
			sprintf(cPathName,".\\id001_result.txt");
			
			MoveFileEx(cPathName, Temp, MOVEFILE_REPLACE_EXISTING);
			//////////////////////////////////////////////////////////////////////////
			
			_endthread();
		}
		else if(1 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_ERROR;
			break;
		}
		else if(2 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_FILE_PATH_ERROR;
			break;
		}
		else if(3 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_IDENTIFY_FAIL;
			break;
		}
		else if(4 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_NOT_ONLINE;
			break;
		}
		else
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_NOT_ONLINE;
			break;
		}
		Sleep((DWORD)100);
	}
	
	PostMessage(pCtrl->hWndMsg, WM_OIDDEVICEERR, (WPARAM)NULL, (LPARAM)NULL); 
	
	_endthread();
}

/*!****************************************************
函数名称:NIdScanRcog
函数功能:防伪身份证扫描
函数类型:short
输入参数:
输出参数:short
返回值:  0--成功,1--失败 
****************************************************!*/
short CHMScanFS531Ctrl::NidScanRcog() 
{
	WriteParseLog(__FILE__,__LINE__,"%s","防伪扫描线程运行,。NidScanRcog。,, !!");
			
    if(hThreadNidScanProc)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","防伪扫描线程运行,强制结束线程,。NidScanRcog。,, !!");
		hThreadNidScanProc = NULL;
	}

	if(!g_load)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","未进行初始化,返回错误,。NidScanRcog。,, !!");
		return OLD_CARD_SCAN_FAIL;
	}

	WriteParseLog(__FILE__,__LINE__,"%s","创建线程。。,。NidScanRcog。,, !!");
    //清理
	memset(&g_card, 0x00, sizeof(IDCARD_ALL));
	
	hThreadNidScanProc = (HANDLE)_beginthread(ThreadNidScanProc,0,(LPVOID)this);

	if(!hThreadNidScanProc)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","创建线程失败,,返回扫描错误。。,。NidScanRcog。,, !!");
		
		hThreadNidScanProc = NULL;
		return OLD_CARD_SCAN_FAIL;
	}
	
	WriteParseLog(__FILE__,__LINE__,"%s","主线程运行成功。,。。,。NidScanRcog。,, !!");

	return OLD_CARD_SCAN_SUCCEED;
}

void ThreadNidScanProc(LPVOID pParam)
{
	CHMScanFS531Ctrl *pCtrl = (CHMScanFS531Ctrl*)pParam;
	int ret;
	char filename[PATH_SIZE];

	WriteParseLog(__FILE__,__LINE__,"%s","防伪扫描线程运行@@@@@@@@@@@@@@@@!");

	pCtrl->m_sDeviceStatus = OLD_DEVICE_STATUS_OK;  ///add by rhg 09-14

	IDCARD_ALL card;
	memset(&card,0x00,sizeof(IDCARD_ALL));
	memset(filename,0x00,sizeof(filename));
	strcat(filename, FILENAME);

	char cPathName[200];
    memset(&cPathName,0x00,sizeof(cPathName));
	
    GetPrivateProfileString("PHOTOPATH", "No1Path", "", cPathName, 150, LOG_CFG_FILENAME);

	while(1)
	{
		WaitForSingleObject(pCtrl->hThreadNidScanProc, 200);

		if(g_bNidScanFlag)
		{
			break;
		}
		ret = 0;
//		ret = pScanRecogExAll(filename, card,true,2,63,NULL,N_IDCARD_FLAG);
		ret = pRecogIdcardRe(filename,card,false,2,63,NULL,N_IDCARD_FLAG,true);
		WriteParseLog(__FILE__,__LINE__,"[扫描运行返回状态]=[%d]",ret);
		if(!ret)
		{
			WriteParseLog(__FILE__,__LINE__,"%s","创建线程,扫描运行返回成功。,, !!");
			pCtrl->m_sDeviceStatus = OLD_DEVICE_STATUS_OK;    ////add by rhg 09-14
			EnterCriticalSection(&cs);
			memset(&g_card,0x00,sizeof(IDCARD_ALL));
			memcpy(&g_card,&card,sizeof(IDCARD_ALL));
			LeaveCriticalSection(&cs);
			
			WriteParseLog(__FILE__,__LINE__,"%s","线程扫描成功,发送成功消息。WM_THREADSCANEVENT。。,, !!");
			PostMessage(pCtrl->hWndMsg, WM_THREADSCANEVENT, (WPARAM)NULL, (LPARAM)NULL); 
			WriteParseLog(__FILE__,__LINE__,"%s","线程扫描运行成功,线程return@@@@@@@@@@@@@@@@@@@@ !!");
			
			//////////////////////////////////////////////////////////////////////////
			////  更改文件名,,,。。
			
			char Temp[200];
			memset(Temp,0x00,sizeof(Temp));
			sprintf(Temp, "%s\\%s_No1.bmp",cPathName,g_card.number);
			
			memset(filename,0x00,sizeof(filename));
			strcpy(filename,".\\id001R.BMP");
			MoveFileEx(filename, Temp, MOVEFILE_REPLACE_EXISTING);
			
			//目前的扫描方式结果为空
			memset(Temp,0x00,sizeof(Temp));
			sprintf(Temp, "%s\\%s_No1.bmp.txt",cPathName, g_card.number);

			memset(cPathName, 0x00, sizeof(cPathName));
			sprintf(cPathName,".\\id001_result.txt");
			
			MoveFileEx(cPathName, Temp, MOVEFILE_REPLACE_EXISTING);
			//////////////////////////////////////////////////////////////////////////

			_endthread();
		}
		else if(1 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_ERROR;
			break;
		}
		else if(2 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_FILE_PATH_ERROR;
			break;
		}
		else if(3 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_IDENTIFY_FAIL;
			break;
		}
		else if(4 == ret)
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_NOT_ONLINE;
			break;
		}
		else
		{
			pCtrl->m_sDeviceStatus = OLD_CARD_SCAN_NOT_ONLINE;
			break;
		}
		pCtrl->m_sDeviceStatus = OLD_DEVICE_STATUS_BUSY;
		Sleep((DWORD)200);
	}		//while for break
	//注意这里是发错误消息!
	PostMessage(pCtrl->hWndMsg, WM_OIDDEVICEERR, (WPARAM)NULL, (LPARAM)NULL); 

	_endthread();
}

void CHMScanFS531Ctrl::FireScanEvent()
{
	FireDeviceStatus(m_sDeviceStatus);
}

void CHMScanFS531Ctrl::FireCalibEvent()
{
	FireDeviceStatus(m_sDeviceStatus);
}

BSTR CHMScanFS531Ctrl::GetCardName() 
{
	CString strResult;
	strResult.IsEmpty();
	strResult = g_card.name;
	return strResult.AllocSysString();
}

BSTR CHMScanFS531Ctrl::GetCardNum() 
{
	CString strResult;
	strResult.IsEmpty();
	strResult = g_card.number;
	return strResult.AllocSysString();
}

BSTR CHMScanFS531Ctrl::GetCardSex() 
{
	CString strResult;
	strResult.IsEmpty();
	strResult = g_card.sex;
	return strResult.AllocSysString();
}


BSTR CHMScanFS531Ctrl::GetCardAddress() 
{
	CString strResult;
	strResult.IsEmpty();
	strResult = g_card.address;
	return strResult.AllocSysString();
}

BSTR CHMScanFS531Ctrl::GetCardPeople() 
{
	CString strResult;
	// TODO: Add your dispatch handler code here
	strResult.IsEmpty();
	strResult = g_card.people;
	return strResult.AllocSysString();
}

BSTR CHMScanFS531Ctrl::GetCardBirthday() 
{
	CString strResult;
	// TODO: Add your dispatch handler code here
	strResult.IsEmpty();
	strResult = g_card.birthday;
	return strResult.AllocSysString();
}

BSTR CHMScanFS531Ctrl::GetCardSigndata() 
{
	CString strResult;
	// TODO: Add your dispatch handler code here
	strResult.IsEmpty();
	strResult = g_card.signdate;
	return strResult.AllocSysString();
}

BSTR CHMScanFS531Ctrl::GetCardValidterm() 
{
	CString strResult;
	// TODO: Add your dispatch handler code here
	strResult.IsEmpty();
	strResult = g_card.validterm;
	return strResult.AllocSysString();
}

BSTR CHMScanFS531Ctrl::GetCardOther() 
{
	CString strResult;
	// TODO: Add your dispatch handler code here
	strResult.IsEmpty();
	strResult = g_card.other;
	return strResult.AllocSysString();
}

short CHMScanFS531Ctrl::GetDeviceStatus() 
{
	return m_sDeviceStatus;
}

void CHMScanFS531Ctrl::SetDeviceStatus(short nNewValue) 
{
	SetModifiedFlag();
}


void CHMScanFS531Ctrl::CancelCom() 
{
    WriteParseLog(__FILE__,__LINE__,"%s","中断线程,CancelCom !!");

	if(g_bCalibFlag == FALSE)
		g_bCalibFlag = TRUE;

	if(g_bNidScanFlag == FALSE)
		g_bNidScanFlag = TRUE;

	if(g_bScanFlag == FALSE)
		g_bScanFlag = TRUE;

	if(hThreadCalibProc!=NULL)
	{
		hThreadCalibProc = NULL;
	}

	if(hThreadScanProc!=NULL)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","扫描线程强制结束 CanCelCom() !!");
		
		hThreadScanProc = NULL;
  	}
	
	if(hThreadCalibProc!=NULL)
	{
		WriteParseLog(__FILE__,__LINE__,"%s","校验线程强制结束 CanCelCom() !!");
		hThreadCalibProc = NULL;
	}
	
	memset(&g_card,0x00,sizeof(IDCARD_ALL));
	WriteParseLog(__FILE__,__LINE__,"%s","关闭端口成功。。。,,CloseCom !!");
	return;
}

BSTR CHMScanFS531Ctrl::GetEndData() 
{
	CString strResult;
	strResult.IsEmpty();
	
	CString str;
	CString strTmp;
	short sTmp = 0;
	str.IsEmpty();
	strTmp.IsEmpty();
	char Month[3];
	char Day[3];
	memset(Month,0x00,sizeof(Month));
	memset(Day,0x00,sizeof(Day));

	strTmp.Format("%s",g_card.signdate);
	strTmp = strTmp.Left(strTmp.Find("年"));
	if(strTmp == "")
	{
		strResult.Format("00000000");
		return strResult.AllocSysString();
	}

	str.Format("%s",g_card.validterm);
	str = str.Left(str.Find("年"));

	sTmp = (short)(atoi(strTmp)+atoi(str));
	if(sTmp == 0)
	{
		strResult.Format("00000000");
		return strResult.AllocSysString();
	}

	strTmp.IsEmpty();
	strTmp.Format("%s",g_card.signdate);
	
	str.IsEmpty();
	str = strTmp.Mid(strTmp.Find("年")+2,strTmp.Find("月")-strTmp.Find("年")-2);
	sprintf(Month,"%02s",str);

	str.IsEmpty();
	str = strTmp.Mid(strTmp.Find("月")+2,strTmp.Find("日")-strTmp.Find("月")-2);
	sprintf(Day,"%02s",str);

	strResult.IsEmpty();
	strResult.Format("%d%s%s",sTmp,Month,Day);
	if(strResult == "")
	{
		strResult.Format("00000000");
		return strResult.AllocSysString();
	}

	str.ReleaseBuffer();
	strTmp.ReleaseBuffer();

	////返回 20010212
	return strResult.AllocSysString();
}

⌨️ 快捷键说明

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