Bagikan melalui


Menjelajahi Perangkat

Menjelajahi perangkat mirip dengan menjelajahi drive disk. Semua objek pada perangkat disebut penyimpanan. Penyimpanan dapat berupa file, folder, atau objek abstrak (seperti daftar putar) pada perangkat. Anda harus memeriksa atribut dan metadata penyimpanan (jika didukung) untuk memahami jenis penyimpanannya. Penyimpanan diatur secara hierarkis pada perangkat; setiap penyimpanan memiliki tepat satu induk, dan semua penyimpanan pada akhirnya turun dari satu penyimpanan perangkat akar, biasanya bernama "\".

Langkah-langkah berikut menjelaskan cara menjelajahi perangkat:

  1. Dapatkan antarmuka IWMDMDevice perangkat seperti yang dijelaskan dalam Menghitung Perangkat.
  2. Panggil IWMDMDevice::EnumStorage untuk mengambil antarmuka IWMDMEnumStorage . Antarmuka ini digunakan untuk mendapatkan semua objek anak dari penyimpanan yang mengembalikan antarmuka ini. Saat mendapatkan antarmuka ini dari perangkat, seperti yang kami ada di sini, antarmuka hanya akan menyimpan satu penyimpanan: penyimpanan perangkat akar.
  3. Panggil IWMDMEnumStorage::Next dengan hitungan 1 untuk mengambil antarmuka IWMDMStorage untuk penyimpanan perangkat root. (Anda tidak dapat meminta lebih dari satu anak dari perangkat.)
  4. Periksa semua penyimpanan pada perangkat dengan memanggil IWMDMStorage::EnumStorage secara rekursif lalu IWMDMEnumStorage::Berikutnya untuk mendapatkan anak-anak penyimpanan. Untuk melihat apakah penyimpanan memiliki anak untuk menghindari panggilan ke EnumStorage dan Berikutnya, Anda dapat memanggil IWMDMStorage::GetAttributes untuk memeriksa bendera WMDM_STORAGE_ATTR_HAS_FILES atau WMDM_STORAGE_ATTR_HAS_FOLDERS. Untuk informasi selengkapnya tentang cara mendapatkan properti penyimpanan, lihat Mendapatkan dan Mengatur Metadata dan Atribut serta Mendapatkan dan Mengatur Metadata dan Atribut di Aplikasi.

Pengelola Perangkat Media Windows tidak mengekspos sekumpulan folder standar untuk menyimpan media dengan tipe tertentu (misalnya, folder "Daftar Putar Saya" untuk daftar putar). Setiap perangkat memiliki sistem file yang unik, dan Anda harus memutuskan tempat yang sesuai untuk mencari, atau mengirim, file tertentu.

Catatan

Windows Explorer bisa menampilkan folder virtual yang sebenarnya tidak ada pada perangkat. Contoh folder virtual adalah folder "Media" dan "Data" yang ditampilkan untuk perangkat MTP. Folder ini dibuat oleh Windows untuk membuat unduhan lebih sederhana bagi pengguna akhir; mereka tidak benar-benar ada di perangkat. Aplikasi Anda tidak boleh bergantung pada menemukan jenis folder umum ini. Sebaliknya, Windows Explorer mungkin tidak menampilkan beberapa folder atau objek yang ada di perangkat (misalnya, daftar putar).

 

Kode contoh C++ berikut menunjukkan eksplorasi rekursif perangkat. Ini menggunakan dua fungsi:

  • ExploreDevice, fungsi awal yang menerima penunjuk perangkat dan mendapatkan penunjuk ke enumerator akar untuk perangkat tersebut.
  • RecursiveExploreStorage, yang dipanggil untuk menjelajahi perangkat secara rekursif.
// Get the root enumerator and start the recursive function.
HRESULT ExploreDevice(IWMDMDevice* pDevice)
{
    HRESULT hr = S_OK;

    // Get a root enumerator.
    CComPtr<IWMDMEnumStorage> pEnumStorage;
    hr = pDevice->EnumStorage(&pEnumStorage);
    if (SUCCEEDED(hr))
    {
        RecursiveExploreStorage(pEnumStorage);
    }
    return hr;
}

// Recursively explore a storage.
void RecursiveExploreStorage(IWMDMEnumStorage* pEnumStorage)
{
    HRESULT hr = S_OK;
    CComPtr<IWMDMStorage> pStorage;

    ULONG numRetrieved = 0;
    // Loop through all storages in the current storage.
    while((pEnumStorage->Next(1, &pStorage, &numRetrieved) == S_OK) && (numRetrieved == 1))
    {
        // Get the name of the object.
        const UINT MAX_LEN = 255;
        WCHAR name[MAX_LEN];
        hr = pStorage->GetName((LPWSTR)&name, MAX_LEN);
        // TODO: Display the retrieved storage name

        // If this is a folder, recurse into it.
        if (attributes & WMDM_FILE_ATTR_FOLDER)
        {
            CComPtr<IWMDMEnumStorage> pEnumSubStorage;
            hr = pStorage->EnumStorage(&pEnumSubStorage);
            if (SUCCEEDED(hr)
            {
                RecursiveExploreStorage(pEnumSubStorage);
            }
        }
        pStorage.Release();
    } // Get the next storage pointer.
    return;
}

Membuat Aplikasi Windows Media Device Manager