📄 hmscanfs531ctl.cpp
字号:
函数功能:普通身份证的扫描
函数类型: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 + -