前些日子看到一篇博文谈到企业内部USB存储设备的管制问题,谈了很多方面,讲的也算比较全面了,并且利用批处理,效率也非常高。看后深受启发。
但文中有一点是利用系统本身附带的USB存储设备驱动的,后来在微软官网上看到有一点,如果之前就使用过USB存储设备的,这时这种方法就不太好使了。并且微软的网站上也给出了解决方案。
其中利用注册表键值这一点觉得非常实用,并且也安全,实际使用中只需要在两个值之间切换即可。但在不同的电脑上都要进到注册表中,然后再修改键值不免麻烦,于是想到了VS中的GetValue和SetValue方法,有些日子没写程序了,于是就测试了一下。
一、程序主界面及最终效果
1.主界面如下图所示。
2.执行效果。
程序运行自动检测“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor”项下的Start键值,如果为“4”,则表示当前为USB存储不可用状态,则在程序的灰色文本框中会显示“不可用状态”,如果是非“4”的键值,则会显示“可用状态”,并且同时,在可用状态和不可用状态下,Enable和Disable两个按钮只有一个可用(也就是通过这两个按钮也可以判断的)。单击相应按钮,状态改变,文本框中的文字跟着改变。
二、程序实现
1.打开VS 2008,新建一个“Windows窗体应用程序”,具体的项目名随你取。
2.在Form1中分别添加两个TextBox和Button控件,一个Label控件,如下图所示。
其中第一个TextBox控件是用来“记录”Start的键值的,其实也可以直接用一个变量来存储,一开始为了看注册表的读写效果,所以用了个文本框,可以实时看到读写注册表的情况。最后将该文本框的Visible属性改成False就可以了,在程序运行的时候就看不见了。
Label标签中就是用来输入提示性字符的,可根据自己喜好用控件都可以。第二个TextBox控件的Enabled属性设置成False,最后运行的效果就是灰色不可改状态了。再分别设置一下两个按钮的名称。
3.双击窗体空白处进入代码窗口,完成代码。
Public Class Form1
Dim UsbStorageValue As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'窗体加载时读取Start键值,并根据键值判断状态
ReadUsbStateValue()
CheckState()
End Sub
Private Sub btnUsbStorageDisable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUsbStorageDisable.Click
'单击Disable按钮时,将Start的值设置为4,并重新获取Start值,判断状态
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", 4)
ReadUsbStateValue()
End Sub
Private Sub btnUsbStorageEnable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUsbStorageEnable.Click
'单击Enable按钮,将Start的值设置为3(系统默认值,其他值未做测试),重获Start值,判断状态
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", 3)
ReadUsbStateValue()
End Sub
Private Sub txtUsbStorValue_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtUsbStorValue.TextChanged
'存放键值的文本框中的数据发生变化时,重新判断状态
CheckState()
End Sub
Private Sub ReadUsbStateValue()
'将Start的值传到文本框控件
UsbStorageValue = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", Nothing)
txtUsbStorValue.Text = UsbStorageValue
End Sub
Private Sub CheckState()
'根据Start键值是否为4来决定文本框的文本以及两个按钮的状态
If txtUsbStorValue.Text = 4 Then
btnUsbStorageEnable.Enabled = True
btnUsbStorageDisable.Enabled = False
txtUsbStorageState.Text = "不可用状态"
Else
btnUsbStorageEnable.Enabled = False
btnUsbStorageDisable.Enabled = True
txtUsbStorageState.Text = "可用状态"
End If
End Sub
End Class
Dim UsbStorageValue As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'窗体加载时读取Start键值,并根据键值判断状态
ReadUsbStateValue()
CheckState()
End Sub
Private Sub btnUsbStorageDisable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUsbStorageDisable.Click
'单击Disable按钮时,将Start的值设置为4,并重新获取Start值,判断状态
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", 4)
ReadUsbStateValue()
End Sub
Private Sub btnUsbStorageEnable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUsbStorageEnable.Click
'单击Enable按钮,将Start的值设置为3(系统默认值,其他值未做测试),重获Start值,判断状态
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", 3)
ReadUsbStateValue()
End Sub
Private Sub txtUsbStorValue_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtUsbStorValue.TextChanged
'存放键值的文本框中的数据发生变化时,重新判断状态
CheckState()
End Sub
Private Sub ReadUsbStateValue()
'将Start的值传到文本框控件
UsbStorageValue = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", Nothing)
txtUsbStorValue.Text = UsbStorageValue
End Sub
Private Sub CheckState()
'根据Start键值是否为4来决定文本框的文本以及两个按钮的状态
If txtUsbStorValue.Text = 4 Then
btnUsbStorageEnable.Enabled = True
btnUsbStorageDisable.Enabled = False
txtUsbStorageState.Text = "不可用状态"
Else
btnUsbStorageEnable.Enabled = False
btnUsbStorageDisable.Enabled = True
txtUsbStorageState.Text = "可用状态"
End If
End Sub
End Class
我本身就是VB小菜鸟,代码也很简单,不再多说,后面附上完成工程代码,有兴趣的可以自己改造一下。
本程序在VS2008+Windows Server 2008 R2环境下测试通过。
转载于:https://blog.51cto.com/windyli/318051