Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Siirrettävän levyn tunnistus VB

viljami [18.06.2007 22:30:47]

#

Eli, Visualilla... Miten onnistuu, ja onnistuuko siirrettävän levyn tunnistaminen. Ideana rakentaa ohjelma joka tunnistaa siirrettävän levyn tulleen paikoilleen ja hakee sieltä playlistan, jonka perusteella soittelee musiikkia?

Eli lähinnä se milloin USB tikku on pukattu kiinni, ja minkä levytunnuksen se on saanut..

setä [18.06.2007 23:08:20]

#

Voi olla fiksumpikin tapa mutta ensinnä tuli mieleen kokeilla tällaista:

Dim lc As Integer

Private Sub Form_Load()
  lc = Drive1.ListCount
End Sub

Private Sub Timer1_Timer()
  Drive1.Refresh
  If Drive1.ListCount > lc Then
    lblDrv = Drive1.List(Drive1.ListCount - 1)
  Else
    lblDrv = ""
  End If
End Sub

Timerin Intervallin voi valita esim. sekunniksi eli = 1000
Kun USB-tikun tökkää liittimeen sen tunnus ilmaantuu labeliin lblDrv. Ja häviää siitä, kun tikun nyppää pois.

viljami [19.06.2007 00:05:09]

#

Ainiin, ei tullu mieleenkään käyttää Drive kontrollia. Suuri Kiitos! Juuri selainen pohja, josta tuota asiaa voisi ruveta jatkojalostamaan.

JoreSoft [19.06.2007 23:19:34]

#

Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Tuollanen löytyi.. saattaisi olla hyötyä ;)

http://allapi.mentalis.org/apilist/GetDriveType.shtml

Tein tuollaisen ohjelman pätkän, joka tunnistaa liitetyn USB-tikun ja reagoi myös sen poistamiseen.

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Dim Drives As Integer, D2 As Integer

Private Sub Form_Load()
Dim DR%
    Me.AutoRedraw = True
    'Get information about the C:\
    For I = Asc("C") To Asc("Z")
    Me.Print "Drive "; Chr$(I); " ";
    Select Case GetDriveType(Chr$(I) & ":\")
        Case 2
            Me.Print "Removable"
        Case 3
            Me.Print "Drive Fixed"
        Case Is = 4
            Me.Print "Remote"
        Case Is = 5
            Me.Print "Cd-Rom"
        Case Is = 6
            Me.Print "Ram disk"
        Case Else
            Me.Print "Unrecognized"
            Exit For
    End Select
                    '(oletetaan, että levyt järjestyksessä)
        Drives = I  'Talletetaan tunnistettujen asemien viimeisin
    Next I
    Timer1.Interval = 2000  '2s muuta esim 10000
    Timer1.Enabled = True

End Sub

Private Sub Form_Unload(Cancel As Integer)
    End
End Sub

Private Sub Timer1_Timer()
Dim I%, D%, D2%
    For I = Drives To Drives + 2
        D = GetDriveType(Chr$(I) & ":\")
        If (D >= 2 And D <= 6) Then
            If I = Drives + 1 Then
                MsgBox "Uusi asema " & Chr$(I) & " Löytyi!"
                Drives = I 'Lisätään etsittävien määrää
                If D = 2 Then MsgBox "Asema on Ulkoinen tai USB"
            End If
        ElseIf I = Drives Then
                MsgBox "Asema " & Chr$(I) & " Poistui!"
                Drives = I - 1
        End If
    Next I
End Sub

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta