vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Devicename in Laufwerksbuchstaben 
Autor: TheCrowOfSorrow
Datum: 25.06.07 15:16

Hi - ich schon wieder ;)
Wäre nett, wenn mir diesmal jemand helfe könnte.
Ich habe eine DLL, die mir ein Laufwerk als devicename ("\device\CDRom0") zurückgibt. Wie kriege ich denn nun raus, welcher Laufwerksbuchstabe dem zugeordnet ist!?
Ich habe schon versucht, mit "QueryDosDevice" zu arbeiten, aber da kriege ich nichts raus (wohl eher, weil ich das nicht begreife...!)
Für eine idee wäre ich echt dankbar!

Das Meiste wird deshalb nicht getan, weil es nicht unternommen wird.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: LarsThorwald
Datum: 26.06.07 11:57

Hm, wird wirklich nur \device\CDRom0 angegeben? WMI könnte hier helfen. Schaue dort mal unter "Win32_CDROMDrive"

Gruß
Lars

Visual Basic Express 2010, C# Express 2010
Intel? i7 Core 920@2.63 Ghz, 6 GByte DDR3, 1024 MB ATI? Radeon? 5870, Windows 7 Prof. 64 Bit
Gibson SG 61' Reissue ; Ibanez Prestige RG 2550 E, Marshall Valvestate VS100 + Modell Vs412 (4 x 12''), Cubase Studio

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: Maywood
Datum: 26.06.07 11:58

>> Ich habe schon versucht, mit "QueryDosDevice" zu arbeiten, aber da kriege ich nichts raus (wohl eher, weil ich das nicht begreife...!)

Na dann versuchs mal damit:
    Private Declare Function QueryDosDevice Lib "kernel32.dll" Alias _
      "QueryDosDeviceA" ( _
        ByVal lpDeviceName As String, _
        ByVal lpTargetPath As System.Text.StringBuilder, _
        ByVal ucchMax As Int32) As Int32
 
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button5.Click
        Dim out As New System.Text.StringBuilder(" ", 100)
        For Each di As System.IO.DriveInfo In System.IO.DriveInfo.GetDrives()
            If di.DriveType = IO.DriveType.CDRom Then
                QueryDosDevice(di.Name.Replace("\", ""), out, out.Capacity)
                Debug.WriteLine(out.ToString() + " mount on " + di.Name)
            End If
        Next
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: Maywood
Datum: 26.06.07 12:09

Leider nein.

Das dachte ich zuerst auch. Die WMI Klasse "Win32_CDROMDrive" gibt nicht den DOS-Device Namen zurück, sondern nur die DeviceId etc. Hier mein verwendeter Code:
        Dim wmi As System.Management.ManagementObjectSearcher = _
                New System.Management.ManagementObjectSearcher("SELECT * FROM" & _
                "Win32_CDROMDrive")
        Dim value As Object = Nothing
        For Each moo As System.Management.ManagementObject In wmi.Get
            For Each pd As System.Management.PropertyData In moo.Properties()
                value = moo.Item(pd.Name)
                If Not value Is Nothing AndAlso _
                    (value.ToString().ToUpper.IndexOf("DEVICE") > -1 OrElse _
                    pd.Name.ToUpper.IndexOf("DEVICE") > -1) Then
                    Debug.WriteLine(pd.Name + ": " + value.ToString())
                End If
            Next
        Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: TheCrowOfSorrow
Datum: 26.06.07 12:28

Das gibt´s doch gar net!
Wenn das obere Beispiel funktioniert, dann mit dem Framework 2.0! Ich setze hier aber 1.1 ein... *grummel*
Aber trotzdem ganz herzlichen Dank für die Antwort!

Das Meiste wird deshalb nicht getan, weil es nicht unternommen wird.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: Maywood
Datum: 26.06.07 12:42

Das Codebsp. sollte schon funktionieren. Im FW 1.x gibt es nur keine System.IO.DriveInfo.GetDrives() Methode. Dann versuchs eben erstmal mal mit D:, E:, F: etc.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: TheCrowOfSorrow
Datum: 26.06.07 13:07

Naja, zumindest kriege ich was zurück. Aber ich kann da nix mit anfangen.
Also die Abfrage sieht so aus:

        Dim out As New System.Text.StringBuilder(" ", 100)
        Dim x As Integer
        x = QueryDosDevice("C:", out, out.Capacity)
Rückgabewerte: X=25 und
out: Length=23 und chars="<cannot view indexed property>"

Irgendwie werde ich da partout nicht schlau raus...

Das Meiste wird deshalb nicht getan, weil es nicht unternommen wird.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: Maywood
Datum: 26.06.07 13:24

Das funktioniert doch einwandfrei (mit dem FW 1.1.4322):
Public Class MainClass
 
	Private Declare Function QueryDosDevice Lib "kernel32.dll" Alias _
  "QueryDosDeviceA" ( _
        ByVal lpDeviceName As String, _
        ByVal lpTargetPath As System.Text.StringBuilder, _
        ByVal ucchMax As Int32) As Int32
 
	Public Shared Sub Main()
		'// Debug.WriteLine (System.Environment.Version.ToString())
		Dim out As System.Text.StringBuilder 
        For Each d As String In New String() {"D:", "E:", "F:", "G:"}
        	 out = New System.Text.StringBuilder(" ", 100)
            If not QueryDosDevice(d, out, out.Capacity) = 0 Then 
            	Debug.WriteLine(out.ToString() + " mount on " + d)
            End If
        Next		
	End Sub
 
End Class
Wo ist das Problem?

Ausgabe:

\Device\CdRom0 mount on D:
\Device\CdRom1 mount on E:
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Devicename in Laufwerksbuchstaben 
Autor: TheCrowOfSorrow
Datum: 26.06.07 13:30

Arg, ich Trottel: Habe vergessen, aus dem Stringbuilder wieder ein String zu machen! Funzt wunderbar. Hier dann der Code, falls jemand auch auf so´n Bolzen stößt:
Dim out As New System.Text.StringBuilder(" ", 100)
        Dim Drives As String()
        Dim CDBurner As String
        Drives = System.IO.Directory.GetLogicalDrives
        For i As Integer = 0 To Drives.Length - 1
            QueryDosDevice(Drives(i).Replace("\", ""), out, out.Capacity)
            If out.ToString = "\Device\CdRom0" Then
                CDBurner = Drives(i)
                Exit For
            End If
        Next
Besten Dank!!!

Das Meiste wird deshalb nicht getan, weil es nicht unternommen wird.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel