Bagikan melalui


Mengaktifkan Pemberitahuan

Windows Media Device Manager mendeklarasikan empat antarmuka yang dapat diterapkan aplikasi di kelas COM untuk menerima pemberitahuan peristiwa. Antarmuka ini termasuk dalam dua grup, seperti yang ditunjukkan dalam tabel berikut.

Antarmuka Deskripsi
IWMDMNotification Memberi tahu aplikasi ketika perangkat atau media penyimpanan tersambung atau terputus.
IWMDMProgress
IWMDMProgress2
IWMDMProgress3
Sistem pemberitahuan yang sangat sederhana untuk memperingatkan aplikasi tentang kemajuan peristiwa apa pun. Aplikasi ini tidak diperlukan untuk mengambil tindakan apa pun sebagai respons terhadap pesan-pesan ini.

IWMDMNotification

IWMDMNotification memperingatkan aplikasi ketika perangkat Plug and Play terhubung atau terputus dari komputer, serta ketika media penyimpanan Plug and Play (seperti kartu flash) dimasukkan atau dihapus dari perangkat. Pemberitahuan ini dapat membantu aplikasi memperbarui antarmuka penggunanya untuk mencerminkan perubahan.

Untuk menerima pemberitahuan ini, aplikasi Anda harus mendaftar untuk menerimanya menggunakan Platform SDK IConnectionPointContainer dan antarmuka IConnectionPoint. Aplikasi Anda harus mendaftar untuk menerima event saat aplikasi mulai, dan membatalkan registrasi saat aplikasi ditutup. Ikuti langkah-langkah ini untuk mendaftar untuk menerima pemberitahuan ini.

  1. Kueri antarmuka utama IWMDeviceManager yang Anda terima saat mengautentikasi aplikasi untuk IConnectionPointContainer.
  2. Panggil IConnectionPointContainer::FindConnectionPoint untuk mengambil titik koneksi kontainer untuk antarmuka IWMDMNotification.
  3. Mendaftar untuk menerima event dengan memanggil IConnectionPoint::Advise. Teruskan kelas yang menyediakan implementasi dari IWMDMNotification, dan dapatkan cookie, yaitu ID unik yang mengidentifikasi titik koneksi Anda. Ini harus disimpan, dan digunakan nanti untuk membatalkan pendaftaran pemberitahuan peristiwa.

Kode C++ berikut menunjukkan bagaimana Anda dapat mendaftar untuk menerima pemberitahuan dari IWMDMNotification.

HRESULT CWMDMController::RegisterForNotifications()
{
    HRESULT hr = S_OK;
    CComPtr<IConnectionPointContainer> pConxnPointCont;
    CComPtr<IConnectionPoint> pIConnPoint;

    // Get the IConnectionPointContainer interface from IWMDeviceManager.
    if (SUCCEEDED (hr = m_IWMDMDeviceMgr->QueryInterface(IID_IConnectionPointContainer, (void**) & pConxnPointCont)))
    {
        // Get a connection point from the container.
        if (SUCCEEDED (hr = pConxnPointCont->FindConnectionPoint(IID_IWMDMNotification, &pIConnPoint)))
        {
            // Add ourselves as a callback handler for the connection point.
            // If we succeeded, indicate that by storing the connection point ID.
            DWORD dwCookie;
            if (SUCCEEDED (hr = pIConnPoint->Advise((IUnknown*)((IWMDMNotification*)this), &dwCookie)))
            {
                m_dwNotificationCookie = dwCookie;
            }
        }
    }

    return hr;
}

Ketika aplikasi Anda ditutup, Anda harus membatalkan pendaftaran dengan IConnectionPoint untuk menunjukkan bahwa aplikasi tersebut seharusnya tidak lagi mengirimi Anda pemberitahuan. Ikuti langkah-langkah ini untuk membatalkan pendaftaran pemberitahuan:

  1. Kueri antarmuka IWMDeviceManager utama untuk IConnectionPointContainer.
  2. Dapatkan titik koneksi untuk antarmuka IWMDMNotification.
  3. Batalkan pendaftaran aplikasi Anda untuk pemberitahuan acara dengan memanggil IConnectionPoint::Unadvise, dan meneruskan ID unik yang diterima saat Anda mendaftar untuk menerima acara.

Kode C++ berikut menunjukkan cara membatalkan pendaftaran peristiwa IWMDMNotification ketika aplikasi Anda ditutup.

HRESULT CWMDMController::UnregisterForNotifications()
{
    HRESULT hr = S_FALSE;

    // On class initialization, we initialized the handle to -1 as a flag 
    // to indicate we had not yet registered for notifications. If registration 
    // never happened, don't bother to unregister.
    if (-1 != m_dwNotificationCookie)
    {
        CComPtr<IConnectionPointContainer> pConxnPointCont;
        CComPtr<IConnectionPoint> pIConnPoint;

        // Get the connection point container from IWMDeviceManager. 
        if (SUCCEEDED (hr = 
           m_IWMDMDeviceMgr->QueryInterface(IID_IConnectionPointContainer,
           (void**) & pConxnPointCont)))
        {
            // Get a connection point from the container.
            if (SUCCEEDED (hr = pConxnPointCont->FindConnectionPoint(IID_IWMDMNotification, &pIConnPoint)))
            {
                // Remove ourselves as a callback from the connection point.
                // If successful, reset the ID to a flag value.
                if (SUCCEEDED (hr = 
                    pIConnPoint->Unadvise(m_dwNotificationCookie)))
                {
                    m_dwNotificationCookie = -1;
                    hr = S_OK;
                }
            }
        }
    }

    return hr;
}

Menggunakan IWMDMProgress

Windows Media Device Manager dapat mengirim pesan status aplikasi Anda ketika tindakan tertentu, seperti transfer konten, akuisisi jam aman, dan menemukan informasi file DRM, terjadi. Aplikasi Anda dapat menggunakan pesan ini untuk memantau status peristiwa atau membatalkan acara. Untuk menggunakan antarmuka ini, terapkan IWMDMProgress, IWMDMProgress2, atau IWMDMProgress3, dan teruskan sebagai parameter ke metode yang akan menerima pesan kemajuan. Perhatikan bahwa IWMDMProgress3 adalah antarmuka yang unggul karena menyediakan GUID identifikasi yang menentukan tindakan apa yang sedang dilacak. Metode aplikasi berikut menerima antarmuka kemajuan (metode penyedia layanan yang sesuai harus dapat mengirim pemberitahuan ke antarmuka yang dikirimkan):

IWMDMStorageControl::Delete

IWMDMStorageControl::Insert

IWMDMStorageControl::Move

IWMDMStorageControl::Read

IWMDMStorageControl::Ganti nama

IWMDMStorageControl2::Insert2

IWMDMStorageControl3::Insert3

IWMDMStorageGlobals::Inisialisasi

IWMDRMDeviceApp::AcquireDeviceData

Contoh meneruskan antarmuka ke dalam metode diberikan dalam dokumentasi untuk metode ini. Untuk contoh penerapan antarmuka panggilan balik, lihat dokumentasi untuk metode IWMDMProgress, IWMDMProgress2, atau IWMDMProgress3.

Membuat Aplikasi Windows Media Device Manager