插入USB驱动器时如何让我的应用程序自动运行?

时间:2016-09-21 07:39:32

标签: vb.net visual-studio-2010 usb-drive

我正在为我的学校项目申请。 当用户将USB驱动器插入时,如何制作应用程序 usb端口,登录表单会自动弹出询问用户 首先登录,如果成功,用户可以使用USB驱动器(将启用USB端口)。 我使用Windows 7,vb.net 2010,我的应用程序名称是PutLock和这个应用程序 将安装在驱动器C中。谢谢^^

1 个答案:

答案 0 :(得分:0)

我在互联网上找到了这个解决方案,这个代码不是我的! 但该死的,它运作得非常好:

Imports System.Runtime.InteropServices

Public Class Form1

Private Const WM_DEVICECHANGE As Integer = &H219
Private Const DBT_DEVICEARRIVAL As Integer = &H8000
Private Const DBT_DEVTYP_VOLUME As Integer = &H2

'Device information structure
Public Structure DEV_BROADCAST_HDR
    Public dbch_size As Int32
    Public dbch_devicetype As Int32
    Public dbch_reserved As Int32
End Structure

'Volume information Structure
Private Structure DEV_BROADCAST_VOLUME
    Public dbcv_size As Int32
    Public dbcv_devicetype As Int32
    Public dbcv_reserved As Int32
    Public dbcv_unitmask As Int32
    Public dbcv_flags As Int16
End Structure

'Function that gets the drive letter from the unit mask
Private Function GetDriveLetterFromMask(ByRef Unit As Int32) As Char
    For i As Integer = 0 To 25
        If Unit = (2 ^ i) Then
            Return Chr(Asc("A") + i)
        End If
    Next
End Function

'Override message processing to check for the DEVICECHANGE message
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    If m.Msg = WM_DEVICECHANGE Then
        If CInt(m.WParam) = DBT_DEVICEARRIVAL Then
            Dim DeviceInfo As DEV_BROADCAST_HDR
            DeviceInfo = DirectCast(Marshal.PtrToStructure(m.LParam, GetType(DEV_BROADCAST_HDR)), DEV_BROADCAST_HDR)
            If DeviceInfo.dbch_devicetype = DBT_DEVTYP_VOLUME Then
                Dim Volume As DEV_BROADCAST_VOLUME
                Volume = DirectCast(Marshal.PtrToStructure(m.LParam, GetType(DEV_BROADCAST_VOLUME)), DEV_BROADCAST_VOLUME)
                Dim DriveLetter As String = (GetDriveLetterFromMask(Volume.dbcv_unitmask) & ":\")
                If IO.File.Exists(IO.Path.Combine(DriveLetter, "test.txt")) Then
                    '<<<< The test file has been found >>>>
                    MessageBox.Show("Found test file")
                Else
                    '<<<< Test file has not been found >>>>
                    MessageBox.Show("Could not find test file")
                End If
            End If
        End If
    End If
    'Process all other messages as normal
    MyBase.WndProc(m)
End Sub

结束班