#include #include #include #include #include #include #pragma comment(lib, "propsys.lib") void DisplayPropDescs(REFPROPERTYKEY propKey) { LPWSTR propGuidString = NULL; StringFromIID(propKey.fmtid, &propGuidString); IPropertyDescription* pDesc = NULL; HRESULT hr = PSGetPropertyDescription(propKey, IID_PPV_ARGS(&pDesc)); if(SUCCEEDED(hr)) { LPWSTR pName = NULL; hr = pDesc->GetCanonicalName(&pName); wprintf(L"%s,%lu = %s\n", propGuidString, propKey.pid, pName); pDesc->Release(); CoTaskMemFree(pName); } else wprintf(L"%s,%lu = Unknown!\n", propGuidString, propKey.pid); CoTaskMemFree(propGuidString); } int main() { HRESULT hr9 = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); SHFILEINFO shi = {0}; LPCWSTR pwszPath = L"C:\\Users\\Adrian\\desktop\\Window Watcher.lnk"; IShellItem2* pItem = NULL; SHCreateItemFromParsingName(pwszPath, NULL, IID_PPV_ARGS(&pItem)); IPropertyStore* pProp = NULL; hr9 = pItem->GetPropertyStore(GPS_DEFAULT, IID_PPV_ARGS(&pProp)); DWORD numProps = 0; hr9 = pProp->GetCount(&numProps); for(DWORD i = 0; i < numProps; ++i) { PROPERTYKEY propKey; hr9 = pProp->GetAt(i, &propKey); DisplayPropDescs(propKey); PROPVARIANT propVar = {0}; hr9 = pProp->GetValue(propKey, &propVar); if(SUCCEEDED(hr9) && V_VT(&propVar) != VT_EMPTY) { LPWSTR pStrValue = NULL; hr9 = PropVariantToStringAlloc(propVar, &pStrValue); wprintf(L"It's value is %s\n", pStrValue); CoTaskMemFree(pStrValue); } else wprintf(L"Has no value!\n"); PropVariantClear(&propVar); } pProp->Release(); pItem->Release(); return 0; }