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