2010-02-02 24 views
9

Có liên quan đến this question, nhưng ... có thể kích hoạt qua API khi quét thiết bị phần cứng mới không? Tôi có một thiết bị Bluetooth cổng nối tiếp mà tôi đang ghép nối tự động qua các cuộc gọi API với 32feet.net .NET Bluetooth, hoạt động khá độc đáo. Trong khi tôi có thể truy vấn các dịch vụ nối tiếp trong quá trình quét thiết bị, các cổng COM không hiển thị trong tab Cổng COM của hộp thoại Thiết bị Bluetooth.Có cuộc gọi API nào để bắt đầu quét thiết bị phần cứng

Trả lời

1

Câu trả lời của tôi có được trợ giúp sau không? How can I find out a COM port number of a bluetooth device in c#?

Sử dụng ngắn gọn System.IO.Ports.SerialPort.GetPortNames() hoặc WMI để liệt kê các cổng nối tiếp, ví dụ: Lệnh PowerShell:

C:\> Get-WmiObject -query "select DeviceID,PNPDeviceID from Win32_SerialPort" 

Điều nào cũng có thể được thực hiện bằng mã.

10

Không chắc chắn nếu điều này sẽ giúp vấn đề tổng thể của bạn nhưng điều này sẽ trả lời câu hỏi trong câu đầu tiên của bạn.

Tôi ban đầu đã làm một cái gì đó như thế này bằng cách sử dụng trình cài đặt NSIS Nullsoft một vài năm trước đây.

Nếu bạn chỉ muốn kích hoạt một phần cứng vani quét bạn có thể sử dụng đoạn mã sau (với điều kiện trong C# mỗi thẻ .net trong câu hỏi này):

Đây là lớp giao tiếp với P/Gọi chức năng

public static class Win32Api 
{ 
    public const int CM_LOCATE_DEVNODE_NORMAL = 0x00000000; 
    public const int CM_REENUMERATE_NORMAL = 0x00000000; 
    public const int CR_SUCCESS = 0x00000000; 

    [DllImport("CfgMgr32.dll", SetLastError=true)] 
    public static extern int CM_Locate_DevNodeA(ref int pdnDevInst, string pDeviceID, int ulFlags); 

    [DllImport("CfgMgr32.dll", SetLastError=true)] 
    public static extern int CM_Reenumerate_DevNode(int dnDevInst, int ulFlags); 
} 

Đây là một mẫu như thế nào để sử dụng chúng

int pdnDevInst = 0; 

     if (Win32Api.CM_Locate_DevNodeA(ref pdnDevInst, null, Win32Api.CM_LOCATE_DEVNODE_NORMAL) != Win32Api.CR_SUCCESS) 
      throw new Exception("something..."); 

     if (Win32Api.CM_Reenumerate_DevNode(pdnDevInst, Win32Api.CM_REENUMERATE_NORMAL) != Win32Api.CR_SUCCESS) 
      throw new Exception("something else..."); 

Tôi chỉ nhanh chóng dịch từ tài liệu MSDN C++ và thử nghiệm nó trong một cành để tôi biết nó hoạt động nhưng nó không phải là chất lượng sản xuất. Ngoài ra, nếu bạn quan tâm đến các mã trả về cụ thể, bạn có thể tra cứu chúng trong cfgmgr32.h.

+0

không xem xét các câu trả lời trước đó nhưng chỉ trong trường hợp bạn nghĩ rằng tôi đã sao chép ở đây phiên bản gốc tôi đã làm trong NSIS: http://forums.winamp.com/showthread.php?t=192348 –

+0

Ngoài ra, tôi đang ở trong C# và mẫu MS ở dạng VB cổ điển. –

+0

Làm việc như một sự quyến rũ. Chú ý: BẠN PHẢI CHẠY CUỘC GỌI WINAPI VỚI QUYỀN HÀNH CHÍNH! Thử nghiệm trên Windows 8 x64 – JanW

1

Chỉ cần tìm thấy this SO post cũng có thể giải quyết được sự cố của tôi hoặc những người khác tìm thấy câu hỏi này.

Các vấn đề liên quan