Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sebelum dapat menggunakan objek namespace, Anda memerlukan cara untuk mengidentifikasinya. Ini berarti mendapatkan penunjuknya ke daftar pengidentifikasi item (PIDL) atau, dalam kasus objek sistem file, jalurnya. Bagian ini membahas dua cara yang lebih sederhana untuk mendapatkan ID objek.
Untuk pendekatan yang lebih kuat yang akan bekerja dengan folder apa pun, gunakan antarmukaIShellFolder. Lihat Mendapatkan Informasi Tentang Isi sebuah Folder untuk detail selengkapnya.
- kotak dialog OpenFiles
- kotak dialog SHBrowseForFolder
- Folder-Folder Khusus dan CSIDL
- Contoh Sederhana Cara Menggunakan CSIDL dan SHBrowseForFolder
Kotak dialog OpenFiles
Untuk memungkinkan pengguna menavigasi namespace layanan dan memilih folder, aplikasi Anda dapat menggunakan antarmukaIFileDialog. Memanggil antarmuka ini dengan bendera FOS_PICKFOLDERS meluncurkan kotak dialog umum Buka File dalam mode "memilih folder".
Untuk Windows Vista dan yang lebih baru, ini adalah cara yang disarankan untuk memilih folder.
Kotak dialog SHBrowseForFolder
Untuk memungkinkan pengguna menavigasi namespace layanan dan memilih folder, aplikasi Anda cukup memanggil SHBrowseForFolder. Memanggil fungsi ini meluncurkan kotak dialog dengan UI yang fungsinya mirip dengan kotak dialog umum Buka atau Simpan Sebagai.
Saat pengguna memilih folder, SHBrowseForFolder mengembalikan PIDL folder yang sepenuhnya memenuhi syarat dan nama tampilannya. Jika folder berada dalam sistem file, aplikasi dapat mengonversi PIDL ke jalur dengan memanggil SHGetPathFromIDList. Aplikasi juga dapat membatasi rentang folder yang dapat dipilih pengguna dengan menentukan folder akar. Hanya folder yang berada di bawah root tersebut di ruang nama yang akan muncul. Ilustrasi berikut ini memperlihatkan kotak dialog SHBrowseForFolder, dengan folder akar yang diatur ke Program Files.
Contoh sederhana tentang cara menggunakan SHBrowseForFolder disediakan nanti.
CSIDL dan Folder Khusus
Sejumlah folder yang umum digunakan ditetapkan sebagai khusus oleh sistem. Folder ini memiliki tujuan yang terdefinisi dengan baik, dan sebagian besar ada di semua sistem. Bahkan jika awalnya tidak ada, nama dan lokasinya masih ditentukan, sehingga dapat ditambahkan nanti. Kumpulan folder khusus mencakup semua folder virtual standar sistem, seperti Printer, Dokumen Saya, dan Lingkungan Jaringan. Ini juga mencakup sejumlah folder sistem file standar, seperti File Program dan Sistem.
Meskipun folder adalah komponen standar dari semua sistem, nama dan lokasinya di namespace layanan dapat bervariasi. Misalnya, direktori Sistem adalah C:\Winnt\System32 pada beberapa sistem dan C:\Windows\System32 pada sistem lain. Di masa lalu, variabel lingkungan menyediakan cara untuk menentukan nama dan lokasi folder khusus pada sistem tertentu. Shell sekarang menyediakan cara yang lebih kuat dan fleksibel untuk mengidentifikasi folder khusus, CSIDL. Anda umumnya harus menggunakannya alih-alih variabel lingkungan.
CSIDL menyediakan cara yang seragam untuk mengidentifikasi dan menemukan folder khusus, terlepas dari nama atau lokasinya pada sistem tertentu. Tidak seperti variabel lingkungan, CSIDL dapat digunakan dengan folder virtual serta folder sistem file. Setiap folder khusus memiliki CSIDL unik yang ditetapkan untuk folder tersebut. Misalnya, folder sistem file Program Files memiliki CSIDL CSIDL_PROGRAM_FILES, dan folder virtual Network Neighborhood memiliki CSIDL CSIDL_NETWORK.
CSIDL digunakan bersama dengan salah satu dari beberapa fungsi Shell untuk mendapatkan PIDL dari folder khusus atau jalur folder sistem file khusus. Jika folder tidak ada pada sistem, aplikasi Anda dapat memaksanya untuk dibuat dengan menggabungkan CSIDL-nya dengan CSIDL_FLAG_CREATE. CSIDL dapat diteruskan ke fungsi berikut:
- SHGetFolderLocation, yang berfungsi untuk mengambil PIDL dari folder khusus.
- SHGetFolderPath, yang mengambil jalur folder khusus sistem file.
Perhatikan bahwa kedua fungsi ini diperkenalkan dengan versi 5.0 dari Shell dan menggantikan fungsiSHGetSpecialFolderLocation dan fungsi SHGetSpecialFolderPath.
Contoh Sederhana Tentang Cara Menggunakan CSIDL dan SHBrowseForFolder
Fungsi Sampel Berikut, PidlBrowse, menggambarkan cara menggunakan CSIDL untuk mendapatkan PIDL folder, dan menggunakan SHBrowseForFolder untuk membuat pengguna memilih folder. Ini mengembalikan PIDL dan nama tampilan folder yang dipilih.
LPITEMIDLIST PidlBrowse(HWND hwnd, int nCSIDL, LPSTR pszDisplayName)
{
LPITEMIDLIST pidlRoot = NULL;
LPITEMIDLIST pidlSelected = NULL;
BROWSEINFO bi = {0};
if(nCSIDL)
{
SHGetFolderLocation(hwnd, nCSIDL, NULL, NULL, &pidlRoot);
}
else
{
pidlRoot = NULL;
}
bi.hwndOwner = hwnd;
bi.pidlRoot = pidlRoot;
bi.pszDisplayName = pszDisplayName;
bi.lpszTitle = "Choose a folder";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
pidlSelected = SHBrowseForFolder(&bi);
if(pidlRoot)
{
CoTaskMemFree(pidlRoot);
}
return pidlSelected;
}
Aplikasi yang memanggil melewati handle jendela, yang diperlukan oleh SHBrowseForFolder. Parameter nCSIDL adalah CSIDL opsional yang digunakan untuk menentukan folder akar. Hanya folder di bawah folder akar dalam hierarki yang akan ditampilkan. Ilustrasi yang ditampilkan sebelumnya dihasilkan dengan memanggil fungsi ini yang mengatur nCSIDL menjadi CSIDL_PROGRAM_FILES. Aplikasi panggilan juga melewati buffer string, pszDisplayName, untuk menahan nama tampilan folder yang dipilih saat PidlBrowse kembali. Merupakan tanggung jawab aplikasi panggilan untuk membebaskan IDList yang dikembalikan oleh SHBrowseForFolder menggunakan CoTaskMemFree.