vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 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 - Fortgeschrittene
Meldung beim Schließen der CD-Schublade 
Autor: Dikn
Datum: 22.07.21 09:38

Hallo!
Mit folgender vereinfachten Message-Methode kann ich feststellen, ob ein Laufwerk hinzugefügt bzw. entfernt wurde.
Mein Problem:
Beim Schließen des CD-Laufwerks dauert es lange, bis die Meldung "Ein Datenträger wurde hinzugefügt" erscheint. Ich möchte schon beim Schließen der Schublade einen Hinweis ausgeben.

Public Class Form1
    Private Const WM_DEVICECHANGE As Integer = &H219
    Private Const DBT_DEVICEARRIVAL As Integer = &H8000
    Private Const DBT_DEVICEREMOVECOMPLETE = &H8004
 
    Protected Overloads Overrides Sub WndProc(ByRef msg As Message)
        MyBase.WndProc(msg)
 
        If msg.Msg = WM_DEVICECHANGE Then
            If msg.WParam = CType(DBT_DEVICEARRIVAL, IntPtr) Then
                TextBox1.Text += "Neuen Datenträger gefunden" & vbCrLf
            End If
            If msg.WParam = CType(DBT_DEVICEREMOVECOMPLETE, IntPtr) Then
                TextBox1.Text += "Ein Datenträger wurde entfernt" & vbCrLf
            End If
        End If
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Meldung beim Schließen der CD-Schublade 
Autor: -Franky-
Datum: 22.07.21 11:13

Hi

Das sind aber irgendwie 2 unterschiedliche paar Schuhe. Das eine ist das erkennen ob ein Gerät, zB ein CDROM Laufwerk, USB-Stick oder Netzwerklaufwerk (logische Laufwerke), zum System hinzugefügt bzw entfernt wurde und das andere ist ob ein Medium in einem Laufwerk eingelegt bzw. entfernt wurde. Üblicherweise wertet man noch, neben wParam, zusätzlich lParam aus. lParam -> Struktur DEV_BROADCAST_HDR. Dann zB. bei DBT_DEVICEARRIVAL prüft man DEV_BROADCAST_HDR.dbch_devicetype. Ist dieser DBT_DEVTYP_VOLUME dann lParam -> Struktur DEV_BROADCAST_VOLUME. Hier prüft man ob DEV_BROADCAST_VOLUME.dbcv_flags nicht die Flags DBTF_MEDIA und DBTF_NET enthält. Dann wurde ein logisches Laufwerk hinzugefügt. Enthält DEV_BROADCAST_VOLUME.dbcv_flags das Flag DBTF_MEDIA, dann wurde ein Medium, zB. eine CDROM in ein CDROM-Laufwerk eingelegt. Das ganze entsprechend auch für DBT_DEVICEREMOVECOMPLETE.

Das so ersteinmal ganz grob. Was Du aber nicht ermitteln kannst, ob gerade die CDROM Schublade per Hand geschlossen oder geöffnet wird. Außerdem braucht das System ein wenig Zeit um ein eingelegtes/ausgeworfenes Medium oder gerade angeschlossene/entfernte Gerät zu erkennen. Nicht mal Windows selber zeigt Dir sofort ein eingelegtes Medium an. Das was mir dazu höchstens einfällt wäre das CDROM-Laufwerk zu fragen ob die Schublade geöffnet oder geschlossen ist. Ob man auch abfragen kann ob die Schublade gerade am öffnen/schließen ist, ist mir nicht bekannt.

Mit freundlichen Grüßen
-Franky-

Beitrag wurde zuletzt am 22.07.21 um 11:37:56 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Meldung beim Schließen der CD-Schublade 
Autor: Dikn
Datum: 25.07.21 08:14

Wenn auch verspätet (war unterwegs)…
Vielen Dank für Deine schnelle Antwort!!!

Das Erkennen ob ein Gerät (CDROM-Laufwerk, USB-Stick, usw.) hinzugefügt oder entfernt wurde funktioniert in meinem Programm einwandfrei.
Es werden Icons und Text der vorhandenen Laufwerke in einer Combobox angezeigt. Ist z.B. keine CD im Laufwerk wird NotReady hinzugefügt.

Mein Problem ist, dass beim Schließen der CD-Schublade es bei bestimmten CDs es extrem lange dauert bis der Vorgang abgeschlossen ist. In dieser Zeit würde ich gern einen Hinweis anzeigen.

Wie Du schreibst, wäre eine Abfrage ob die Schublade gerade am öffnen/schließen ist ideal.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Meldung beim Schließen der CD-Schublade 
Autor: -Franky-
Datum: 25.07.21 14:26

Hi

Das das ganze etwas Zeit in Anspruch nimmt ist ja klar. SpinUp des CDROM Laufwerkes nach dem schließen der Schublade, erkennen um was für ein Medium es sich handelt usw usw. Da kommst mit der Broadcast-Message nicht allzuweit. Die wird ja erst ausgelöst wenn alles erkannt wurde.

Du könntest höchstens das CDROM Laufwerk direkt per API DeviceIoControl fragen ob die Schublade offen oder geschlossen ist. Ob es darüber auch sowas wie ein Status "wird gerade geöffnet/geschlossen" gibt, weiß ich gerade nicht. Zu DeviceIoControl und Status der CDROM-Schublade findest du einiges per Google.

Mit freundlichen Grüßen
-Franky-

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Meldung beim Schließen der CD-Schublade 
Autor: Dikn
Datum: 26.07.21 12:55

Hallo Franky!

Ich habe nichts gefunden. Ich geb's auf!

Trotzdem vielen vielen Dank für Deine Bemühungen
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