Bagikan melalui


Meluncurkan Aplikasi (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)

Setelah aplikasi Anda menemukan objek file, langkah selanjutnya adalah sering bertindak di atasnya dalam beberapa cara. Misalnya, aplikasi Anda mungkin ingin meluncurkan aplikasi lain yang memungkinkan pengguna mengubah file data. Jika file yang menarik adalah file yang dapat dieksekusi, aplikasi Anda mungkin hanya ingin meluncurkannya. Dokumen ini membahas cara menggunakan ShellExecute atau ShellExecuteEx untuk melakukan tugas-tugas ini.

Menggunakan ShellExecute dan ShellExecuteEx

Untuk menggunakan ShellExecute atau ShellExecuteEx, aplikasi Anda harus menentukan objek file atau folder yang akan ditindaklanjuti, dan verb yang menentukan operasi. Untuk ShellExecute, tetapkan nilai ini ke parameter yang sesuai. Untuk ShellExecuteEx, isi anggota struktur SHELLEXECUTEINFO yang sesuai. Ada juga beberapa anggota atau parameter lain yang dapat digunakan untuk menyempurnakan perilaku dua fungsi.

Objek file dan folder dapat menjadi bagian dari sistem file atau objek virtual, dan dapat diidentifikasi oleh jalur atau penunjuk ke daftar pengidentifikasi item (PIDL).

Kata Kerja Objek

Kata kerja yang tersedia untuk objek pada dasarnya adalah item yang Anda temukan di menu pintasan objek. Untuk menemukan kata kerja mana yang tersedia, lihat di registri di bawah

\ HKEY_CLASSES_ROOTCLSID\{object_clsid}\Shell\verb

di mana object_clsid adalah pengidentifikasi kelas (CLSID) objek, dan verb merupakan nama yang tersedia verb. Subkunci verb\perintah berisi data yang menunjukkan apa yang terjadi saat verb dipanggil.

Untuk mengetahui kata kerja mana yang tersedia untuk objek yang telah Shell ditentukan sebelumnya, lihat di registri di bawah

\ HKEY_CLASSES_ROOTobject_name\shell\verb

di mana object_name adalah nama objek yang telah Shell ditentukan sebelumnya. Lagi, verb\ subkunci perintah berisi data yang menunjukkan apa yang terjadi ketika verb dipanggil.

Kata kerja yang umum tersedia meliputi:

Verb Deskripsi
edit Meluncurkan editor dan membuka dokumen untuk pengeditan.
find Memulai pencarian mulai dari direktori yang ditentukan.
open Meluncurkan aplikasi. Jika file ini bukan file yang dapat dieksekusi, aplikasi terkait diluncurkan.
print Mencetak dokumen file.
properties Menampilkan properti objek.
runas Meluncurkan aplikasi sebagai Administrator. Kontrol Akun Pengguna (UAC) akan meminta persetujuan kepada pengguna untuk menjalankan aplikasi yang ditinggikan atau memasukkan kredensial akun administrator yang digunakan untuk menjalankan aplikasi.

Masing-masing verb sesuai dengan perintah yang akan digunakan untuk meluncurkan aplikasi dari jendela konsol. open verb adalah contoh yang baik, karena umumnya didukung. Untuk file .exe, open cukup luncurkan aplikasi. Namun, lebih umum digunakan untuk meluncurkan aplikasi yang beroperasi pada file tertentu. Misalnya, file .txt dapat dibuka oleh Microsoft WordPad. Untuk file .txt, openverb dengan demikian akan mirip dengan perintah berikut:

"C:\Program Files\Windows NT\Accessories\Wordpad.exe" "%1"

Saat Anda menggunakan ShellExecute atau ShellExecuteEx untuk membuka file .txt, Wordpad.exe diluncurkan dengan file yang ditentukan sebagai argumennya. Beberapa perintah dapat memiliki argumen tambahan, seperti bendera, yang dapat ditambahkan sesuai kebutuhan untuk meluncurkan aplikasi dengan benar. Untuk diskusi lebih lanjut tentang menu pintasan dan kata kerja, lihat Memperluas Menu Pintasan.

Secara umum, mencoba menentukan daftar kata kerja yang tersedia untuk file tertentu agak rumit. Dalam banyak kasus, Anda cukup mengatur parameter lpVerb ke NULL, yang memanggil perintah default untuk jenis file. Prosedur ini biasanya setara dengan mengatur lpVerb ke "open", tetapi beberapa jenis file mungkin memiliki perintah default yang berbeda. Untuk informasi selengkapnya, lihat Memperluas Menu Pintasan dan dokumentasi referensi ShellExecuteEx .

Menggunakan ShellExecuteEx untuk Menyediakan Layanan Aktivasi dari Situs

Layanan rantai situs dapat mengontrol banyak perilaku aktivasi item. Pada Windows 8, Anda dapat menyediakan penunjuk ke rantai situs ke ShellExecuteEx untuk mengaktifkan perilaku ini. Untuk menyediakan situs ke ShellExecuteEx:

Menggunakan ShellExecute untuk Meluncurkan Kotak Dialog Pencarian

Saat pengguna mengklik kanan ikon folder di Windows Explorer, salah satu item menu adalah "Cari". Jika mereka memilih item tersebut, Shell akan meluncurkan utilitas Pencariannya. Utilitas ini menampilkan kotak dialog yang dapat digunakan untuk mencari file untuk string teks tertentu. Aplikasi dapat secara terprogram meluncurkan utilitas Pencarian untuk direktori dengan memanggil ShellExecute, dengan "find" sebagai parameter lpVerb , dan jalur direktori sebagai parameter lpFile . Misalnya, baris kode berikut meluncurkan utilitas Pencarian untuk direktori c:\MyPrograms.

ShellExecute(hwnd, "find", "c:\\MyPrograms", NULL, NULL, 0);

Contoh Sederhana Tentang Cara Menggunakan ShellExecuteEx

Contoh aplikasi konsol berikut mengilustrasikan penggunaan ShellExecuteEx. Sebagian besar kode pemeriksaan kesalahan telah dihilangkan untuk kejelasan.

#include <shlobj.h>
#include <shlwapi.h>
#include <objbase.h>

main()
{
    LPITEMIDLIST pidlWinFiles = NULL;
    LPITEMIDLIST pidlItems = NULL;
    IShellFolder *psfWinFiles = NULL;
    IShellFolder *psfDeskTop = NULL;
    LPENUMIDLIST ppenum = NULL;
    STRRET strDispName;
    TCHAR pszParseName[MAX_PATH];
    ULONG celtFetched;
    SHELLEXECUTEINFO ShExecInfo;
    HRESULT hr;
    BOOL fBitmap = FALSE;

    hr = SHGetFolderLocation(NULL, CSIDL_WINDOWS, NULL, NULL, &pidlWinFiles);

    hr = SHGetDesktopFolder(&psfDeskTop);

    hr = psfDeskTop->BindToObject(pidlWinFiles, NULL, IID_IShellFolder, (LPVOID *) &psfWinFiles);
    hr = psfDeskTop->Release();

    hr = psfWinFiles->EnumObjects(NULL,SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &ppenum);

    while( hr = ppenum->Next(1,&pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
    {
        psfWinFiles->GetDisplayNameOf(pidlItems, SHGDN_FORPARSING, &strDispName);
        StrRetToBuf(&strDispName, pidlItems, pszParseName, MAX_PATH);
        CoTaskMemFree(pidlItems);
        if(StrCmpI(PathFindExtension(pszParseName), TEXT( ".bmp")) == 0)
        {
            fBitmap = TRUE;
            break;
        }
    }

    ppenum->Release();

    if(fBitmap)
    {
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = NULL;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = NULL;
        ShExecInfo.lpFile = pszParseName;
        ShExecInfo.lpParameters = NULL;
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_MAXIMIZE;
        ShExecInfo.hInstApp = NULL;

        ShellExecuteEx(&ShExecInfo);
    }

    CoTaskMemFree(pidlWinFiles);
    psfWinFiles->Release();

    return 0;
}

Aplikasi ini pertama kali mengambil PIDL direktori Windows, dan menghitung kontennya sampai menemukan file .bmp pertama. Tidak seperti contoh sebelumnya, IShellFolder::GetDisplayNameOf digunakan untuk mengambil nama penguraian file alih-alih nama tampilannya. Karena ini adalah folder sistem file, nama penguraian adalah jalur lengkap yang memenuhi syarat, yang diperlukan untuk ShellExecuteEx.

Setelah file .bmp pertama ditemukan, nilai yang sesuai ditetapkan ke anggota struktur SHELLEXECUTEINFO . Anggota lpFile diatur ke nama file yang diuraikan, dan anggota lpVerb diatur ke NULL, untuk memulai operasi default. Dalam hal ini, operasi default adalah "terbuka". Struktur kemudian diteruskan ke ShellExecuteEx, yang meluncurkan handler default untuk file bitmap, biasanya MSPaint.exe, ke open file. Setelah fungsi kembali, PIDL dibebaskan dan antarmuka IShellFolder folder Windows dirilis.