Tonny_Bennet
04-09-2014, 10:16
Здравствуйте.
Есть терминалы сбора данных CipherLab CP30 (http://www.scancode.ru/catalog/item/4/494/), подключаются по wi-fi, запускается RDP сеанс, внутри которого работает обработка 1С. Всё работает.
Я тут решил в целях самообразования, возможно оптимизации работы (если получится) написать своё ПО, которое будет выполнять те же операции, что и обработка в 1С (но без RDP, лицензий на 1С и лицензий на RDP). Мой уровень познания .NET и C# основан на университете и никаких сложных проектов я не создавал.
Нашёл библиотеки с SDK_API для этого терминала; нашёл инструкцию (http://www.scancode.ru/files/item/13/634/) с описанием классов и их применения.
Сделал проект, закодил пару кнопок, закинул в терминал - работает. Инициализировал ридер штрихкодов, получилось при помощи обработки таймера считать данные (понимаю что это костыль, просто пробовал).
На одной из первых страниц инструкции описан классс:
public class MsgWindow : MessageWindow
{
int bl = 0;
string tmp;
protected override void WndProc(ref Message msg)
{
if (msg.Msg == decodeMsg)
{
switch (msg.WParam.ToInt32())
{
case 7: //Barcode
bl = Reader.ReaderEngineAPI.GetDecodeData(ref tmp, 5000);
bl = Reader.ReaderEngineAPI.GetOutputRecord(DC_READER_BC, ref tmp);
break;
default:
break;
}
base.WndProc(ref msg);
}
}
}
Как я понял из описания, это класс, наследуемый от MessageWindow, и в нём происходит перехват сообщения DC_READER_BC, которое является идентификатором считанного штрих-кода. Т.е. при считывании штрих кода создаётся сообщение, а этот класс перехватывает это сообщение.
Этот код не работает, т.к. нет некоторых параметров (да и не понятно откуда им взяться). В конце инструкции есть глава Sample Code, в которой этот же класс немного расширен, и приведён к более-менее рабочему виду, но в нём снова встречаются пункты, в которых я не могу разобраться:
First, register the WM_DECODEDATA message.
For example,
decodeMsg = Win32API.RegisterWindowMessage("WM_DECODEDATA" ) ;
where decodeMsg is the message identifier to be broadcasted when a scan engine decodes data.
тут предлагается зарегистрировать сообщение с идентификатором WM_DECODEDATA. Но я не могу найти и понять что нужно подключить в using чтобы стала доступно Win32API?
Немного ниже есть такой кусочек кода:
public class Win32API {
[DllImport("coredll.dll", SetLastError = true)]
public static extern uint RegisterWindowMessage(string lpString);
}
Вроде бы вот он класс Win32API, но откуда разработчики взяли этот загадочный coredll.dll?
Пожалуйста помогите разобраться.
Есть терминалы сбора данных CipherLab CP30 (http://www.scancode.ru/catalog/item/4/494/), подключаются по wi-fi, запускается RDP сеанс, внутри которого работает обработка 1С. Всё работает.
Я тут решил в целях самообразования, возможно оптимизации работы (если получится) написать своё ПО, которое будет выполнять те же операции, что и обработка в 1С (но без RDP, лицензий на 1С и лицензий на RDP). Мой уровень познания .NET и C# основан на университете и никаких сложных проектов я не создавал.
Нашёл библиотеки с SDK_API для этого терминала; нашёл инструкцию (http://www.scancode.ru/files/item/13/634/) с описанием классов и их применения.
Сделал проект, закодил пару кнопок, закинул в терминал - работает. Инициализировал ридер штрихкодов, получилось при помощи обработки таймера считать данные (понимаю что это костыль, просто пробовал).
На одной из первых страниц инструкции описан классс:
public class MsgWindow : MessageWindow
{
int bl = 0;
string tmp;
protected override void WndProc(ref Message msg)
{
if (msg.Msg == decodeMsg)
{
switch (msg.WParam.ToInt32())
{
case 7: //Barcode
bl = Reader.ReaderEngineAPI.GetDecodeData(ref tmp, 5000);
bl = Reader.ReaderEngineAPI.GetOutputRecord(DC_READER_BC, ref tmp);
break;
default:
break;
}
base.WndProc(ref msg);
}
}
}
Как я понял из описания, это класс, наследуемый от MessageWindow, и в нём происходит перехват сообщения DC_READER_BC, которое является идентификатором считанного штрих-кода. Т.е. при считывании штрих кода создаётся сообщение, а этот класс перехватывает это сообщение.
Этот код не работает, т.к. нет некоторых параметров (да и не понятно откуда им взяться). В конце инструкции есть глава Sample Code, в которой этот же класс немного расширен, и приведён к более-менее рабочему виду, но в нём снова встречаются пункты, в которых я не могу разобраться:
First, register the WM_DECODEDATA message.
For example,
decodeMsg = Win32API.RegisterWindowMessage("WM_DECODEDATA" ) ;
where decodeMsg is the message identifier to be broadcasted when a scan engine decodes data.
тут предлагается зарегистрировать сообщение с идентификатором WM_DECODEDATA. Но я не могу найти и понять что нужно подключить в using чтобы стала доступно Win32API?
Немного ниже есть такой кусочек кода:
public class Win32API {
[DllImport("coredll.dll", SetLastError = true)]
public static extern uint RegisterWindowMessage(string lpString);
}
Вроде бы вот он класс Win32API, но откуда разработчики взяли этот загадочный coredll.dll?
Пожалуйста помогите разобраться.