Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygulamanız bir dosya nesnesi konumlandırdıktan sonra, bir sonraki adım genellikle bu nesne üzerinde bir şekilde işlem yapmaktır. Örneğin, uygulamanız kullanıcının bir veri dosyasını değiştirmesine izin veren başka bir uygulama başlatmak isteyebilir. İlgilenen dosya yürütülebilir bir dosyaysa uygulamanız dosyayı başlatmak isteyebilir. Bu belgede, bu görevleri gerçekleştirmek için ShellExecute veya ShellExecuteEx nasıl kullanılacağı açıklanır.
- ShellExecute ve ShellExecuteEx Kullanarak
- ShellExecuteEx Kullanımına Basit Bir Örnek
ShellExecute ve ShellExecuteEx Kullanma
ShellExecute veya ShellExecuteEx kullanmak için, uygulamanızın üzerinde işlem yapılacak dosya veya klasör nesnesini ve işlemi belirten bir verb belirtmesi gerekir. ShellExecuteiçin bu değerleri uygun parametrelere atayın. ShellExecuteExiçin, SHELLEXECUTEINFO yapısının uygun üyelerini doldurun. Ayrıca, iki işlevin davranışında ince ayar yapmak için kullanılabilecek birkaç başka üye veya parametre de vardır.
Dosya ve klasör nesneleri dosya sisteminin veya sanal nesnelerin bir parçası olabilir ve öğe tanımlayıcı listelerinin (PIDL' ler) yolları veya işaretçileri tarafından tanımlanabilir.
Nesne Fiilleri
Bir nesne için kullanılabilen fiiller temelde nesnenin kısayol menüsünde bulduğunuz öğelerdir. Hangi fiillerin kullanılabilir olduğunu bulmak için, kayıt defterinin altına bakın.
HKEY_CLASSES_ROOT\CLSID\{object_clsid}\Shell\verb
burada object_clsid nesnenin sınıf tanımlayıcısı (CLSID) ve verb kullanılabilir verböğesinin adıdır. verb \ Komut alt anahtarı, çağrıldığında verb ne olacağını gösteren verileri içerir.
Önceden tanımlanmış Shell nesneler için hangi fiillerin kullanılabilir olduğunu öğrenmek için kayıt defteri altında bakın.
\ HKEY_CLASSES_ROOTobject_name\shell\verb
burada object_name önceden tanımlanmış Shell nesnenin adıdır. Komut alt anahtarı, verb\ çağrıldığında verb ne olacağını gösteren verileri de içerir.
Yaygın olarak kullanılabilen fiiller şunlardır:
| Verb | Açıklama |
|---|---|
| edit | Bir düzenleyici başlatır ve belgeyi düzenlemek üzere açar. |
| find | Belirtilen dizinden başlayarak bir arama başlatır. |
| open | Bir uygulama başlatır. Bu dosya yürütülebilir bir dosya değilse, ilişkili uygulaması başlatılır. |
| Belge dosyasını yazdırır. | |
| properties | Nesnenin özelliklerini görüntüler. |
| runas | Bir uygulamayı Yönetici olarak başlatır. Kullanıcı Hesabı Denetimi (UAC), kullanıcıdan uygulamayı yükseltilmiş olarak çalıştırmak için onay ister veya uygulamayı çalıştırmak için kullanılan yönetici hesabının kimlik bilgilerini girer. |
Her verb bir komut, uygulamayı bir konsol penceresinden başlatmak için kullanılacak komuta karşılık gelir. open verb yaygın olarak desteklendiği için iyi bir örnektir. .exe dosyaları için uygulamayı open başlatmanız yeterlidir. Ancak, daha yaygın olarak belirli bir dosya üzerinde çalışan bir uygulamayı başlatmak için kullanılır. Örneğin, .txt dosyaları Microsoft WordPad tarafından açılabilir. open verb Bu nedenle, .txt dosyası için aşağıdaki komut gibi bir şeye karşılık gelir:
"C:\Program Files\Windows NT\Accessories\Wordpad.exe" "%1"
bir .txt dosyasını açmak için ShellExecute veya ShellExecuteEx kullandığınızda, Wordpad.exe bağımsız değişkeni olarak belirtilen dosyayla başlatılır. Bazı komutların, uygulamayı düzgün başlatmak için gerektiğinde eklenebilen bayraklar gibi ek bağımsız değişkenleri olabilir. Kısayol menüleri ve fiilleri hakkında daha fazla bilgi için bkz. Kısayol Menülerini Genişletme.
Genel olarak, belirli bir dosya için kullanılabilir fiillerin listesini belirlemeye çalışmak biraz karmaşıktır. Çoğu durumda, lpVerb parametresini, dosya türü için varsayılan komutu çağıran null olarak ayarlayabilirsiniz. Bu yordam genellikle lpVerb değerini "open" olarak ayarlamakla eşdeğerdir, ancak bazı dosya türlerinin farklı bir varsayılan komutu olabilir. Daha fazla bilgi için Kısayol Menülerini Genişletme ve ShellExecuteEx başvuru belgelerine bakın.
Bir Siteden Etkinleştirme Hizmetleri Sağlamak için ShellExecuteEx Kullanma
Site zincirinin hizmetleri, öğe etkinleştirmenin birçok davranışını denetleyebilir. Windows 8 itibarıyla, bu davranışları etkinleştirmek için ShellExecuteExsite zincirine bir işaretçi sağlayabilirsiniz. Siteyi ShellExecuteExsağlamak için:
- fMask üyesinde SEE_MASK_FLAG_HINST_IS_SITE bayrağını belirtin SHELLEXECUTEINFO.
- IUnknown, SHELLEXECUTEINFOhInstApp üyesinde belirtin.
Arama İletişim Kutusunu Başlatmak için ShellExecute Kullanma
Kullanıcı Windows Gezgini'nde bir klasör simgesine sağ tıkladığında, menü öğelerinden biri "Ara"dır. Bu öğeyi seçerse Arama Shell yardımcı programı başlatılır. Bu yardımcı program, belirtilen bir metin dizesi için dosya aramak için kullanılabilecek bir iletişim kutusu görüntüler. Uygulama, ShellExecute çağrısı yaparak bir dizin için Arama yardımcı programını programatik olarak başlatabilir; "find" ise lpVerb parametresi ve dizin yolu lpFile parametresi olarak belirtilir. Örneğin, aşağıdaki kod satırı c:\MyPrograms dizini için Search yardımcı programını başlatır.
ShellExecute(hwnd, "find", "c:\\MyPrograms", NULL, NULL, 0);
ShellExecuteEx'in Kullanımına Basit Bir Örnek
Aşağıdaki örnek konsol uygulaması, ShellExecuteExkullanımını gösterir. Netlik için çoğu hata denetimi kodu atlandı.
#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;
}
Uygulama ilk olarak Windows dizininin PIDL'sini alır ve ilk .bmp dosyasını bulana kadar içeriğini numaralandırır. Önceki örnekten farklı olarak, IShellFolder::GetDisplayNameOf, dosyanın görünen adı yerine ayrıştırma adını almak için kullanılır. Bu bir dosya sistemi klasörü olduğundan, ayrıştırma adı tam nitelikli yoldur. Bu, ShellExecuteExiçin gereken yoldur.
İlk .bmp dosyası bulunduktan sonra, SHELLEXECUTEINFO yapısının üyelerine uygun değerler atanır. lpFile üyesi dosyanın ayrıştırma adına, lpVerb üyesi de varsayılan işlemi başlatmak için NULLolarak ayarlanır. Bu durumda, varsayılan işlem "open" olur. Daha sonra yapısı ShellExecuteEx'e geçirilir ve bu da genellikle MSPaint.exebit eşlem dosyaları için varsayılan işleyiciyi dosyaya open başlatır. İşlev döndürdükten sonra PIDL'ler serbest bırakılır ve Windows klasörünün IShellFolder arabirimi serbest bırakılır.