CD-ROM ekleme veya kaldırma bildirim almak nasıl

Özet

Bazı uygulamalar, kullanıcı ekler ya da bir CD veya DVD medya değişikliklerini yoklamayı olmadan CD-ROM sürücüsünden kaldırır bilmeniz gerekir. Windows WM_DEVICECHANGE ileti yoluyla bu uygulamaları bildirmek için bir yol sağlar. Bu makalede, CD-ROM veya DVDmedia değişiklikleri algılamak için WM_DEVICECHANGE iletiyi işlemek açıklar.

Daha fazla bilgi

Windows tüm üst düzey windows yeni bir aygıt veya medya eklenir ve kullanılabilir hale gelir ve varolan aygıtlar veya ortam kaldırıldığında, bir WM_DEVICECHANGE iletisi gönderir. Her WM_DEVICECHANGE iletisi değişikliği ve değişiklik hakkında ayrıntılı bilgi sağlayan bir yapı tanımlamak için ilişkili bir olay vardır.


Bir olay bağlı yapı tarafından izlenen bir olay bağımsız üstbilgi yapı oluşur. Olay bağımlı bölümü yapısı hangi aygıt olayı uygulanır açıklar. Bu yapı kullanmak üzere uygulamaları ilk olay türünü ve aygıt türünü belirlemeniz gerekir. Daha sonra bunlar uygun eylemi gerçekleştirmek için doğru yapıyı kullanabilirsiniz.


Kullanıcı yeni bir CD veya DVD'yi sürücüye eklediğinde uygulamaları DBT_DEVICEARRIVAL olayı ile bir WM_DEVICECHANCE iletisi alıyorum. Uygulama olay gelen aygıt türünü (DBT_DEVTYP_VOLUME) bir birim olduğunu ve olayın medya bayrağı (DBTF_MEDIA) ayarlandığından emin olmak için iade etmeniz gerekir.


Kullanıcı bir CD-ROM ya da DVD CD kaldırdığında, uygulamaları DBT_DEVICEREMOVECOMPLETE olayı ile bir WM_DEVICECHANCE iletisi alırsınız. Uygulama ile DBT_DEVICEARRIVAL gibi yukarıda, kaldırılmakta olan aygıtın bir birim olduğunu ve olayın medya işaretin ayarlandığını emin olmak için olay denetlemeniz gerekir.

Örnek Kod

Aşağıdaki kod, CD veya DVD ekleme veya kaldırmayı denetlemek için WM_DEVICECHANGE iletisinin nasıl kullanılacağını gösterir.

   #include <windows.h>   #include <dbt.h>

char FirstDriveFromMask (ULONG unitmask); //prototype


/*----------------------------------------------------------------------
Main_OnDeviceChange (hwnd, wParam, lParam)

Description
Handles WM_DEVICECHANGE messages sent to the application's
top-level window.
----------------------------------------------------------------------*/

void Main_OnDeviceChange (HWND hwnd, WPARAM wParam, LPARAM lParam)
{

PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
char szMsg[80];


switch(wParam)
{
case DBT_DEVICEARRIVAL:
// See if a CD-ROM or DVD was inserted into a drive.
if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if (lpdbv -> dbcv_flags & DBTF_MEDIA)
{
wsprintf (szMsg, "Drive %c: arrived\n",
FirstDriveFromMask(lpdbv ->dbcv_unitmask));

MessageBox (hwnd, szMsg, "WM_DEVICECHANGE", MB_OK);
}
}
break;


case DBT_DEVICEREMOVECOMPLETE:
// See if a CD-ROM was removed from a drive.
if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if (lpdbv -> dbcv_flags & DBTF_MEDIA)
{
wsprintf (szMsg, "Drive %c: was removed\n",
FirstDriveFromMask(lpdbv ->dbcv_unitmask));

MessageBox (hwnd, szMsg, "WM_DEVICECHANGE", MB_OK);
}
}
break;

default:
/*
Other WM_DEVICECHANGE notifications get sent for other devices
or reasons; we don't care about them here. If they were
important, we would check for them and act accordingly.
*/
;
}
}


/*----------------------------------------------------------------------
FirstDriveFromMask (unitmask)

Finds the first valid drive letter from a mask of drive letters. The
mask must be in the format bit 0 = A, bit 1 = B, bit 3 = C, etc.

A valid drive letter is defined when the corresponding bit is set to
1.

Returns the drive letter that was first found.
----------------------------------------------------------------------*/
char FirstDriveFromMask (ULONG unitmask)
{
char i;

for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)
break;
unitmask = unitmask >> 1;
}

return (i + 'A');
}

Bu örnek kod birimi varış nedeniyle yeni medya ekleme yalnızca denetler, ancak diğer türleri için çok diğer donanım olay bildirim almak için genişletilebilir. Bunu yapmak için servis taleplerini diğer aygıt olaylarını ekleyin ve her olay için farklı aygıt türleri ele gerekir.

Başvurular

Microsoft Platform SDK belgelerine, "Aygıt Yönetimi" genel bakış"Bölüm
Özellikler

Makale No: 163503 - Son İnceleme: 24 Şub 2017 - Düzeltme: 1

Microsoft Win32 Uygulama Programlama Arabirimi

Geri bildirim