Announcement

Collapse
No announcement yet.

Detecting CD-ROM change?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Detecting CD-ROM change?

    How would you detect when user put or remove a CD-ROM from CD-drive?

    Should I use
    - SHChangeNotify
    or
    - FindFirstChangeNotification and WaitForMultipleObjects using a thread

    Thank you.



    ------------------
    Patrice Terrier
    mailto[email protected][email protected]</A>
    http://www.zapsolution.com
    Toolkit: WinLIFT (Skin Engine), GDI+ helper (Graphic package), dvBTree (Index manager)
    Freeware: ZAP Audio Player, ZAP Picture Browser.
    Artwork on demand.
    Patrice Terrier
    www.zapsolution.com
    www.objreader.com
    Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

    #2
    Try this third way
    http://support.microsoft.com/default...NoWebContent=1

    ------------------

    Comment


      #3
      Pat, Torsten,
      I had a little time to spare, so I came up with this...
      Code updated 2003-06-05
      Code:
      #COMPILE EXE '#Win 702#
      #REGISTER NONE
      #DIM ALL
      #INCLUDE "Win32Api.Inc" '2003-05-27
        
      GLOBAL hDlg AS DWORD
        
      %Label   = 101
      %Button  = 201
        
       'From DBT.H - Equates for WM_DEVICECHANGE and BroadcastSystemMessage
       %WM_DEVICECHANGE             = &H219&
       %DBTF_MEDIA                  = &H1&     'Media comings and goings
       '%DBTF_NET                   = &H2&     'Network volume
       %DBT_DEVTYP_VOLUME           = &H2&     'Logical volume
      '%DBT_DEVNODES_CHANGED        = &H7&     '
      '%DBT_QUERYCHANGECONFIG       = &H0017&  '
      '%DBT_CONFIGCHANGED           = &H0018&  '
      '%DBT_CONFIGCHANGECANCELED    = &H0019&  '
       %DBT_DEVICEARRIVAL           = &H8000&  'System detected a new device
      '%DBT_DEVICEQUERYREMOVE       = &H8001&  'Wants to remove, may fail
      '%DBT_DEVICEQUERYREMOVEFAILED = &H8002&  'Removal aborted
      '%DBT_DEVICEREMOVEPENDING     = &H8003&  'About to remove, still available
       %DBT_DEVICEREMOVECOMPLETE    = &H8004&  'Device is gone
      '%DBT_DEVICETYPESPECIFIC      = &H8005&  'Type specific event
      '%DBT_USERDEFINED             = &HFFFF&  '
      '%DBT_CUSTOMEVENT             =          '
        
      TYPE DEV_BROADCAST_HDR
        dbch_size       AS DWORD
        dbch_devicetype AS DWORD
        dbch_reserved   AS DWORD
      END TYPE
        
      TYPE DEV_BROADCAST_VOLUME
        dbch_size       AS DWORD
        dbch_devicetype AS DWORD
        dbch_reserved   AS DWORD
        dbcv_unitmask   AS DWORD
        dbcv_flags      AS INTEGER
      END TYPE
      '______________________________________________________________________________
        
      CALLBACK FUNCTION DlgProc
       LOCAL Device_HDR    AS DEV_BROADCAST_HDR
       LOCAL Device_Volume AS DEV_BROADCAST_VOLUME
       LOCAL DriveLetter   AS STRING
        
       SELECT CASE CBMSG
        
         CASE %WM_DEVICECHANGE
           SELECT CASE CBWPARAM
             CASE %DBT_DEVICEARRIVAL, %DBT_DEVICEREMOVECOMPLETE
               CopyMemory VARPTR(Device_HDR), BYCOPY CBLPARAM, SIZEOF(Device_HDR)
               IF Device_HDR.dbch_devicetype = %DBT_DEVTYP_VOLUME THEN
                 CopyMemory VARPTR(Device_Volume), BYCOPY CBLPARAM, SIZEOF(Device_Volume)
                 IF ISTRUE(Device_Volume.dbcv_flags AND %DBTF_MEDIA) THEN
                   DriveLetter = CHR$((26 - INSTR(BIN$(Device_Volume.dbcv_unitmask, 26), "1")) + 65) & ":"
                   IF CBWPARAM = %DBT_DEVICEARRIVAL THEN
                     CONTROL SET TEXT hDlg, %Label, "CD inserted in " & DriveLetter & " at " & TIME$
                   ELSE
                     CONTROL SET TEXT hDlg, %Label, "CD removed from " & DriveLetter & " at " & TIME$
                   END IF
                   BEEP
                 END IF
               END IF
           END SELECT
        
         CASE %WM_COMMAND
           SELECT CASE LOWRD(CBWPARAM)
             CASE %Button, %IDCANCEL
               If CBCTLMSG = %BN_CLICKED Or CBCTLMSG = 1 THEN DIALOG END CBHNDL
           END SELECT
        
        END SELECT
        
      END FUNCTION
      '______________________________________________________________________________
        
      FUNCTION PBMAIN()
        
       DIALOG NEW 0 ,"CD-Rom - Change notification", , , 200, 50, _
                  %WS_CAPTION OR %WS_MINIMIZEBOX OR %WS_SYSMENU, %WS_EX_TOPMOST TO hDlg
        
       CONTROL ADD LABEL, hDlg, %Label, "Insert or remove a CD-Rom", 5, 18, 190, 10, %WS_CHILD _
          OR %WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, %WS_EX_LEFT OR %WS_EX_LTRREADING
        
       CONTROL ADD BUTTON,  hDlg, %Button,  "E&xit", 162, 33, 35, 15
        
       DIALOG SHOW MODAL hDlg CALL DlgProc
        
      END FUNCTION
      '______________________________________________________________________________
      [This message has been edited by Pierre Bellisle (edited June 05, 2003).]

      Comment


        #4
        Thank you VERY MUCH both of you!

        I will give it a try right now...


        ------------------
        Patrice Terrier
        mailto[email protected][email protected]</A>
        http://www.zapsolution.com
        Toolkit: WinLIFT (Skin Engine), GDI+ helper (Graphic package), dvBTree (Index manager)
        Freeware: ZAP Audio Player, ZAP Picture Browser.
        Artwork on demand.
        Patrice Terrier
        www.zapsolution.com
        www.objreader.com
        Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

        Comment


          #5
          Pierre,

          WARNING, you must change your provided source code and follow the
          C sample provided by Microsoft, because the CBLPARAM could be %NULL
          causing a GPF in your application, if you don't check it first.

          This is because %WM_DEVICECHANGE could be sent for many other reasons
          than just DEVICE change notification.

          Regards


          ------------------
          Patrice Terrier
          mailto[email protected][email protected]</A>
          http://www.zapsolution.com
          Toolkit: WinLIFT (Skin Engine), GDI+ helper (Graphic package), dvBTree (Index manager)
          Freeware: ZAP Audio Player, ZAP Picture Browser.
          Artwork on demand.
          Patrice Terrier
          www.zapsolution.com
          www.objreader.com
          Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

          Comment


            #6
            Pat,
            thank for the warning, code is updated...


            ------------------

            Comment

            Working...
            X
            😀
            🥰
            🤢
            😎
            😡
            👍
            👎