条形码扫描程序

客户有个条形码扫描的机器,是symbol公司提供的一个设备

• 操作系统:Microsoft Windows CE .NET 4.2 Core

• 内存配置:32 MB RAM/32 MB 闪存

• 屏幕:单色240 x 240 像素, 2.2 英寸对角线,非触摸屏

• 扩展槽:用户可操作的Secure Digital (SD) 卡插槽

• 键盘:21 键键盘

• 数据采集:一维条码激光扫描

他们提供一个开发包sdk供开发操作条形码,具体函数如下:

SCAN_AllocateBuffer    分配缓存

SCAN_DeallocateBuffer   回收缓存

SCAN_FindFirst   查询第一个可用的扫描设备

SCAN_FindNext   查询下一个可用的扫描设备

SCAN_FindClose;     关闭被查询到的扫描设备

SCAN_Open  打开一个指定的扫描设备

SCAN_GetVersionInfo   获得版本信息

SCAN_Close   关闭一个指定的扫描设备

SCAN_Enable    扫描器能动扫描

SCAN_Disable    扫描器不能动扫描

SCAN_ReadLabelEvent  提交阅读事件

SCAN_ReadLabelMsg   提交阅读消息

SCAN_ReadLabelWait   提交阅读等待

SCAN_CancelRead  取消一个阅读(未完成的阅读)

SCAN_Flush  关闭所有的阅读

SCAN_GetSoftTrigger   获得软触动标志

SCAN_SetSoftTrigger    设置触动标志

SCAN_GetDeviceInfo    获得设备能力

SCAN_GetSupportedDecoders  获得支持的解码器列表

SCAN_GetEnabledDecoders  获得能用的解码器列表

SCAN_SetEnabledDecoders  设置能用的解码器列表

SCAN_GetDecoderParams   获得解码器参数

SCAN_SetDecoderParams   设置解码器参数

SCAN_GetUPCEANParams  

SCAN_SetUPCEANParams

SCAN_GetReaderParams   获得阅读参数

SCAN_SetReaderParams   设置阅读参数

SCAN_GetInterfaceParams  获得接口参数

SCAN_SetInterfaceParams  设置接口参数

SCAN_GetScanParameters  获得扫描参数

SCAN_SetScanParameters  设置扫描参数

SCAN_GetScanStatus  获得扫描状态

SCAN_RegisterScanMessage  注册扫描信息

SCAN_DeregisterScanMessage  撤销扫描信息

SCAN_DoRemoteFeedback

SCAN_Ioctl

注意:

SCAN_ReadLabelMsg可以出发消息,整个过程是消息驱动的,所以需要用到EVC中的Message事件。

 

条形码扫描+SQLCE数据库远程访问

LRESULT CALLBACK ScanProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
 DWORD dwResult;
 TCHAR szMsgBuf[256];
 LPSCAN_BUFFER lpScanBuf;
 HWND hctl_data;
 ISSCERDA* pCERDA = NULL;
 BSTR bStr = NULL;
 BSTR bConnectStr = NULL;
 BSTR bQueryStr = NULL;


 switch(message)
 {
 case WM_INITDIALOG:
  {
   dwResult = SCAN_Open(szScannerName, &hScanner);
   if ( dwResult != E_SCN_SUCCESS )
   {
    ErrorExit(hDlg, IDS_FAILURE, TEXT("SCAN_Open"));
    break;
   }

   dwResult = SCAN_Enable(hScanner);
   if ( dwResult != E_SCN_SUCCESS )
   {
    ErrorExit(hDlg, IDS_FAILURE, TEXT("SCAN_Enable"));
    break;
   }

   lpScanBuffer = SCAN_AllocateBuffer(bUseText, dwScanSize);
   if (lpScanBuffer == NULL)
   {
    ErrorExit(hDlg, IDS_FAILURE, TEXT("SCAN_AllocateBuffer"));
    return TRUE;
   }

   dwResult = SCAN_ReadLabelMsg(hScanner,
           lpScanBuffer,
           hDlg,
           UM_SCAN,
           dwScanTimeout,
           NULL);
   if ( dwResult != E_SCN_SUCCESS )
    ErrorExit(hDlg, IDS_FAILURE, TEXT("SCAN_ReadLabelMsg"));
   else
    bRequestPending = TRUE;

   GetPrivateProfileString(_T("SQLCE"),_T("IP"),_T("127.0.0.1"),szSqlceIP,128,_T(".\\Config.ini"));
   GetPrivateProfileString(_T("SQL"),_T("IP"),_T("127.0.0.1"),szSqlIP,128,_T(".\\Config.ini"));
   GetPrivateProfileString(_T("SQL"),_T("UID"),_T("sa"),szSqlUID,128,_T(".\\Config.ini"));
   GetPrivateProfileString(_T("SQL"),_T("PWD"),_T("tendency"),szSqlPWD,128,_T(".\\Config.ini"));
  }
  break;
 case UM_SCAN:
  {
   bRequestPending = FALSE;

   bTriggerFlag = FALSE;
   SCAN_SetSoftTrigger(hScanner,&bTriggerFlag);

   lpScanBuf = (LPSCAN_BUFFER)lParam;
   if ( lpScanBuf == NULL )
    ErrorExit(hDlg, IDS_ERR_BUF, 0);

   hctl_data = GetDlgItem(hDlg,IDC_EDIT_SCAN);

   switch (SCNBUF_GETSTAT(lpScanBuf))
   {
    case E_SCN_DEVICEFAILURE:

     SetWindowText(hctl_data, LoadMsg(IDS_DEVICE_FAILURE,
             szMsgBuf, sizeof(szMsgBuf)/sizeof(szMsgBuf[0])));
     break;

    case E_SCN_READPENDING:

     SetWindowText(hctl_data, LoadMsg(IDS_READ_PENDING,
             szMsgBuf, sizeof(szMsgBuf)/sizeof(szMsgBuf[0])));
     break;

    case E_SCN_READCANCELLED:

     if (bStopScanning)
     {
      SendMessage(hDlg,UM_STOPSCANNING,0,0L); 
      return TRUE;
     }
     if (!GetFocus()) 
      break;

     SetWindowText(hctl_data, LoadMsg(IDS_READ_CANCELLED,
             szMsgBuf, sizeof(szMsgBuf)/sizeof(szMsgBuf[0])));
     break;

    case E_SCN_READTIMEOUT:
     if(bContinuousMode)
      PostMessage(hDlg,WM_COMMAND,IDC_BTN_SCAN,0L);
     break;
   
    case E_SCN_SUCCESS:
    
     SetWindowText(hctl_data, (LPTSTR)SCNBUF_GETDATA(lpScanBuffer));

     if(bContinuousMode)
      PostMessage(hDlg,WM_COMMAND,IDC_BTN_SCAN,0L);
     break;
   }

   if (GetFocus())
   {
    dwResult = SCAN_ReadLabelMsg(hScanner,
            lpScanBuffer,
            hDlg,
            message,
            dwScanTimeout,
            NULL);
    
    if ( dwResult != E_SCN_SUCCESS )
     ErrorExit(hDlg, IDS_FAILURE, TEXT("SCAN_ReadLabelMsg"));
    else
     bRequestPending = TRUE;
   }
   return TRUE;
  }
 case UM_STOPSCANNING:
  {
   if (!bStopScanning && bRequestPending)       
    SCAN_Flush(hScanner);

   if (!bRequestPending)
   {       
    SCAN_Disable(hScanner);

    if (lpScanBuffer)
     SCAN_DeallocateBuffer(lpScanBuffer);

    SCAN_Close(hScanner);

    EndDialog(hDlg, 0);
   }
   bStopScanning = TRUE;
   return TRUE;
  }
 case WM_ACTIVATE:
  {
   switch(LOWORD(wParam))
   {
    case WA_INACTIVE:

     hctl_data = GetDlgItem(hDlg,IDC_EDIT_SCAN);
     SetWindowText(hctl_data, LoadMsg(IDS_INACTIVE, szMsgBuf, sizeof(szMsgBuf)/sizeof(szMsgBuf[0])));

     if (bRequestPending)
      dwResult = SCAN_Flush(hScanner);
     break;
    
    default:

     hctl_data = GetDlgItem(hDlg,IDC_EDIT_SCAN);
     SetWindowText(hctl_data, LoadMsg(IDS_READY, szMsgBuf, sizeof(szMsgBuf)/sizeof(szMsgBuf[0])));

     if (!bRequestPending && lpScanBuffer != NULL && !bStopScanning)
     {
      dwResult = SCAN_ReadLabelMsg(hScanner, lpScanBuffer, hDlg, UM_SCAN, dwScanTimeout, NULL);
      
      if ( dwResult != E_SCN_SUCCESS )
       ErrorExit(hDlg, IDS_FAILURE, TEXT("SCAN_ReadLabelMsg"));
      else
       bRequestPending = TRUE;
     }
     break;
   }
  }break;
 case WM_COMMAND:
  {
   switch (LOWORD(wParam))
            {
   case IDC_BTN_SCAN://扫描
    {
     bTriggerFlag = FALSE;
     SCAN_SetSoftTrigger(hScanner,&bTriggerFlag);

     bTriggerFlag = TRUE;
     SCAN_SetSoftTrigger(hScanner,&bTriggerFlag);
    }
    break;
   case IDC_BTN_SAVE://保存
    {
     TCHAR buffer[128];
     hctl_data = GetDlgItem(hDlg,IDC_EDIT_SCAN);
     if(GetWindowText(hctl_data, buffer, dwScanSize) == 0)
      return FALSE;
     PBYTE pFileBuf;
     pFileBuf = new BYTE[128]; //分配缓冲区
     memset(pFileBuf,0,128);
     CFile file;
     file.Open(lpFileName, CFile::modeRead);
     ASSERT(file != NULL);
     file.Read((void *)pFileBuf,126);
     file.Close();
     TCHAR WideChar[126];
     MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pFileBuf, 126, WideChar, 126);
     delete [] pFileBuf;
     //--------------//
     CoInitialize();
     HRESULT hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA);
     ASSERT(hr == S_OK);
     ASSERT(pCERDA != NULL);

     TCHAR sqlIP[128];
     _tcscpy(sqlIP,_T("http://"));
     _tcscat(sqlIP,szSqlceIP);
     _tcscat(sqlIP,_T("/sqlce/sscesa20.dll"));
     bStr = sqlIP;
     pCERDA->put_InternetURL(bStr);

     bStr = SysAllocString(_T("Administrator"));
     pCERDA->put_InternetLogin(bStr);
     SysFreeString(bStr);

     bStr = SysAllocString(_T("9614188"));
     pCERDA->put_InternetPassword(bStr);
     SysFreeString(bStr);

     TCHAR sql[256];
     _tcscpy(sql,_T("Provider=sqloledb;Data Source="));
     _tcscat(sql,szSqlIP);
     _tcscat(sql,_T(";Initial Catalog=WMS;User Id="));
     _tcscat(sql,szSqlUID);
     _tcscat(sql,_T(";Password="));
     _tcscat(sql,szSqlPWD);
     bConnectStr = sql;
   
     TCHAR sqlinfo[256];
     _tcscpy(sqlinfo,_T("INSERT INTO T_ScanData(NoteNo,BarCode) VALUES('"));
     _tcscat(sqlinfo,WideChar);
     _tcscat(sqlinfo,_T("','"));
     _tcscat(sqlinfo,buffer);
     _tcscat(sqlinfo,_T("')"));

     bQueryStr = sqlinfo;
     hr = pCERDA->SubmitSQL(bQueryStr,bConnectStr);

     if (FAILED(hr))
     {
      ISSCEErrors  *pISSCEErrors = NULL;
      if(SUCCEEDED(hr = pCERDA->get_ErrorRecords(&pISSCEErrors)))
      {
       ShowErrors(pISSCEErrors);
       pISSCEErrors->Release();
      }
     }
     else
     {
      MessageBox(hDlg,_T("保存成功!"),_T("提示"),MB_OK);
     }

     pCERDA->Release();
     CoUninitialize();
     //--------------//
    }
    break;
   case IDC_BTN_SET://设置
    {
     DialogBox(hInst, (LPCTSTR)IDD_DLG_SET, hDlg, (DLGPROC)SetSQL);
    }
    break;
   case IDCANCEL:
    SendMessage(hDlg,UM_STOPSCANNING,0,0L);
    break;
   }
   return TRUE;
  }
 }
 return FALSE;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值