在vb中打开项目时检测Usb

时间:2015-02-17 13:44:12

标签: vb.net

我在代码vb中遇到问题...我已经向Usb发送了一个文件密码。当你启动程序并插入usb它运行正常!但是如果我在打开程序之前放置usb,那么你必须再次起飞阅读!打开程序时如何自动阅读;代码如下:

PS:另一个问题:我可以创建一个可以在所有表​​单上运行的文件吗?我把一个命令放在带有文件的表单中;像php

Imports System.Runtime.InteropServices
Imports System.IO
Public Class projectname

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

    Public Structure DEV_BROADCAST_HDR
        Public dbch_size As Int32
        Public dbch_devicetype As Int32
        Public dbch_reserved As Int32
    End 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

    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

    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, "pass.txt")) Then

                        Using br As New BinaryReader(File.Open(IO.Path.Combine(DriveLetter, "pass.txt"), FileMode.Open))
                            Try
                                If br.ReadString = "4553824" Then
                                    Timer_Loading.Start()
                                Else
                                    MessageBox.Show("Error 1")
                                End If
                            Catch ex As EndOfStreamException
                            End Try
                        End Using

                    Else
                        MessageBox.Show("Error 2")
                    End If
                End If
            End If
        End If
        MyBase.WndProc(m)
    End Sub

    Private Sub Timer_Loading_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_Loading.Tick
        ProgressBar1.Increment(4)
        If ProgressBar1.Value = 100 Then
            Dim projectname As New projectname 
            form2.Show()
            Me.Close()
        End If
    End Sub
End Class
`

0 个答案:

没有答案