2016-09-21 3 views
0

私の学校プロジェクトの申請を現在行っています。 USBドライブを USBポートに挿入したときにアプリケーションを作成するにはどうすればログインフォームが自動的に表示され、 ログインが最初に行われ、成功すればユーザーはUSBドライブを使用できます(USBポートが有効になります)。 イム使用してWindows 7、vb.net 2010、私のアプリケーション名がPutLockで、このアプリ がドライブCのおかげ^^私は、インターネット上でこの解決策を見つけたUSBドライブが接続されているときにアプリケーションを自動的に実行するにはどうすればいいですか?

+1

あなたは、USBを接続し、そこから行くされているかどうかを検出するために、コードを使用することができます:[リンク]( http://stackoverflow.com/questions/23225170/failed-to-detect-usb) –

+1

この記事は面白い読んだものですが、いくつかの助けになるかもしれません:[link](http://www.samlogic.net/articles /autorun-usb-flash-drive.htm) –

+0

ありがとうございます! – asa

答えて

0

にインストールされます、このコードは、MINEではありません! しかしいまいましい、それは本当によく働く:

Imports System.Runtime.InteropServices 

パブリック・クラスの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 

エンドクラス

+0

明らかにここでは、プログラムは、USBドライブに挿入された既存の "テスト"ファイルをチェックします。必要なコードを変更する必要があります。 – Rovo93

+0

非常に心強いコードです。もちろん私はそれを変更します^^ – asa

関連する問題