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

:
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;
}