PDA

View Full Version : حرفه ای: کار با پورت کام



mohammadian7
یک شنبه 15 اسفند 1389, 19:58 عصر
سلام
1-من نیاز دارم توی قسمتی از برنامه، کل دستگاه های مرتبط به پورت com , usb رو نشون بدم (فقط در حد اسم دستگاه) نحوه انجام کار به چه صورت است.
2- چه جوری میشود تا دستگاهی به پورت usb وصل شد اسم آن دستگاه را در برنامه نشان داد.

mehranmsba
یک شنبه 15 اسفند 1389, 23:25 عصر
شما می توانید از یک WMI استفاده کنید. برای پیدا کردن USB ها از Win32_USBHub استفاده می کنیم.
بدین ترتیب:


using System.Management;
namespace test_usb_devices
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void bt_Load_Click(object sender, EventArgs e)
{
List<USBDeviceInfo> usb = GetUSBDevices();
foreach(USBDeviceInfo d in usb){
listBox1.Items.Add(d.ClassCode);
}
}

public struct USBDeviceInfo {

public string Caption;
public UInt16 ClassCode;
public UInt32 ConfigManagerErrorCode;
public bool ConfigManagerUserConfig;
public string CreationClassName;
public string Description;
public string DeviceID;
public string ErrorDescription;
public string Name;
public string PNPDeviceID;
public string Status;
public string SystemCreationClassName;
public string SystemName;

}
static List<USBDeviceInfo> GetUSBDevices()
{

List<USBDeviceInfo> devices = new List<USBDeviceInfo>();
USBDeviceInfo temp=new USBDeviceInfo();
var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub");

foreach (var device in searcher.Get())
{

temp.Caption= (string)device.GetPropertyValue("Caption");
temp.ConfigManagerErrorCode=(UInt32)device.GetProp ertyValue("ConfigManagerErrorCode");
temp.ConfigManagerUserConfig=(bool)device.GetPrope rtyValue("ConfigManagerUserConfig");
temp.CreationClassName=(string)device.GetPropertyV alue("CreationClassName");
temp.Description= (string)device.GetPropertyValue("Description");
temp.DeviceID= (string)device.GetPropertyValue("DeviceID");
temp.ErrorDescription=(string)device.GetPropertyVa lue("ErrorDescription");
temp.Name=(string)device.GetPropertyValue("Name");
temp.PNPDeviceID=(string)device.GetPropertyValue("PNPDeviceID");
temp.Status=(string)device.GetPropertyValue("Status");
temp.SystemCreationClassName=(string)device.GetPro pertyValue("SystemCreationClassName");
temp.SystemName = (string)device.GetPropertyValue("SystemName");


devices.Add(temp);
}

return devices;
}
}

}




کافیست تا مشخصه مورد نظر را انتخاب کنید.
شما می توانید تمامی اطلاعات این WMI را در اینجا بخوانید:

http://msdn.microsoft.com/en-us/library/aa394506(v=vs.85).aspx

شما نمی توانید پورت های سریال را آدرس دهی کنید (تا جایی که من می دونم) به این دلایل:
1- معمولا دستگاه های سریال Plug And Play نیستند و این یعنی ....
2- معمولا دستگاه های سریال دارای Config و Packet بندی خود هستند و مختص شرکت سازنده هستند.
اما یک راه وجود دارد آن هم در شرایطی پاسخگو خواهد بود:
یک درایور آماده داشته باشند و Alive بودن خود را پیوسته به سیستم عامل اعلام کنند.آن وقت می شود مشابه USB عمل کرد به طریقی دیگر. این گونه سخت افزار ها دیگر منسوخ شده اند. مگر اینکه شما یک دستگاه سخت افزاری را خودتان ساختید و بخواهید آن را Trace کنید آن وقت تمام سیستم Packet آن را می شناسید و می توانید از آن FeedBack در برنامه خود بگیرید.
در ضمن تعداد پورت های سریال سخت افزاری واقعی حداکثر 3 تاست (در رایانه های فعلی)!!!!!!!!

موفق باشید.

saeedgharedaghi
دوشنبه 16 اسفند 1389, 01:19 صبح
سلام من یه برنامه نوشتم که فایل کپی میکنه تو فلش، شاید یکم کمکت کنه