Воскресенье, 22 Декабря 2024, 12:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
USB в vb.net
zacДата: Понедельник, 14 Мая 2012, 20:35 | Сообщение # 1
участник
Сейчас нет на сайте
Здравствуйте,форумчане!
happy
Я хотел бы узнать,что за функция(алгоритм) мог узнать информацию о подключенном USB устройстве.(например имя.)

Я был бы рад увидеть урок или даже пример показывающий это. dry
K0DAK47Дата: Понедельник, 14 Мая 2012, 21:05 | Сообщение # 2
Cat Development
Сейчас нет на сайте
Code
Imports System.Management

  Public Class Form1
  Private WithEvents m_MediaConnectWatcher As ManagementEventWatcher
  Public USBDriveName As String
  Public USBDriveLetter As String

  Public Sub StartDetection()
  ' __InstanceOperationEvent will trap both Creation and Deletion of class instances
  Dim query2 As New WqlEventQuery("SELECT * FROM __InstanceOperationEvent WITHIN 1 " _
  & "WHERE TargetInstance ISA 'Win32_DiskDrive'")

  m_MediaConnectWatcher = New ManagementEventWatcher
  m_MediaConnectWatcher.Query = query2
  m_MediaConnectWatcher.Start()
  End Sub

  Private Sub Arrived(ByVal sender As Object, ByVal e As System.Management.EventArrivedEventArgs) Handles m_MediaConnectWatcher.EventArrived

  Dim mbo, obj As ManagementBaseObject

  ' the first thing we have to do is figure out if this is a creation or deletion event
  mbo = CType(e.NewEvent, ManagementBaseObject)
  ' next we need a copy of the instance that was either created or deleted
  obj = CType(mbo("TargetInstance"), ManagementBaseObject)

  Select Case mbo.ClassPath.ClassName
  Case "__InstanceCreationEvent"
  If obj("InterfaceType") = "USB" Then
  MsgBox(obj("Caption") & " (Drive letter " & GetDriveLetterFromDisk(obj("Name")) & ") has been plugged in")
  Else
  MsgBox(obj("InterfaceType"))
  End If
  Case "__InstanceDeletionEvent"
  If obj("InterfaceType") = "USB" Then
  MsgBox(obj("Caption") & " has been unplugged")
  If obj("Caption") = USBDriveName Then
  USBDriveLetter = ""
  USBDriveName = ""
  End If
  Else
  MsgBox(obj("InterfaceType"))
  End If
  Case Else
  MsgBox("nope: " & obj("Caption"))
  End Select
  End Sub

  Private Function GetDriveLetterFromDisk(ByVal Name As String) As String
  Dim oq_part, oq_disk As ObjectQuery
  Dim mos_part, mos_disk As ManagementObjectSearcher
  Dim obj_part, obj_disk As ManagementObject
  Dim ans As String = ""

  ' WMI queries use the "\" as an escape charcter
  Name = Replace(Name, "\", "\\")

  ' First we map the Win32_DiskDrive instance with the association called
  ' Win32_DiskDriveToDiskPartition. Then we map the Win23_DiskPartion
  ' instance with the assocation called Win32_LogicalDiskToPartition

  oq_part = New ObjectQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & Name & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
  mos_part = New ManagementObjectSearcher(oq_part)
  For Each obj_part In mos_part.Get()

  oq_disk = New ObjectQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & obj_part("DeviceID") & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
  mos_disk = New ManagementObjectSearcher(oq_disk)
  For Each obj_disk In mos_disk.Get()
  ans &= obj_disk("Name") & ","
  Next
  Next

  Return ans.Trim(","c)
  End Function

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  StartDetection()
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  m_MediaConnectWatcher.Stop()
  Application.Exit()
  End Sub
  End Class


Ты такой писал для детекта USB? Код довольно кривой и запустится лишь через Mass Storage, но работает. Вроде как для показа инфо нужен плагин WMI. Попробуй посмотреть WM_DEVICECHANGE, DBT_DEVICEARRIVAL и RegisterDeviceNotification.


.xm
Шаблон для разработчиков
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг