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 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 Plug and Play media penyimpanan (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 antarmuka Platform SDK IConnectionPointContainer dan IConnectionPoint . Aplikasi Anda harus mendaftar untuk menerima peristiwa saat dimulai, dan membatalkan pendaftaran saat ditutup. Ikuti langkah-langkah ini untuk mendaftar untuk menerima pemberitahuan ini.
- Kueri antarmuka IWMDeviceManager utama yang Anda terima saat mengautentikasi aplikasi anda untuk IConnectionPointContainer.
- Panggil IConnectionPointContainer::FindConnectionPoint untuk mengambil titik koneksi kontainer untuk antarmuka IWMDMNotification .
- Daftar untuk menerima peristiwa dengan memanggil IConnectionPoint::Advise. Teruskan di kelas yang mengimplementasikan IWMDMNotification, dan ambil cookie, 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:
- Kueri antarmuka IWMDeviceManager utama untuk IConnectionPointContainer.
- Dapatkan titik koneksi untuk antarmuka IWMDMNotification .
- Batalkan pendaftaran aplikasi Anda untuk pemberitahuan peristiwa dengan memanggil IConnectionPoint::Unadvise, meneruskan ID unik yang diterima saat Anda mendaftar untuk menerima peristiwa.
Kode C++ berikut menunjukkan cara membatalkan pendaftaran untuk peristiwa IWMDMNotification saat 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):
IWMDMStorageGlobals::Initialize
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.