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.
Windows Explorer adalah aplikasi penjelajahan dan manajemen sumber daya yang kuat. Windows Explorer dapat diakses secara keseluruhan melalui Explorer.exe atau antarmukaIExplorerBrowser. Windows Explorer (Explorer.exe) dapat ditelurkan sebagai proses terpisah menggunakan ShellExecuteEx atau fungsi serupa.
Jendela penjelajah terbuka dapat ditemukan dan diprogram dengan menggunakanIShellWindows(CLSID_ShellWindows), dan instans baru Windows Explorer dapat dibuat dengan menggunakanIWebBrowser2 (CLSID_ShellBrowserWindow).
Sampel kode berikut menunjukkan bagaimana model otomatisasi Windows Explorer dapat digunakan untuk membuat dan menemukan jendela penjelajah yang sedang berjalan.
#define _WIN32_WINNT 0x0600
#define _WIN32_IE 0x0700
#define _UNICODE
#include <windows.h>
#include <shobjidl.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <strsafe.h>
#include <propvarutil.h>
#pragma comment(lib, "shlwapi.lib")
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "propsys.lib")
// Use the Shell Windows object to find all of the explorer and IExplorer
// windows and close them.
void CloseExplorerWindows()
{
IShellWindows* psw;
if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows,
NULL,
CLSCTX_LOCAL_SERVER,
IID_PPV_ARGS(&psw))))
{
VARIANT v = { VT_I4 };
if (SUCCEEDED(psw->get_Count(&v.lVal)))
{
// Walk backward to make sure that the windows that close
// do not cause the array to be reordered.
while (--v.lVal >= 0)
{
IDispatch *pdisp;
if (S_OK == psw->Item(v, &pdisp))
{
IWebBrowser2 *pwb;
if (SUCCEEDED(pdisp->QueryInterface(IID_PPV_ARGS(&pwb))))
{
pwb->Quit();
pwb->Release();
}
pdisp->Release();
}
}
}
psw->Release();
}
}
// Convert an IShellItem or IDataObject into a VARIANT that holds an IDList
// suitable for use with IWebBrowser2::Navigate2.
HRESULT InitVariantFromObject(IUnknown *punk, VARIANT *pvar)
{
VariantInit(pvar);
PIDLIST_ABSOLUTE pidl;
HRESULT hr = SHGetIDListFromObject(punk, &pidl);
if (SUCCEEDED(hr))
{
hr = InitVariantFromBuffer(pidl, ILGetSize(pidl), pvar);
CoTaskMemFree(pidl);
}
return hr;
}
HRESULT ParseItemAsVariant(PCWSTR pszItem, IBindCtx *pbc, VARIANT *pvar)
{
VariantInit(pvar);
IShellItem *psi;
HRESULT hr = SHCreateItemFromParsingName(pszItem, NULL, IID_PPV_ARGS(&psi));
if (SUCCEEDED(hr))
{
hr = InitVariantFromObject(psi, pvar);
psi->Release();
}
return hr;
}
HRESULT GetKnownFolderAsVariant(REFKNOWNFOLDERID kfid, VARIANT *pvar)
{
VariantInit(pvar);
PIDLIST_ABSOLUTE pidl;
HRESULT hr = SHGetKnownFolderIDList(kfid, 0, NULL, &pidl);
if (SUCCEEDED(hr))
{
hr = InitVariantFromBuffer(pidl, ILGetSize(pidl), pvar);
CoTaskMemFree(pidl);
}
return hr;
}
HRESULT GetShellItemFromCommandLine(REFIID riid, void **ppv)
{
*ppv = NULL;
HRESULT hr = E_FAIL;
int cArgs;
PWSTR *ppszCmd = CommandLineToArgvW(GetCommandLineW(), &cArgs);
if (ppszCmd && cArgs > 1)
{
WCHAR szSpec[MAX_PATH];
StringCchCopyW(szSpec, ARRAYSIZE(szSpec), ppszCmd[1]);
PathUnquoteSpacesW(szSpec);
hr = szSpec[0] ? S_OK : E_FAIL; // Protect against empty data
if (SUCCEEDED(hr))
{
hr = SHCreateItemFromParsingName(szSpec, NULL, riid, ppv);
if (FAILED(hr))
{
WCHAR szFolder[MAX_PATH];
GetCurrentDirectoryW(ARRAYSIZE(szFolder), szFolder);
hr = PathAppendW(szFolder, szSpec) ? S_OK : E_FAIL;
if (SUCCEEDED(hr))
{
hr = SHCreateItemFromParsingName(szFolder, NULL, riid, ppv);
}
}
}
}
return hr;
}
HRESULT GetShellItemFromCommandLineAsVariant(VARIANT *pvar)
{
VariantInit(pvar);
IShellItem *psi;
HRESULT hr = GetShellItemFromCommandLine(IID_PPV_ARGS(&psi));
if (SUCCEEDED(hr))
{
hr = InitVariantFromObject(psi, pvar);
psi->Release();
}
return hr;
}
void OpenWindow()
{
IWebBrowser2 *pwb;
HRESULT hr = CoCreateInstance(CLSID_ShellBrowserWindow,
NULL,
CLSCTX_LOCAL_SERVER,
IID_PPV_ARGS(&pwb));
if (SUCCEEDED(hr))
{
CoAllowSetForegroundWindow(pwb, 0);
pwb->put_Left(100);
pwb->put_Top(100);
pwb->put_Height(600);
pwb->put_Width(800);
VARIANT varTarget = {0};
hr = GetShellItemFromCommandLineAsVariant(&varTarget);
if (FAILED(hr))
{
hr = GetKnownFolderAsVariant(FOLDERID_UsersFiles, &varTarget);
}
if (SUCCEEDED(hr))
{
VARIANT vEmpty = {0};
hr = pwb->Navigate2(&varTarget, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
if (SUCCEEDED(hr))
{
pwb->put_Visible(VARIANT_TRUE);
}
VariantClear(&varTarget);
}
pwb->Release();
}
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
CloseExplorerWindows();
OpenWindow();
CoUninitialize();
}
return 0;
}
Area klien Windows Explorer dapat di-host dengan menggunakan antarmuka IExplorerBrowser. Klien Windows Explorer dan kontrol pohon namespace adalah komponen standar Windows Vista dan yang lebih baru. Pengembang dapat menggunakan kembali antarmuka sebagai komponen bangunan. Salah satu penggunaan umum kontrol ini adalah membuat penjelajah yang disesuaikan yang sesuai dengan domain masalah.
Kontrol di Windows Explorer diklasifikasikan ke dalam kategori fungsional berikut:
- Kontrol Navigasi
- Kontrol Perintah
- Kontrol Properti dan Pratinjau
- Pemfilteran dan Tampilan
- Kontrol Tampilan Daftar
Kontrol Navigasi
Kontrol navigasi membantu pengguna dalam menentukan konteks dan menavigasi ruang domain logis terkait, yang disebut ruang halaman. Misalnya, pagespace untuk Windows Explorer adalah namespace Shell. Ruang halaman terdiri dari nol halaman atau lebih.
Tabel berikut ini mencantumkan dan menjelaskan kontrol navigasi yang tersedia di Windows Explorer di Windows Vista dan sistem operasi yang lebih baru.
| Kontrol navigasi | Deskripsi |
|---|---|
| Bilah Alamat (Kontrol Jalur Navigasi) | Menampilkan alamat halaman saat ini di dalam ruang halaman. Tombol breadcrumb dapat diklik untuk menavigasi ke leluhur apa pun di ruang halaman. Pengguna juga dapat mengetik URL dan jalur untuk menavigasi. |
| Struktur Folder | Menyediakan versi baru dari kontrol pohon, yang dioptimalkan untuk halaman berukuran besar. |
| Perjalanan | Mengaktifkan navigasi relatif melalui tombol gaya web seperti Kembali dan Maju. |
| Titel | Menampilkan nama dan konteks penjelajah saat ini. |
| Ruang halaman | Menampilkan cabang ruang halaman saat ini. Halaman dapat diurutkan berdasarkan kriteria yang berbeda. Pengguna dapat mengklik halaman untuk menavigasi ke halaman tersebut. |
Kontrol Perintah
Kontrol perintah mengiklankan fitur dan fungsionalitas Windows Explorer kepada pengguna. Kontrol ini melakukan tindakan umum atau tindakan khusus untuk satu item atau item yang dipilih.
| Kontrol perintah | Deskripsi |
|---|---|
| Bilah alat | Menampilkan tombol untuk perintah yang umum digunakan (versi baru toolbar perintah). Opsi kustomisasi mencakup tombol drop-down, tombol pisahkan, teks deskriptif opsional, dan area luapan. |
| Pahlawan | Muncul sebagai kontrol kustom tunggal opsional di tengah toolbar. Ini mewakili perintah utama untuk konteks saat ini. |
| Bilah Menu | Menyajikan perintah melalui menu. |
| Menu Konteks | Mencantumkan subset perintah yang tersedia yang relevan secara kontekstual yang ditampilkan sebagai hasil dari mengklik kanan item. |
Kontrol Properti dan Pratinjau
Kontrol properti dan pratinjau digunakan untuk mempratinjau item, dan untuk melihat dan mengedit properti item.
| Kendali | Deskripsi |
|---|---|
| Pratinjau | Menampilkan pratinjau item terpilih, seperti gambar mini atau Ikon Langsung. |
| Properti | Menampilkan properti dari item terpilih. Untuk beberapa pilihan, ini menampilkan ringkasan properti untuk grup item yang dipilih. Untuk pilihan null, ini menampilkan ringkasan properti untuk halaman saat ini (konten tampilan daftar). |
Pemfilteran dan Kontrol Tampilan
Kontrol pemfilteran dan tampilan digunakan untuk memanipulasi kumpulan item dalam tampilan daftar dan untuk mengubah presentasi item dalam tampilan daftar.
| Kendali | Deskripsi |
|---|---|
| Saringan | Memfilter atau menyusun item dalam tampilan daftar berdasarkan properti yang tercantum sebagai kolom. Mengklik kolom yang diurutkan menurut properti tersebut. |
| Wordwheel | Secara dinamis dan bertahap memfilter item yang ditampilkan dalam tampilan daftar berdasarkan string teks input. |
| Lihat | Memungkinkan pengguna mengubah mode tampilan kontrol tampilan daftar. Penggiser dapat digunakan untuk menentukan ukuran ikon. |
Kontrol Tampilan Daftar
Kontrol tampilan daftar digunakan untuk melihat sekumpulan item dalam salah satu dari empat mode tampilan: detail, petak peta, ikon, atau panorama. Kontrol tampilan daftar juga memungkinkan pengguna untuk memilih dan mengaktifkan satu atau beberapa item.
Peringatan
Meskipun beberapa kontrol ini memiliki nama dan/atau fungsionalitas yang mirip dengan kontrol Windows Presentation Foundation (WPF) standar yang ditemukan di namespace System.Windows.Controls, kontrol tersebut adalah kelas yang berbeda.
Kontrol terpisah ini sebagian besar bekerja sama melalui peristiwa yang dihasilkan baik oleh interaksi pengguna atau oleh kontrol itu sendiri. Tabel berikut ini memperlihatkan tiga kategori peristiwa utama.
| Kategori peristiwa | Contoh |
|---|---|
| Navigasi | Dari satu halaman ke halaman lainnya. |
| Pilihan | Mengubah pilihan saat ini dalam tampilan daftar. |
| Tampilkan Perubahan | Mengubah urutan presentasi atau mode tampilan dalam tampilan daftar. |