123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- !ifndef __WIN_PROPKEY__INC
- !define __WIN_PROPKEY__INC
- !verbose push
- !verbose 3
- /**************************************************
- WTypes.h
- **************************************************/
- ;NOTE: This list is incomplete
- !define VT_EMPTY 0
- !define VT_NULL 1
- !define VT_I2 2
- !define VT_I4 3
- !define VT_BSTR 8
- !define VT_BOOL 11
- !define VT_I1 16
- !define VT_UI1 17
- !define VT_UI2 18
- !define VT_UI4 19
- !define VT_I8 20
- !define VT_UI8 21
- !define VT_INT 22
- !define VT_UINT 23
- !define VT_HRESULT 25
- !define VT_PTR 26
- !define VT_SAFEARRAY 27
- !define VT_LPSTR 30 ; SHStrDupA
- !define VT_LPWSTR 31 ; SHStrDupW
- !define VT_FILETIME 64
- !define VT_STREAM 66
- !define VT_CLSID 72 ; Pointer to CoTaskMem allocated GUID
- !define VT_TYPEMASK 0xFFF
- !define VT_VECTOR 0x1000
- !define VT_ARRAY 0x2000
- !define VT_BYREF 0x4000
- !define /ifndef VARIANT_TRUE -1
- !define /ifndef VARIANT_FALSE 0
- !define SYSSIZEOF_PROPERTYKEY 20
- !define SYSSTRUCT_PROPERTYKEY (&g16,&i4) ;System.dll is buggy when it comes to g and forces us to specify the size
- !define STGC_DEFAULT 0
- !define STGC_OVERWRITE 1
- !define STGC_ONLYIFCURRENT 2
- !define STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE 4
- !define STGC_CONSOLIDATE 8
- /**************************************************
- OAIdl.h
- **************************************************/
- !if "${NSIS_PTR_SIZE}" > 4
- !define SYSSIZEOF_VARIANT 24
- !define SYSSTRUCT_VARIANT (&i2,&i6,&i8,&i8)
- !else
- !define SYSSIZEOF_VARIANT 16
- !define SYSSTRUCT_VARIANT (&i2,&i6,&i8)
- !endif
- /**************************************************
- PropIdl.h
- **************************************************/
- !if "${NSIS_PTR_SIZE}" > 4
- !define SYSSIZEOF_PROPVARIANT 24
- !define SYSSTRUCT_PROPVARIANT (&i2,&i6,&i8,&i8)
- !else
- !define SYSSIZEOF_PROPVARIANT 16
- !define SYSSTRUCT_PROPVARIANT (&i2,&i6,&i8)
- !endif
- !define PRSPEC_LPWSTR 0
- !define PRSPEC_PROPID 1
- !define SYSSTRUCT_PROPSPEC (p,p)
- /**************************************************
- Propkey.h
- **************************************************/
- !define PKEY_AppUserModel_RelaunchCommand '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",2' ; VT_LPWSTR (SHGetPropertyStoreForWindow)
- !define PKEY_AppUserModel_RelaunchIconResource '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",3' ; VT_LPWSTR (SHGetPropertyStoreForWindow, optional. Path to icon or module, with resource ID or index.)
- !define PKEY_AppUserModel_RelaunchDisplayNameResource '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",4' ; VT_LPWSTR (SHGetPropertyStoreForWindow. @ style indirect resource string or a plain string.)
- !define PKEY_AppUserModel_ID '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",5' ; VT_LPWSTR
- !define PKEY_AppUserModel_IsDestListSeparator '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",6' ; VT_BOOL
- !define PKEY_AppUserModel_ExcludeFromShowInNewInstall '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",8' ; VT_BOOL
- !define PKEY_AppUserModel_PreventPinning '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",9' ; VT_BOOL
- !define PKEY_AppUserModel_IsDualMode '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",11' ; [Eight+] VT_BOOL
- !define APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL 1
- !define APPUSERMODEL_STARTPINOPTION_USERPINNED 2
- !define PKEY_AppUserModel_StartPinOption '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",12' ; [Eight+] VT_UI4
- !define PKEY_AppUserModel_ToastActivatorCLSID '"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}",26' ; [10FU1507+] VT_CLSID
- !define PKEY_EdgeGesture_DisableTouchWhenFullscreen '"{32CE38B2-2C9A-41B1-9BC5-B3784394AA44}",2' ; [Eight+] VT_BOOL (SHGetPropertyStoreForWindow)
- /**************************************************
- ShlGuid.h & ShlObj.h
- **************************************************/
- !define FMTID_Intshcut {000214A0-0000-0000-C000-000000000046}
- !define PID_IS_URL 2 ; VT_LPWSTR
- !define PID_IS_HOTKEY 6 ; VT_UI2
- !define PID_IS_ICONINDEX 8 ; VT_I4
- !define PID_IS_ICONFILE 9 ; VT_LPWSTR
- !define PKEY_Intshcut_Url '"${FMTID_Intshcut}",${PID_IS_URL}' ; Undocumented
- !define FMTID_InternetSite {000214A1-0000-0000-C000-000000000046}
- !define PID_INTSITE_LASTVISIT 4 ; VT_FILETIME
- !define PID_INTSITE_VISITCOUNT 6 ; VT_UI4
- /**************************************************
- Helper macros
- **************************************************/
- !define V_GetVT '!insertmacro V_GetVT '
- !macro V_GetVT pPV sysdst
- System::Call '*${pPV}(&i2.${sysdst})'
- !macroend
- !define V_SetVT '!insertmacro V_SetVT '
- !macro V_SetVT pPV syssrc
- System::Call '*${pPV}(&i2 ${syssrc})'
- !macroend
- !macro V_GetHelper sysvaltyp pPV sysdst
- System::Call '*${pPV}(l,${sysvaltyp}.${sysdst})'
- !macroend
- !macro V_GenericSetHelper sysvaltyp pPV VT syssrc
- !if "${VT}" != "" ; Setting the VT is optional
- System::Call '*${pPV}(&i2 ${VT},&i6,${sysvaltyp}${syssrc})'
- !else
- System::Call '*${pPV}(l,${sysvaltyp}${syssrc})'
- !endif
- !macroend
- !macro V_SpecificSetHelper VT sysvaltyp pPV syssrc
- System::Call '*${pPV}(&i2 ${VT},&i6,${sysvaltyp}${syssrc})'
- !macroend
- !macro Make_V_GetterSetter name sysvaltyp setsep
- !define V_Get${name} '!insertmacro V_GetHelper "${sysvaltyp}" '
- !ifdef VT_${name}
- !define V_Set${name} '!insertmacro V_SpecificSetHelper ${VT_${name}} "${sysvaltyp}${setsep}" '
- !else
- !define V_Set${name} '!insertmacro V_GenericSetHelper "${sysvaltyp}${setsep}" '
- !endif
- !macroend
- !insertmacro Make_V_GetterSetter Int8 "&i1" " " ; Generic
- !insertmacro Make_V_GetterSetter Int16 "&i2" " " ; Generic
- !insertmacro Make_V_GetterSetter Int32 "i" "" ; Generic
- !insertmacro Make_V_GetterSetter Int64 "l" "" ; Generic
- !insertmacro Make_V_GetterSetter Pointer "p" "" ; Generic
- !insertmacro Make_V_GetterSetter I4 "i" " "
- !insertmacro Make_V_GetterSetter BOOL "&i2" " "
- !insertmacro Make_V_GetterSetter FILETIME "l" ""
- !macro VariantInit pV
- ${V_SetVT} ${pV} ${VT_EMPTY}
- !macroend
- !macro VariantClear pV
- System::Call 'OLEAUT32::#9(p${pV})'
- !macroend
- !macro VariantCopy pDstV pSrcV sysretHR
- System::Call 'OLEAUT32::#10(p${pDstV},p${pSrcV})i.${sysretHR}' ; (Frees the destination variant before it copies the source)
- !macroend
- !macro VariantCopyInd pDstV pSrcV sysretHR
- System::Call 'OLEAUT32::#11(p${pDstV},p${pSrcV})i.${sysretHR}' ; (Frees the destination variant before it copies the source)
- !macroend
- !macro VariantChangeType pDstV pSrcV Flags VT sysretHR
- System::Call 'OLEAUT32::#12(p${pDstV},p${pSrcV},i${Flags},i${VT})i.${sysretHR}' ; (Might free the destination on success)
- !macroend
- !macro PropVariantClear pPV
- System::Call 'OLE32::PropVariantClear(p${pPV})' ; WinNT4.SP0+, Win98+, IE4+
- !macroend
- !macro PropVariantCopy pDstPV pSrcPV sysretHR
- System::Call 'OLE32::PropVariantCopy(p${pDstPV},p${pSrcPV})i.${sysretHR}' ; WinNT4.SP0+, Win98+, IE4+ (Does NOT free the destination before it copies the source)
- !macroend
- !macro PropVariantChangeType pDstPV pSrcPV VT sysretHR
- !ifdef NSIS_ARM | NSIS_ARM32 | NSIS_ARMNT | NSIS_ARM64
- System::Call 'PROPSYS::PropVariantChangeType(p${pDstPV},p${pSrcPV},i0,i${VT})i.${sysretHR}'
- !else
- Push "${VT}"
- Push ${pSrcPV}
- Push ${pDstPV}
- !include Util.nsh
- ${CallArtificialFunction} TryPropVariantChangeType
- System::Call 'KERNEL32::SetLastError(is${sysretHR})' ; A hack to move the result from the stack to somewhere with System variable syntax
- !endif
- !macroend
- !macro TryPropVariantChangeType
- System::Store S
- System::Call 'PROPSYS::PropVariantChangeType(psr1,psr2,i0,isr3)i.r0' ; Vista+ (Source and destination cannot be the same address)
- StrCmp $0 error "" done
- System::Call 'OLE32::PropVariantChangeType(pr1,pr2,i0,i0,ir3})i.r0' ; 2000+ (Source and destination cannot be the same address)
- !if ${NSIS_PTR_SIZE} < 8
- StrCmp $0 error "" done
- !insertmacro VariantChangeType $1 $2 0 $3 r0 ; This is not really correct but there is no PROPVARIANT support on these platforms. Might free the destination!
- !endif
- done:
- Push $0
- System::Store L
- !macroend
- !macro IPropertyStorage_ReadPropById pPS ID pPV sysoutHR
- System::Call '*(p${PRSPEC_PROPID},p${ID})p.s'
- ${IPropertyStorage::ReadMultiple} ${pPS} '(1,pss,p${pPV})${sysoutHR}'
- System::Free
- !macroend
- !macro IPropertyStorage_WritePropById pPS ID pPV sysoutHR
- System::Call '*(p${PRSPEC_PROPID},p${ID})p.s'
- ${IPropertyStorage::WriteMultiple} ${pPS} '(1,pss,p${pPV},2)${sysoutHR}'
- System::Free
- !macroend
- !verbose pop
- !endif /* __WIN_PROPKEY__INC */
|