Created Include\Win\COM.nsh

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6139 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2011-03-11 05:35:56 +00:00
parent 3bfdffb45b
commit d4c58392e7
2 changed files with 154 additions and 0 deletions

View file

@ -166,6 +166,7 @@ ${MementoSection} "NSIS Core Files (required)" SecCore
File ..\Include\Win\WinError.nsh
File ..\Include\Win\WinNT.nsh
File ..\Include\Win\WinUser.nsh
File ..\Include\Win\COM.nsh
SetOutPath $INSTDIR\Docs\StrFunc
File ..\Docs\StrFunc\StrFunc.txt

153
Include/Win/COM.nsh Normal file
View file

@ -0,0 +1,153 @@
/*
-------------
COM.nsh
-------------
COM defines and helper macros
;Example:
!include Win\COM.nsh
!insertmacro ComHlpr_CreateInProcInstance ${CLSID_ShellLink} ${IID_IShellLink} r0 ""
${If} $0 <> 0
${IShellLink::SetPath} $0 '("%COMSPEC%").r1'
${IShellLink::SetArguments} $0 '("/k echo HelloWorld").r2'
${If} $1 = 0
${AndIf} $2 = 0
${IUnknown::QueryInterface}$0 '("${IID_IPersistFile}",.r1)'
${If} $1 <> 0
${IPersistFile::Save} $1 '("$exedir\test.lnk",1)'
${IUnknown::Release} $1 ""
${EndIf}
${EndIf}
${IUnknown::Release} $0 ""
${EndIf}
*/
!ifndef __WIN_COM__INC
!define __WIN_COM__INC
!verbose push
!verbose 3
!define /ifndef CLSCTX_INPROC_SERVER 0x1
!define /ifndef CLSCTX_INPROC_HANDLER 0x2
!define /ifndef CLSCTX_LOCAL_SERVER 0x4
!define /ifndef CLSCTX_REMOTE_SERVER 0x10
!define /ifndef CLSCTX_ACTIVATE_32_BIT_SERVER 0x40000
!define /ifndef CLSCTX_ACTIVATE_64_BIT_SERVER 0x80000
!define /ifndef CLSCTX_ENABLE_CLOAKING 0x100000
!define NSISCOMCALL "!insertmacro NSISCOMCALL "
!macro NSISCOMCALL vtblidx decl ptr params
System::Call `${ptr}->${vtblidx}${decl}${params}`
!macroend
!define NSISCOMIFACEDECL "!insertmacro NSISCOMIFACEDECL "
!macro NSISCOMIFACEDECL iface method vtblidx decl
!define ${iface}::${method} `${NSISCOMCALL} ${vtblidx} ${decl} `
!macroend
!macro ComHlpr_CreateInProcInstance clsid iid sysoutvarIFacePtr sysret
System::Call 'OLE32::CoCreateInstance(g "${clsid}",i 0,i ${CLSCTX_INPROC_SERVER},g "${iid}",*p.${sysoutvarIFacePtr})i${sysret}'
!macroend
!ifndef IID_IUnknown
!define IID_IUnknown {00000000-0000-0000-C000-000000000046}
${NSISCOMIFACEDECL}IUnknown QueryInterface 0 (g,*p)i
${NSISCOMIFACEDECL}IUnknown AddRef 1 ()i
${NSISCOMIFACEDECL}IUnknown Release 2 ()i
!endif
!ifndef IID_IPersist
!define IID_IPersist {0000010c-0000-0000-C000-000000000046}
${NSISCOMIFACEDECL}IPersist GetClassID 3 (*g)i
!endif
!ifndef IID_IPersistFile
!define IID_IPersistFile {0000010b-0000-0000-C000-000000000046}
${NSISCOMIFACEDECL}IPersistFile IsDirty 4 ()i
${NSISCOMIFACEDECL}IPersistFile Load 5 (w,i)i
${NSISCOMIFACEDECL}IPersistFile Save 6 (w,i)i
${NSISCOMIFACEDECL}IPersistFile SaveCompleted 7 (w)i
${NSISCOMIFACEDECL}IPersistFile GetCurFile 8 (*w)i
!endif
!ifndef CLSID_ShellLink
!define CLSID_ShellLink {00021401-0000-0000-c000-000000000046}
!endif
!ifndef IID_IShellLink
!define IID_IShellLinkA {000214ee-0000-0000-c000-000000000046}
!define IID_IShellLinkW {000214f9-0000-0000-c000-000000000046}
!ifdef NSIS_UNICODE
!define IID_IShellLink ${IID_IShellLinkW}
!else
!define IID_IShellLink ${IID_IShellLinkA}
!endif
${NSISCOMIFACEDECL}IShellLink GetPath 3 (t,i,p,i)i
${NSISCOMIFACEDECL}IShellLink GetIDList 4 (*p)i
${NSISCOMIFACEDECL}IShellLink SetIDList 5 (p)i
${NSISCOMIFACEDECL}IShellLink GetDescription 6 (t,i)i
${NSISCOMIFACEDECL}IShellLink SetDescription 7 (t)i
${NSISCOMIFACEDECL}IShellLink GetWorkingDirectory 8 (t,i)i
${NSISCOMIFACEDECL}IShellLink SetWorkingDirectory 9 (t)i
${NSISCOMIFACEDECL}IShellLink GetArguments 10 (t,i)i
${NSISCOMIFACEDECL}IShellLink SetArguments 11 (t)i
${NSISCOMIFACEDECL}IShellLink GetHotkey 12 (*&i2)i
${NSISCOMIFACEDECL}IShellLink SetHotkey 13 (&i2)i
${NSISCOMIFACEDECL}IShellLink GetShowCmd 14 (*i)i
${NSISCOMIFACEDECL}IShellLink SetShowCmd 15 (i)i
${NSISCOMIFACEDECL}IShellLink GetIconLocation 16 (t,i,*i)i
${NSISCOMIFACEDECL}IShellLink SetIconLocation 17 (t,i)i
${NSISCOMIFACEDECL}IShellLink SetRelativePath 18 (t,i)i
${NSISCOMIFACEDECL}IShellLink Resolve 19 (p,i)i
${NSISCOMIFACEDECL}IShellLink SetPath 20 (t)i
!endif
!ifndef IID_IShellLinkDataList
!define IID_IShellLinkDataList {45e2b4ae-b1c3-11d0-b92f-00a0c90312e1}
${NSISCOMIFACEDECL}IShellLinkDataList AddDataBlock 3 (p)i
${NSISCOMIFACEDECL}IShellLinkDataList CopyDataBlock 4 (i,*p)i
${NSISCOMIFACEDECL}IShellLinkDataList RemoveDataBlock 5 (i)i
${NSISCOMIFACEDECL}IShellLinkDataList GetFlags 6 (*i)i
${NSISCOMIFACEDECL}IShellLinkDataList SetFlags 7 (i)i
!endif
!define /ifndef EXP_SZ_LINK_SIG 0xA0000001
!define /ifndef NT_CONSOLE_PROPS_SIG 0xA0000002
!define /ifndef NT_FE_CONSOLE_PROPS_SIG 0xA0000004
!define /ifndef EXP_SPECIAL_FOLDER_SIG 0xA0000005
!define /ifndef EXP_DARWIN_ID_SIG 0xA0000006
!define /ifndef EXP_SZ_ICON_SIG 0xA0000007
;SHELL_LINK_DATA_FLAGS
!define /ifndef SLDF_DEFAULT 0
!define /ifndef SLDF_HAS_ID_LIST 0x00000001
!define /ifndef SLDF_HAS_LINK_INFO 0x00000002
!define /ifndef SLDF_HAS_NAME 0x00000004
!define /ifndef SLDF_HAS_RELPATH 0x00000008
!define /ifndef SLDF_HAS_WORKINGDIR 0x00000010
!define /ifndef SLDF_HAS_ARGS 0x00000020
!define /ifndef SLDF_HAS_ICONLOCATION 0x00000040
!define /ifndef SLDF_UNICODE 0x00000080
!define /ifndef SLDF_FORCE_NO_LINKINFO 0x00000100
!define /ifndef SLDF_HAS_EXP_SZ 0x00000200
!define /ifndef SLDF_RUN_IN_SEPARATE 0x00000400
!define /ifndef SLDF_HAS_LOGO3ID 0x00000800
!define /ifndef SLDF_HAS_DARWINID 0x00001000
!define /ifndef SLDF_RUNAS_USER 0x00002000
!define /ifndef SLDF_HAS_EXP_ICON_SZ 0x00004000
!define /ifndef SLDF_NO_PIDL_ALIAS 0x00008000
!define /ifndef SLDF_FORCE_UNCNAME 0x00010000
!define /ifndef SLDF_RUN_WITH_SHIMLAYER 0x00020000
!define /ifndef SLDF_FORCE_NO_LINKTRACK 0x00040000 ;[Vista+]
!define /ifndef SLDF_ENABLE_TARGET_METADATA 0x00080000
!define /ifndef SLDF_DISABLE_LINK_PATH_TRACKING 0x00100000 ;[Seven+]
!define /ifndef SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING 0x00200000
!define /ifndef SLDF_NO_KF_ALIAS 0x00400000
!define /ifndef SLDF_ALLOW_LINK_TO_LINK 0x00800000
!define /ifndef SLDF_UNALIAS_ON_SAVE 0x01000000
!define /ifndef SLDF_PREFER_ENVIRONMENT_PATH 0x02000000
!define /ifndef SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET 0x04000000
!verbose pop
!endif /* __WIN_COM__INC */