Подниму тему.
Понимаю, конечно, что это скорее всего невозможно, но спрошу на всякий случай. Если посмотреть на различные примеры функций обработки КОМ-портов для сканеров ШК, то видим, что имя порта, к которому подключено устройство указывается строкой. Так как мой сканер использует первый следующий свободный порт (что на каждом компьютере может быть разным), получется потребуется производить настройку порта для каждого пользователя/компьютера индивидуально.
Вопрос: существуют ли способы определить к какому порту подключено моё устройство-сканер на текущей машине? Или давать каждому пользователю возможности настройки КОМ-порта для подключения сканера (скажем, прямо на форме) вручную и запоминать их через SysLastValue (к примеру)?
Спасибо!
Приведу свой код с использованием .NET в X++ для обработки получения данных COM-порта. Может пригодится.
X++:
str message;
boolean keepTrying;
InteropPermission lclsInteropPerm;
System.IO.Ports.SerialPort SerialPort;
;
lclsInteropPerm = new InteropPermission(InteropKind::ClrInterop);
lclsInteropPerm.assert();
try
{
SerialPort = new System.IO.Ports.SerialPort('COM3');
// Parameters
SerialPort.set_BaudRate(9600);
SerialPort.set_Parity(System.IO.Ports.Parity::None);
SerialPort.set_StopBits(System.IO.Ports.StopBits::One);
SerialPort.set_DataBits(8);
SerialPort.set_Handshake(System.IO.Ports.Handshake::None);
// Timeout
SerialPort.set_ReadTimeout(500);
SerialPort.Open();
keepTrying = true;
while (keepTrying)
{
message = SerialPort.ReadExisting();
if (message)
{
keepTrying = false;
info(message);
}
}
}
catch (Exception::Internal)
{
error(AIFUtil::getClrErrorMessage());
}
catch (Exception::CLRError)
{
error(AIFUtil::getClrErrorMessage());
}
if (!CLRINterop::isNull(SerialPort))
{
SerialPort.Close();
}
CodeAccessPermission::revertAssert();