Получить имя устройства, подключенного к последовательному порту
Я ищу, как получить имя устройства материала, подключенного к последовательному порту.
У меня есть два разных типа материала, которые могут соединиться с ним.
Первый: принтер (только получает данные и ничего не отправляет обратно) Второй: баланс (только отправляет данные и ничего не получает)
Как я могу различить эти два типа материала?
Благодарю.
5 ответов
Не существует универсального способа идентификации устройств с последовательным портом (UART RS232).
Если на устройствах нет специальных команд, которые вы можете отправить на устройство, и чтобы оно отвечало идентифицирующей информацией, вы ничего не можете сделать.
Обычно приложение, использующее последовательный порт, будет иметь стандартный экран настроек, который пользователь будет использовать для настройки последовательного порта, к которому подключено устройство, настройки порта для таких вещей, как скорость передачи, биты четности, стоповые биты и биты данных. Если несколько устройств могут быть подключены к одному и тому же порту, оператор будет нести ответственность за выбор правильной конфигурации для целевого устройства перед установкой связи с устройством.
Это преимущество новых технологий, таких как USB и т. Д., Где идентификация устройства встроена в стандарт.
Попробуй это:
ManagementObjectCollection ManObjReturn;
ManagementObjectSearcher ManObjSearch;
ManObjSearch = new ManagementObjectSearcher("Select * from Win32_SerialPort");
ManObjReturn = ManObjSearch.Get();
foreach (ManagementObject ManObj in ManObjReturn)
{
//int s = ManObj.Properties.Count;
//foreach (PropertyData d in ManObj.Properties)
//{
// MessageBox.Show(d.Name);
//}
MessageBox.Show(ManObj["DeviceID"].ToString());
MessageBox.Show(ManObj["PNPDeviceID"].ToString());
MessageBox.Show(ManObj["Name"].ToString());
MessageBox.Show(ManObj["Caption"].ToString());
MessageBox.Show(ManObj["Description"].ToString());
MessageBox.Show(ManObj["ProviderType"].ToString());
MessageBox.Show(ManObj["Status"].ToString());
}
static void Main(string[] args)
{
ManagementObjectCollection ManObjReturn;
ManagementObjectSearcher ManObjSearch;
ManObjSearch = new ManagementObjectSearcher("Select * from **Win32_ParallelPort**");
ManObjReturn = ManObjSearch.Get();
foreach (ManagementObject ManObj in ManObjReturn)
{
//int s = ManObj.Properties.Count;
//foreach (PropertyData d in ManObj.Properties)
//{
// MessageBox.Show(d.Name);
//}
Console.WriteLine(ManObj["DeviceID"].ToString());
Console.WriteLine(ManObj["PNPDeviceID"].ToString());
Console.WriteLine(ManObj["Name"].ToString());
Console.WriteLine(ManObj["Caption"].ToString());
Console.WriteLine(ManObj["Description"].ToString());
Console.WriteLine(ManObj["ProviderType"].ToString());
Console.WriteLine(ManObj["Status"].ToString());
}
}
http://www.seeques.com/20766280/the-port-name-is-illegal-or-couldnt-be-connected-to-the-device.html
имя порта недопустимо, как это сообщение об ошибке...fio.!
Class1 UD = new Class1();
{
string strUserAgent = Request.UserAgent.ToLower();
if (strUserAgent != null)
{
string Browser = Request.Browser.Browser;
string a = Request.Browser.MobileDeviceManufacturer;
string b = Request.Browser.MobileDeviceModel;
string c = Request.Browser.Platform;
string d = Request.Browser.Type;
string e = Request.Browser.Version;
UD.Browser = Browser;
UD.MobileDeviceModel = b;
UD.MobileDeviceManufacturer = a;
UD.Platform2 = c;
UD.Type = d;
UD.Version2 = e;
if (Request.Browser.IsMobileDevice == true || strUserAgent.Contains("iphone") ||
strUserAgent.Contains("blackberry") || strUserAgent.Contains("mobile") ||
strUserAgent.Contains("windows ce") || strUserAgent.Contains("opera mini") ||
strUserAgent.Contains("palm"))
{
UD.deviceType = "Request from Mobile Device";
}
else
{
UD.deviceType = "Request from Computer";
}
}
}
Это не работает на Win11, а иногда и на Win10. Попробуйте вместо этого использовать devcon.exe с аргументом hwids =ports.
private void RetrieveDeviceInfo()
{
Process proc1 = null;
try
{
proc1 = new Process();
proc1.StartInfo = new ProcessStartInfo();
proc1.StartInfo.FileName = this.DevConExeFile;
proc1.StartInfo.Arguments = "hwids =ports";
//proc1.StartInfo.RedirectStandardInput = true;
proc1.StartInfo.RedirectStandardOutput = true;
proc1.StartInfo.UseShellExecute = false;
proc1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc1.StartInfo.CreateNoWindow = true;
proc1.Start();
proc1.WaitForExit(1000);
string AllOutput = proc1.StandardOutput.ReadToEnd();
this.LastOutput = AllOutput;
}
catch(Exception em1)
{
throw em1;
}
finally
{
try
{
proc1.Kill();
}
catch
{
}
}
}