windows-nt/Source/XPSP1/NT/shell/ext/media/test/proptest.cpp
2020-09-26 16:20:57 +08:00

92 lines
2.9 KiB
C++

#include "pch.h"
#include <stdio.h>
void FillPropSet(IPersistFile *pfile, char *filename)
{
WCHAR wszbuffer[MAX_PATH];
WIN32_FIND_DATAA findinfo;
HANDLE hFile = FindFirstFileA(filename, &findinfo);
if (hFile != INVALID_HANDLE_VALUE)
{
MultiByteToWideChar(CP_ACP, 0, findinfo.cFileName, -1, wszbuffer, MAX_PATH);
pfile->Load(wszbuffer, STGM_READ);
FindClose(hFile);
}
}
void PlayWithPropertySetStorage(IPropertySetStorage *ppss)
{
IEnumSTATPROPSETSTG *penum;
char buffer[MAX_PATH];
if (SUCCEEDED(ppss->Enum(&penum)))
{
STATPROPSETSTG statpss;
IPropertyStorage *pps;
int i=0;
while (penum->Next(1, &statpss, NULL) == S_OK)
{
printf("Property Storage %i:\n", ++i);
if (SUCCEEDED(ppss->Open(statpss.fmtid,
STGM_DIRECT|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &pps)))
{
PROPSPEC spec;
PROPVARIANT pvar;
STATPROPSTG statps;
IEnumSTATPROPSTG *penumprop;
if (SUCCEEDED(pps->Enum(&penumprop)))
{
while (penumprop->Next(1, &statps, NULL)== S_OK)
{
spec.lpwstr = statps.lpwstrName;
spec.propid = statps.propid;
spec.ulKind = PRSPEC_PROPID;
if (pps->ReadMultiple(1, &spec, &pvar) == S_OK)
{
if (spec.ulKind == PRSPEC_LPWSTR)
WideCharToMultiByte(CP_ACP, 0, spec.lpwstr, -1, buffer, MAX_PATH, NULL, NULL);
else
buffer[0] = 0;
printf(" prop %i (%s) = \"??\"\n", spec.propid, buffer);
}
}//While
penumprop->Release();
}
pps->Release();
}//While
}
penum->Release();
}
}
EXTERN_C int __cdecl main(int argc, char **argv)
{
if (SUCCEEDED(CoInitialize(0)))
{
HRESULT hr;
IPropertySetStorage *ppss;
hr = CoCreateInstance(CLSID_MediaProperties, 0, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IPropertySetStorage, &ppss));
if (SUCCEEDED(hr))
{
printf(("CoCreated the Storage\n"));
if(argc>1)
{
IPersistFile *pfile;
if (SUCCEEDED(ppss->QueryInterface(IID_PPV_ARG(IPersistFile, &pfile))))
{
FillPropSet(pfile, argv[1]);
pfile->Release();
}
}
PlayWithPropertySetStorage(ppss);
ppss->Release();
}
else
printf(("Failed to CoCreate the Storage: hr = %8x\n"), hr);
CoUninitialize();
}
return 0;
}