Я нашел способ сделать это.
В основном мне нужно было перебрать все элементы в диспетчере устройств следующим образом:
search = New System.Management.ManagementObjectSearcher("SELECT * From Win32_PnPEntity")
For Each info In search.Get()
' Go through each device detected.
Next
Затем я взял разделы DeviceID и ClassGuid.
Если Guid соответствует {4D36E965-E325-11CE-BFC1-08002BE10318}, который является GUID для проигрывателя CD / DVD, я сказал ему отключить / включить устройство в зависимости от того, что пользователь хотел сделать.
Чтобы включить или отключить их, я обнаружил, что эта удобная программа готова к работе отсюда .
Затем я просто отредактировал Form1.vb так:
Imports System.Management
Публичный класс Form1
Private Sub btnEnable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnable.Click
getCdDrives("Enable")
End Sub
Private Sub btnDisable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisable.Click
getCdDrives("Diable")
End Sub
Public Function getCdDrives(ByVal EnableOrDisable As String) As Boolean
If InputBox("password") = "password" Then
Try
Dim info As System.Management.ManagementObject
Dim search As System.Management.ManagementObjectSearcher
Dim deviceGuid As String
Dim deviceType As String
Dim cameraIsSeenByWindows As Boolean = False
Dim showDebugPrompts As Boolean = False
Dim actualGuid As Guid
search = New System.Management.ManagementObjectSearcher("SELECT * From Win32_PnPEntity")
For Each info In search.Get()
' Go through each device detected.
deviceType = CType(info("DeviceID"), String)
deviceGuid = CType(info("ClassGuid"), String)
If deviceGuid = "{4D36E965-E325-11CE-BFC1-08002BE10318}" Then
actualGuid = New Guid(deviceGuid)
If EnableOrDisable = "Enable" Then
DeviceHelper.SetDeviceEnabled(actualGuid, deviceType, True)
Else
DeviceHelper.SetDeviceEnabled(actualGuid, deviceType, False)
End If
End If
Next
If EnableOrDisable = "Enable" Then
btnDisable.Enabled = True
btnEnable.Enabled = False
Else
btnDisable.Enabled = False
btnEnable.Enabled = True
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
Else
MsgBox("Oooh Va Vu!!")
End If
End Function
Конечный класс
После этого в диспетчере устройств циклически переключаются приводы CD / DVD и отключаются / включаются.
Мне еще предстоит привести в порядок код - и мне нужно запустить скрипт как поток, потому что он зависает в тот момент, когда он делает свое дело.
Я также намереваюсь заставить программу выяснить, в каком состоянии дисководы компакт-дисков, используя событие таймера, и затем отчитаться соответствующим образом ... Затем мне нужно заставить его работать в системном трее без формы и, наконец, заставить его работать как LSA с включенным взаимодействием с рабочим столом.
Я закончу это, когда у меня будет минутка - но все, что тебе нужно, должно быть здесь.
Надеюсь, это немного кому-нибудь поможет!