Отключить использование дисковода компакт-дисков (VB.NET) - PullRequest
0 голосов
/ 15 февраля 2010

У меня есть задача, и я не знаю, как ее решить!

По сути, я хочу отключить дисковод компакт-дисков на ПК, чтобы наши пользователи не могли их использовать.

Именно так я и хочу начать - в конечном итоге, мне бы хотелось, чтобы в системном трее был значок, позволяющий блокировать и разблокировать дисководы компакт-дисков, если вы знаете пароль.

Мне нужно с чего-то начать - кто-нибудь знает, как отключить использование CD-привода в VB.net?

Любая помощь будет оценена.

Andrew

1 Ответ

1 голос
/ 16 февраля 2010

Я нашел способ сделать это.

В основном мне нужно было перебрать все элементы в диспетчере устройств следующим образом:

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 с включенным взаимодействием с рабочим столом.

Я закончу это, когда у меня будет минутка - но все, что тебе нужно, должно быть здесь.

Надеюсь, это немного кому-нибудь поможет!

...