Re: штрих-код
От: Alex Dav Россия  
Дата: 25.04.07 12:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Народ подскажите как работать со сканером штрих кода!? Точнее как под него программировать! Короче, проблема в том что я не имею представления как считывать штрих код в моем ПО.


Если интересно, то разбирайся :

UINT ThreadFunc (LPVOID pParam)
{    
    HWND hWnd = (HWND) pParam;
    //**************** Программа  инициализации порта COM1
    DCB dcb;
    HANDLE m_hComm2;
    m_hComm2 = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE,
                 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
    if (m_hComm2 == INVALID_HANDLE_VALUE) 
    {
        AfxMessageBox("Unable to open COM port!", MB_ICONSTOP);
       
    }
    else
    {
      
    GetCommState(m_hComm2,&dcb);
    SetupComm (m_hComm2, 256, 256);       // allocate transmit & receive buffer
    dcb.BaudRate = CBR_9600;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    SetCommState (m_hComm2, &dcb);
    SetCommMask(m_hComm2, EV_BREAK | EV_RXCHAR);
    //******************* конец инициализации
        
    BYTE        szBuffer[256];
    DWORD        dwEvtMask;
    DWORD        dwError;
    DWORD        dwBytes;
    COMSTAT        csStat;
    OVERLAPPED    o;
    o.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    int            nCount;
    char        strTemp[128];
    for(nCount=0;nCount<128;nCount++)strTemp[nCount]=0;
    nCount=0;
    for (; ;)
    {
        
        ResetEvent(o.hEvent);

    if (!WaitCommEvent(m_hComm2, &dwEvtMask, &o))
    {
        //if(kbhit())break;
        Sleep(100);
    }

        if (dwEvtMask & EV_BREAK)break;
        else if (dwEvtMask & EV_RXCHAR)
        {
            ClearCommError(m_hComm2,&dwError, &csStat);
            ResetEvent(o.hEvent);
            if (!ReadFile(m_hComm2, szBuffer, csStat.cbInQue, &dwBytes, &o))
            {
            
            ::SetDlgItemText((HWND) pParam, IDC_EDIT1, "не считал");
            Sleep(50);
            //if(kbhit())break;
            }

            for (UINT i = 0; i < csStat.cbInQue; i++)
            {
            if(szBuffer[i]==13)
            {
                    ::Beep(123,125);
                    EnterCriticalSection(&m_cs);
                    ::SetDlgItemText((HWND) pParam, IDC_EDIT1, (char*)strTemp);
                    LeaveCriticalSection(&m_cs);
                    for(nCount=0;nCount<128;nCount++)strTemp[nCount]=0;
                    nCount=0;
                    }
            else
                {
                    strTemp[nCount]=szBuffer[i];
                    nCount++;
                }
            }
            //if (nCount > 64)
            //{
                        for(nCount=0;nCount<128;nCount++)strTemp[nCount]=0;
                        nCount=0;
            //}
                        
        }                

    }
    }
    return 1;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.