| |
VB.NET - Ein- und UmsteigerRe: 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 | |
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.
| |
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 | |
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 | |
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.
| |
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. | |
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.
| |
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: | |
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.
| |
| 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 |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|