135c4bbdfSmrg/* 235c4bbdfSmrg * Copyright (C) 2011 Tobias Häußler 335c4bbdfSmrg * 435c4bbdfSmrg * Permission is hereby granted, free of charge, to any person obtaining a 535c4bbdfSmrg * copy of this software and associated documentation files (the "Software"), 635c4bbdfSmrg * to deal in the Software without restriction, including without limitation 735c4bbdfSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 835c4bbdfSmrg * and/or sell copies of the Software, and to permit persons to whom the 935c4bbdfSmrg * Software is furnished to do so, subject to the following conditions: 1035c4bbdfSmrg * 1135c4bbdfSmrg * The above copyright notice and this permission notice (including the next 1235c4bbdfSmrg * paragraph) shall be included in all copies or substantial portions of the 1335c4bbdfSmrg * Software. 1435c4bbdfSmrg * 1535c4bbdfSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1635c4bbdfSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1735c4bbdfSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1835c4bbdfSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1935c4bbdfSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2035c4bbdfSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2135c4bbdfSmrg * DEALINGS IN THE SOFTWARE. 2235c4bbdfSmrg */ 2335c4bbdfSmrg 2435c4bbdfSmrg#ifndef PROPERTYSTORE_H 2535c4bbdfSmrg#define PROPERTYSTORE_H 2635c4bbdfSmrg 2735c4bbdfSmrg#include <windows.h> 2835c4bbdfSmrg 2935c4bbdfSmrg#ifdef __MINGW64_VERSION_MAJOR 3035c4bbdfSmrg/* If we are using headers from mingw-w64 project, it provides the PSDK headers this needs ... */ 3135c4bbdfSmrg#include <propkey.h> 3235c4bbdfSmrg#include <propsys.h> 3335c4bbdfSmrg#else /* !__MINGW64_VERSION_MAJOR */ 3435c4bbdfSmrg/* ... otherwise, we need to define all this stuff ourselves */ 3535c4bbdfSmrg 3635c4bbdfSmrgtypedef struct _tagpropertykey { 3735c4bbdfSmrg GUID fmtid; 3835c4bbdfSmrg DWORD pid; 3935c4bbdfSmrg} PROPERTYKEY; 4035c4bbdfSmrg 4135c4bbdfSmrg#define REFPROPERTYKEY const PROPERTYKEY * 4235c4bbdfSmrg#define REFPROPVARIANT const PROPVARIANT * 4335c4bbdfSmrg 4435c4bbdfSmrgWINOLEAPI PropVariantClear(PROPVARIANT *pvar); 4535c4bbdfSmrg 4635c4bbdfSmrg#ifdef INTERFACE 4735c4bbdfSmrg#undef INTERFACE 4835c4bbdfSmrg#endif 4935c4bbdfSmrg 5035c4bbdfSmrg#define INTERFACE IPropertyStore 5135c4bbdfSmrgDECLARE_INTERFACE_(IPropertyStore, IUnknown) 5235c4bbdfSmrg{ 5335c4bbdfSmrg STDMETHOD(QueryInterface) (THIS_ REFIID, PVOID *) PURE; 5435c4bbdfSmrg STDMETHOD_(ULONG, AddRef) (THIS) PURE; 5535c4bbdfSmrg STDMETHOD_(ULONG, Release) (THIS) PURE; 5635c4bbdfSmrg STDMETHOD(GetCount) (THIS_ DWORD) PURE; 5735c4bbdfSmrg STDMETHOD(GetAt) (THIS_ DWORD, PROPERTYKEY) PURE; 5835c4bbdfSmrg STDMETHOD(GetValue) (THIS_ REFPROPERTYKEY, PROPVARIANT) PURE; 5935c4bbdfSmrg STDMETHOD(SetValue) (THIS_ REFPROPERTYKEY, REFPROPVARIANT) PURE; 6035c4bbdfSmrg STDMETHOD(Commit) (THIS) PURE; 6135c4bbdfSmrg}; 6235c4bbdfSmrg 6335c4bbdfSmrg#undef INTERFACE 6435c4bbdfSmrgtypedef IPropertyStore *LPPROPERTYSTORE; 6535c4bbdfSmrg 6635c4bbdfSmrgDEFINE_GUID(IID_IPropertyStore, 0x886d8eeb, 0x8cf2, 0x4446, 0x8d, 0x02, 0xcd, 6735c4bbdfSmrg 0xba, 0x1d, 0xbd, 0xcf, 0x99); 6835c4bbdfSmrg 6935c4bbdfSmrg#ifdef INITGUID 7035c4bbdfSmrg#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) GUID_EXT const PROPERTYKEY DECLSPEC_SELECTANY name = { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid } 7135c4bbdfSmrg#else 7235c4bbdfSmrg#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) GUID_EXT const PROPERTYKEY name 7335c4bbdfSmrg#endif 7435c4bbdfSmrg 7535c4bbdfSmrgDEFINE_PROPERTYKEY(PKEY_AppUserModel_ID, 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 7635c4bbdfSmrg 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 5); 7735c4bbdfSmrg 7835c4bbdfSmrg#endif /* !__MINGW64_VERSION_MAJOR */ 7935c4bbdfSmrg 8035c4bbdfSmrgtypedef HRESULT(__stdcall * SHGETPROPERTYSTOREFORWINDOWPROC) (HWND, REFIID, 8135c4bbdfSmrg void **); 8235c4bbdfSmrg 8335c4bbdfSmrg#endif 84