shell32: Implement SHCreateQueryCancelAutoPlayMoniker() with some tests.
This commit is contained in:
parent
6fa197f537
commit
3cd677958c
@ -334,6 +334,7 @@
|
|||||||
@ stdcall SHBrowseForFolderW(ptr)
|
@ stdcall SHBrowseForFolderW(ptr)
|
||||||
@ stdcall SHChangeNotify (long long ptr ptr)
|
@ stdcall SHChangeNotify (long long ptr ptr)
|
||||||
@ stub SHChangeNotifySuspendResume
|
@ stub SHChangeNotifySuspendResume
|
||||||
|
@ stdcall SHCreateQueryCancelAutoPlayMoniker(ptr)
|
||||||
@ stdcall SHCreateDefaultContextMenu(ptr ptr ptr)
|
@ stdcall SHCreateDefaultContextMenu(ptr ptr ptr)
|
||||||
@ stdcall SHCreateDirectoryExA(long str ptr)
|
@ stdcall SHCreateDirectoryExA(long str ptr)
|
||||||
@ stdcall SHCreateDirectoryExW(long wstr ptr)
|
@ stdcall SHCreateDirectoryExW(long wstr ptr)
|
||||||
|
@ -794,3 +794,14 @@ HRESULT WINAPI SHPropStgWriteMultiple(IPropertyStorage *pps, UINT *uCodePage,
|
|||||||
hres = IPropertyStorage_WriteMultiple(pps, cpspec, rgpspec, rgvar, propidNameFirst);
|
hres = IPropertyStorage_WriteMultiple(pps, cpspec, rgpspec, rgvar, propidNameFirst);
|
||||||
return hres;
|
return hres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* SHCreateQueryCancelAutoPlayMoniker [SHELL32.@]
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI SHCreateQueryCancelAutoPlayMoniker(IMoniker **moniker)
|
||||||
|
{
|
||||||
|
TRACE("%p\n", moniker);
|
||||||
|
|
||||||
|
if (!moniker) return E_INVALIDARG;
|
||||||
|
return CreateClassMoniker(&CLSID_QueryCancelAutoPlay, moniker);
|
||||||
|
}
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
DEFINE_GUID(FMTID_Test,0x12345678,0x1234,0x1234,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12);
|
DEFINE_GUID(FMTID_Test,0x12345678,0x1234,0x1234,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12);
|
||||||
DEFINE_GUID(FMTID_NotExisting, 0x12345678,0x1234,0x1234,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13);
|
DEFINE_GUID(FMTID_NotExisting, 0x12345678,0x1234,0x1234,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x13);
|
||||||
|
DEFINE_GUID(CLSID_ClassMoniker, 0x0000031a,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
|
||||||
|
|
||||||
#define DEFINE_EXPECT(func) \
|
#define DEFINE_EXPECT(func) \
|
||||||
static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
|
static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
|
||||||
@ -63,12 +64,28 @@ DEFINE_EXPECT(Release);
|
|||||||
DEFINE_EXPECT(Stat);
|
DEFINE_EXPECT(Stat);
|
||||||
DEFINE_EXPECT(WriteMultiple);
|
DEFINE_EXPECT(WriteMultiple);
|
||||||
|
|
||||||
|
DEFINE_EXPECT(autoplay_BindToObject);
|
||||||
|
DEFINE_EXPECT(autoplay_GetClassObject);
|
||||||
|
|
||||||
static HRESULT (WINAPI *pSHPropStgCreate)(IPropertySetStorage*, REFFMTID, const CLSID*,
|
static HRESULT (WINAPI *pSHPropStgCreate)(IPropertySetStorage*, REFFMTID, const CLSID*,
|
||||||
DWORD, DWORD, DWORD, IPropertyStorage**, UINT*);
|
DWORD, DWORD, DWORD, IPropertyStorage**, UINT*);
|
||||||
static HRESULT (WINAPI *pSHPropStgReadMultiple)(IPropertyStorage*, UINT,
|
static HRESULT (WINAPI *pSHPropStgReadMultiple)(IPropertyStorage*, UINT,
|
||||||
ULONG, const PROPSPEC*, PROPVARIANT*);
|
ULONG, const PROPSPEC*, PROPVARIANT*);
|
||||||
static HRESULT (WINAPI *pSHPropStgWriteMultiple)(IPropertyStorage*, UINT*,
|
static HRESULT (WINAPI *pSHPropStgWriteMultiple)(IPropertyStorage*, UINT*,
|
||||||
ULONG, const PROPSPEC*, PROPVARIANT*, PROPID);
|
ULONG, const PROPSPEC*, PROPVARIANT*, PROPID);
|
||||||
|
static HRESULT (WINAPI *pSHCreateQueryCancelAutoPlayMoniker)(IMoniker**);
|
||||||
|
|
||||||
|
static const char *debugstr_guid(REFIID riid)
|
||||||
|
{
|
||||||
|
static char buf[50];
|
||||||
|
|
||||||
|
sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
|
||||||
|
riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
|
||||||
|
riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
|
||||||
|
riid->Data4[5], riid->Data4[6], riid->Data4[7]);
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
static void init(void)
|
static void init(void)
|
||||||
{
|
{
|
||||||
@ -77,6 +94,7 @@ static void init(void)
|
|||||||
pSHPropStgCreate = (void*)GetProcAddress(hmod, "SHPropStgCreate");
|
pSHPropStgCreate = (void*)GetProcAddress(hmod, "SHPropStgCreate");
|
||||||
pSHPropStgReadMultiple = (void*)GetProcAddress(hmod, "SHPropStgReadMultiple");
|
pSHPropStgReadMultiple = (void*)GetProcAddress(hmod, "SHPropStgReadMultiple");
|
||||||
pSHPropStgWriteMultiple = (void*)GetProcAddress(hmod, "SHPropStgWriteMultiple");
|
pSHPropStgWriteMultiple = (void*)GetProcAddress(hmod, "SHPropStgWriteMultiple");
|
||||||
|
pSHCreateQueryCancelAutoPlayMoniker = (void*)GetProcAddress(hmod, "SHCreateQueryCancelAutoPlayMoniker");
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI PropertyStorage_QueryInterface(IPropertyStorage *This,
|
static HRESULT WINAPI PropertyStorage_QueryInterface(IPropertyStorage *This,
|
||||||
@ -429,9 +447,317 @@ static void test_SHPropStg_functions(void)
|
|||||||
CHECK_CALLED(Stat);
|
CHECK_CALLED(Stat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_activator_QI(IClassActivator *iface, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
*ppv = NULL;
|
||||||
|
|
||||||
|
if (IsEqualIID(riid, &IID_IUnknown) ||
|
||||||
|
IsEqualIID(riid, &IID_IClassActivator))
|
||||||
|
{
|
||||||
|
*ppv = iface;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!*ppv) return E_NOINTERFACE;
|
||||||
|
|
||||||
|
IClassActivator_AddRef(iface);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI test_activator_AddRef(IClassActivator *iface)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI test_activator_Release(IClassActivator *iface)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_activator_GetClassObject(IClassActivator *iface, REFCLSID clsid,
|
||||||
|
DWORD context, LCID locale, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
CHECK_EXPECT(autoplay_GetClassObject);
|
||||||
|
ok(IsEqualGUID(clsid, &CLSID_QueryCancelAutoPlay), "clsid %s\n", debugstr_guid(clsid));
|
||||||
|
ok(IsEqualIID(riid, &IID_IQueryCancelAutoPlay), "riid %s\n", debugstr_guid(riid));
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IClassActivatorVtbl test_activator_vtbl = {
|
||||||
|
test_activator_QI,
|
||||||
|
test_activator_AddRef,
|
||||||
|
test_activator_Release,
|
||||||
|
test_activator_GetClassObject
|
||||||
|
};
|
||||||
|
|
||||||
|
static IClassActivator test_activator = { &test_activator_vtbl };
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_QueryInterface(IMoniker* iface, REFIID riid, void **ppvObject)
|
||||||
|
{
|
||||||
|
*ppvObject = 0;
|
||||||
|
|
||||||
|
if (IsEqualIID(&IID_IUnknown, riid) ||
|
||||||
|
IsEqualIID(&IID_IPersist, riid) ||
|
||||||
|
IsEqualIID(&IID_IPersistStream, riid) ||
|
||||||
|
IsEqualIID(&IID_IMoniker, riid))
|
||||||
|
{
|
||||||
|
*ppvObject = iface;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!*ppvObject)
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI test_moniker_AddRef(IMoniker* iface)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI test_moniker_Release(IMoniker* iface)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_GetClassID(IMoniker* iface, CLSID *pClassID)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_IsDirty(IMoniker* iface)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_Load(IMoniker* iface, IStream* pStm)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_GetSizeMax(IMoniker* iface, ULARGE_INTEGER* pcbSize)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_BindToObject(IMoniker* iface,
|
||||||
|
IBindCtx* pbc,
|
||||||
|
IMoniker* moniker_to_left,
|
||||||
|
REFIID riid,
|
||||||
|
void** ppv)
|
||||||
|
{
|
||||||
|
CHECK_EXPECT(autoplay_BindToObject);
|
||||||
|
ok(pbc != NULL, "got %p\n", pbc);
|
||||||
|
ok(moniker_to_left == NULL, "got %p\n", moniker_to_left);
|
||||||
|
ok(IsEqualIID(riid, &IID_IClassActivator), "got riid %s\n", debugstr_guid(riid));
|
||||||
|
|
||||||
|
if (IsEqualIID(riid, &IID_IClassActivator))
|
||||||
|
{
|
||||||
|
*ppv = &test_activator;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_BindToStorage(IMoniker* iface,
|
||||||
|
IBindCtx* pbc,
|
||||||
|
IMoniker* pmkToLeft,
|
||||||
|
REFIID riid,
|
||||||
|
VOID** ppvResult)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_Reduce(IMoniker* iface,
|
||||||
|
IBindCtx* pbc,
|
||||||
|
DWORD dwReduceHowFar,
|
||||||
|
IMoniker** ppmkToLeft,
|
||||||
|
IMoniker** ppmkReduced)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_ComposeWith(IMoniker* iface,
|
||||||
|
IMoniker* pmkRight,
|
||||||
|
BOOL fOnlyIfNotGeneric,
|
||||||
|
IMoniker** ppmkComposite)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoniker)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_IsEqual(IMoniker* iface, IMoniker* pmkOtherMoniker)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_Hash(IMoniker* iface, DWORD* pdwHash)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_IsRunning(IMoniker* iface,
|
||||||
|
IBindCtx* pbc,
|
||||||
|
IMoniker* pmkToLeft,
|
||||||
|
IMoniker* pmkNewlyRunning)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_GetTimeOfLastChange(IMoniker* iface,
|
||||||
|
IBindCtx* pbc,
|
||||||
|
IMoniker* pmkToLeft,
|
||||||
|
FILETIME* pItemTime)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_Inverse(IMoniker* iface, IMoniker** ppmk)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther,IMoniker** ppmkPrefix)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppmkRelPath)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_GetDisplayName(IMoniker* iface,
|
||||||
|
IBindCtx* pbc,
|
||||||
|
IMoniker* pmkToLeft,
|
||||||
|
LPOLESTR *ppszDisplayName)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_ParseDisplayName(IMoniker* iface,
|
||||||
|
IBindCtx* pbc,
|
||||||
|
IMoniker* pmkToLeft,
|
||||||
|
LPOLESTR pszDisplayName,
|
||||||
|
ULONG* pchEaten,
|
||||||
|
IMoniker** ppmkOut)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI test_moniker_IsSystemMoniker(IMoniker* iface,DWORD* pwdMksys)
|
||||||
|
{
|
||||||
|
ok(0, "unexpected call\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IMonikerVtbl test_moniker_vtbl =
|
||||||
|
{
|
||||||
|
test_moniker_QueryInterface,
|
||||||
|
test_moniker_AddRef,
|
||||||
|
test_moniker_Release,
|
||||||
|
test_moniker_GetClassID,
|
||||||
|
test_moniker_IsDirty,
|
||||||
|
test_moniker_Load,
|
||||||
|
test_moniker_Save,
|
||||||
|
test_moniker_GetSizeMax,
|
||||||
|
test_moniker_BindToObject,
|
||||||
|
test_moniker_BindToStorage,
|
||||||
|
test_moniker_Reduce,
|
||||||
|
test_moniker_ComposeWith,
|
||||||
|
test_moniker_Enum,
|
||||||
|
test_moniker_IsEqual,
|
||||||
|
test_moniker_Hash,
|
||||||
|
test_moniker_IsRunning,
|
||||||
|
test_moniker_GetTimeOfLastChange,
|
||||||
|
test_moniker_Inverse,
|
||||||
|
test_moniker_CommonPrefixWith,
|
||||||
|
test_moniker_RelativePathTo,
|
||||||
|
test_moniker_GetDisplayName,
|
||||||
|
test_moniker_ParseDisplayName,
|
||||||
|
test_moniker_IsSystemMoniker
|
||||||
|
};
|
||||||
|
|
||||||
|
static IMoniker test_moniker = { &test_moniker_vtbl };
|
||||||
|
|
||||||
|
static void test_SHCreateQueryCancelAutoPlayMoniker(void)
|
||||||
|
{
|
||||||
|
IBindCtx *ctxt;
|
||||||
|
IMoniker *mon;
|
||||||
|
IUnknown *unk;
|
||||||
|
CLSID clsid;
|
||||||
|
HRESULT hr;
|
||||||
|
DWORD sys;
|
||||||
|
|
||||||
|
if (!pSHCreateQueryCancelAutoPlayMoniker)
|
||||||
|
{
|
||||||
|
win_skip("SHCreateQueryCancelAutoPlayMoniker is not available, skipping tests.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = pSHCreateQueryCancelAutoPlayMoniker(NULL);
|
||||||
|
ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = pSHCreateQueryCancelAutoPlayMoniker(&mon);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
sys = -1;
|
||||||
|
hr = IMoniker_IsSystemMoniker(mon, &sys);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(sys == MKSYS_CLASSMONIKER, "got %d\n", sys);
|
||||||
|
|
||||||
|
memset(&clsid, 0, sizeof(clsid));
|
||||||
|
hr = IMoniker_GetClassID(mon, &clsid);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(IsEqualGUID(&clsid, &CLSID_ClassMoniker), "got %s\n", debugstr_guid(&clsid));
|
||||||
|
|
||||||
|
/* extract used CLSID that implements this hook */
|
||||||
|
SET_EXPECT(autoplay_BindToObject);
|
||||||
|
SET_EXPECT(autoplay_GetClassObject);
|
||||||
|
|
||||||
|
CreateBindCtx(0, &ctxt);
|
||||||
|
hr = IMoniker_BindToObject(mon, ctxt, &test_moniker, &IID_IQueryCancelAutoPlay, (void**)&unk);
|
||||||
|
ok(hr == E_NOTIMPL, "got 0x%08x\n", hr);
|
||||||
|
IBindCtx_Release(ctxt);
|
||||||
|
|
||||||
|
CHECK_CALLED(autoplay_BindToObject);
|
||||||
|
CHECK_CALLED(autoplay_GetClassObject);
|
||||||
|
|
||||||
|
IMoniker_Release(mon);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(shellole)
|
START_TEST(shellole)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
|
|
||||||
test_SHPropStg_functions();
|
test_SHPropStg_functions();
|
||||||
|
test_SHCreateQueryCancelAutoPlayMoniker();
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ LPVOID WINAPI SHAlloc(ULONG) __WINE_ALLOC_SIZE(1);
|
|||||||
HRESULT WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*);
|
HRESULT WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*);
|
||||||
HPSXA WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT);
|
HPSXA WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT);
|
||||||
HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
|
HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
|
||||||
|
HRESULT WINAPI SHCreateQueryCancelAutoPlayMoniker(IMoniker**);
|
||||||
HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
|
HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
|
||||||
DWORD WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*);
|
DWORD WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*);
|
||||||
DWORD WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*);
|
DWORD WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user