mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 17:34:43 +00:00
864 lines
37 KiB
Nim
864 lines
37 KiB
Nim
#
|
|
#
|
|
# Nimrod's Runtime Library
|
|
# (c) Copyright 2006 Andreas Rumpf
|
|
#
|
|
# See the file "copying.txt", included in this
|
|
# distribution, for details about the copyright.
|
|
#
|
|
|
|
{.deadCodeElim: on.}
|
|
|
|
# leave out unused functions so the unit can be used on win2000 as well
|
|
|
|
#+-------------------------------------------------------------------------
|
|
#
|
|
# Microsoft Windows
|
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
#
|
|
# File: shellapi.h
|
|
#
|
|
# Header translation by Marco van de Voort for Free Pascal Platform
|
|
# SDK dl'ed January 2002
|
|
#
|
|
#--------------------------------------------------------------------------
|
|
|
|
#
|
|
# shellapi.h - SHELL.DLL functions, types, and definitions
|
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
import
|
|
Windows
|
|
|
|
type
|
|
HDROP* = THandle
|
|
UINT_PTR* = ptr UINT
|
|
DWORD_PTR* = ptr DWORD
|
|
pHICON* = ptr HICON
|
|
pBool* = ptr BOOL
|
|
STARTUPINFOW* {.final.} = object # a guess. Omission should get fixed in Windows.
|
|
cb*: DWORD
|
|
lpReserved*: LPTSTR
|
|
lpDesktop*: LPTSTR
|
|
lpTitle*: LPTSTR
|
|
dwX*: DWORD
|
|
dwY*: DWORD
|
|
dwXSize*: DWORD
|
|
dwYSize*: DWORD
|
|
dwXCountChars*: DWORD
|
|
dwYCountChars*: DWORD
|
|
dwFillAttribute*: DWORD
|
|
dwFlags*: DWORD
|
|
wShowWindow*: int16
|
|
cbReserved2*: int16
|
|
lpReserved2*: LPBYTE
|
|
hStdInput*: HANDLE
|
|
hStdOutput*: HANDLE
|
|
hStdError*: HANDLE
|
|
|
|
LPSTARTUPINFOW* = ptr STARTUPINFOW
|
|
TSTARTUPINFOW* = STARTUPINFOW
|
|
PSTARTUPINFOW* = ptr STARTUPINFOW #unicode
|
|
|
|
proc DragQueryFileA*(arg1: HDROP, arg2: UINT, arg3: LPSTR, arg4: UINT): UINT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "DragQueryFileA".}
|
|
proc DragQueryFileW*(arg1: HDROP, arg2: UINT, arg3: LPWSTR, arg4: UINT): UINT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "DragQueryFileW".}
|
|
proc DragQueryFile*(arg1: HDROP, arg2: UINT, arg3: LPSTR, arg4: UINT): UINT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "DragQueryFileA".}
|
|
proc DragQueryFile*(arg1: HDROP, arg2: UINT, arg3: LPWSTR, arg4: UINT): UINT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "DragQueryFileW".}
|
|
proc DragQueryPoint*(arg1: HDROP, arg2: LPPOINT): BOOL{.stdcall,
|
|
dynlib: "shell32.dll", importc: "DragQueryPoint".}
|
|
proc DragFinish*(arg1: HDROP){.stdcall, dynlib: "shell32.dll",
|
|
importc: "DragFinish".}
|
|
proc DragAcceptFiles*(hwnd: HWND, arg2: BOOL){.stdcall, dynlib: "shell32.dll",
|
|
importc: "DragAcceptFiles".}
|
|
proc ShellExecuteA*(HWND: hwnd, lpOperation: LPCSTR, lpFile: LPCSTR,
|
|
lpParameters: LPCSTR, lpDirectory: LPCSTR, nShowCmd: int32): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteA".}
|
|
proc ShellExecuteW*(hwnd: HWND, lpOperation: LPCWSTR, lpFile: LPCWSTR,
|
|
lpParameters: LPCWSTR, lpDirectory: LPCWSTR, nShowCmd: int32): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteW".}
|
|
proc ShellExecute*(HWND: hwnd, lpOperation: LPCSTR, lpFile: LPCSTR,
|
|
lpParameters: LPCSTR, lpDirectory: LPCSTR, nShowCmd: int32): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteA".}
|
|
proc ShellExecute*(hwnd: HWND, lpOperation: LPCWSTR, lpFile: LPCWSTR,
|
|
lpParameters: LPCWSTR, lpDirectory: LPCWSTR, nShowCmd: int32): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteW".}
|
|
proc FindExecutableA*(lpFile: LPCSTR, lpDirectory: LPCSTR, lpResult: LPSTR): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "FindExecutableA".}
|
|
proc FindExecutableW*(lpFile: LPCWSTR, lpDirectory: LPCWSTR, lpResult: LPWSTR): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "FindExecutableW".}
|
|
proc FindExecutable*(lpFile: LPCSTR, lpDirectory: LPCSTR, lpResult: LPSTR): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "FindExecutableA".}
|
|
proc FindExecutable*(lpFile: LPCWSTR, lpDirectory: LPCWSTR, lpResult: LPWSTR): HInst{.
|
|
stdcall, dynlib: "shell32.dll", importc: "FindExecutableW".}
|
|
proc CommandLineToArgvW*(lpCmdLine: LPCWSTR, pNumArgs: ptr int32): pLPWSTR{.
|
|
stdcall, dynlib: "shell32.dll", importc: "CommandLineToArgvW".}
|
|
proc ShellAboutA*(HWND: hWnd, szApp: LPCSTR, szOtherStuff: LPCSTR, HICON: hIcon): int32{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ShellAboutA".}
|
|
proc ShellAboutW*(HWND: hWnd, szApp: LPCWSTR, szOtherStuff: LPCWSTR,
|
|
HICON: hIcon): int32{.stdcall, dynlib: "shell32.dll",
|
|
importc: "ShellAboutW".}
|
|
proc ShellAbout*(HWND: hWnd, szApp: LPCSTR, szOtherStuff: LPCSTR, HICON: hIcon): int32{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ShellAboutA".}
|
|
proc ShellAbout*(HWND: hWnd, szApp: LPCWSTR, szOtherStuff: LPCWSTR, HICON: hIcon): int32{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ShellAboutW".}
|
|
proc DuplicateIcon*(inst: HINST, icon: HICON): HIcon{.stdcall,
|
|
dynlib: "shell32.dll", importc: "DuplicateIcon".}
|
|
proc ExtractAssociatedIconA*(hInst: HINST, lpIconPath: LPSTR, lpiIcon: LPWORD): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractAssociatedIconA".}
|
|
proc ExtractAssociatedIconW*(hInst: HINST, lpIconPath: LPWSTR, lpiIcon: LPWORD): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractAssociatedIconW".}
|
|
proc ExtractAssociatedIcon*(hInst: HINST, lpIconPath: LPSTR, lpiIcon: LPWORD): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractAssociatedIconA".}
|
|
proc ExtractAssociatedIcon*(hInst: HINST, lpIconPath: LPWSTR, lpiIcon: LPWORD): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractAssociatedIconW".}
|
|
proc ExtractIconA*(hInst: HINST, lpszExeFileName: LPCSTR, nIconIndex: UINT): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractIconA".}
|
|
proc ExtractIconW*(hInst: HINST, lpszExeFileName: LPCWSTR, nIconIndex: UINT): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractIconW".}
|
|
proc ExtractIcon*(hInst: HINST, lpszExeFileName: LPCSTR, nIconIndex: UINT): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractIconA".}
|
|
proc ExtractIcon*(hInst: HINST, lpszExeFileName: LPCWSTR, nIconIndex: UINT): HICON{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractIconW".}
|
|
# if(WINVER >= 0x0400)
|
|
type # init with sizeof(DRAGINFO)
|
|
DRAGINFOA* {.final.} = object
|
|
uSize*: UINT
|
|
pt*: POINT
|
|
fNC*: BOOL
|
|
lpFileList*: LPSTR
|
|
grfKeyState*: DWORD
|
|
|
|
TDRAGINFOA* = DRAGINFOA
|
|
LPDRAGINFOA* = ptr DRAGINFOA # init with sizeof(DRAGINFO)
|
|
DRAGINFOW* {.final.} = object
|
|
uSize*: UINT
|
|
pt*: POINT
|
|
fNC*: BOOL
|
|
lpFileList*: LPWSTR
|
|
grfKeyState*: DWORD
|
|
|
|
TDRAGINFOW* = DRAGINFOW
|
|
LPDRAGINFOW* = ptr DRAGINFOW
|
|
|
|
when defined(UNICODE):
|
|
type
|
|
DRAGINFO* = DRAGINFOW
|
|
TDRAGINFO* = DRAGINFOW
|
|
LPDRAGINFO* = LPDRAGINFOW
|
|
else:
|
|
type
|
|
DRAGINFO* = DRAGINFOA
|
|
TDRAGINFO* = DRAGINFOW
|
|
LPDRAGINFO* = LPDRAGINFOA
|
|
const
|
|
ABM_NEW* = 0x00000000
|
|
ABM_REMOVE* = 0x00000001
|
|
ABM_QUERYPOS* = 0x00000002
|
|
ABM_SETPOS* = 0x00000003
|
|
ABM_GETSTATE* = 0x00000004
|
|
ABM_GETTASKBARPOS* = 0x00000005
|
|
ABM_ACTIVATE* = 0x00000006 # lParam == TRUE/FALSE means activate/deactivate
|
|
ABM_GETAUTOHIDEBAR* = 0x00000007
|
|
ABM_SETAUTOHIDEBAR* = 0x00000008 # this can fail at any time. MUST check the result
|
|
# lParam = TRUE/FALSE Set/Unset
|
|
# uEdge = what edge
|
|
ABM_WINDOWPOSCHANGED* = 0x00000009
|
|
ABM_SETSTATE* = 0x0000000A
|
|
ABN_STATECHANGE* = 0x00000000 # these are put in the wparam of callback messages
|
|
ABN_POSCHANGED* = 0x00000001
|
|
ABN_FULLSCREENAPP* = 0x00000002
|
|
ABN_WINDOWARRANGE* = 0x00000003 # lParam == TRUE means hide
|
|
# flags for get state
|
|
ABS_AUTOHIDE* = 0x00000001
|
|
ABS_ALWAYSONTOP* = 0x00000002
|
|
ABE_LEFT* = 0
|
|
ABE_TOP* = 1
|
|
ABE_RIGHT* = 2
|
|
ABE_BOTTOM* = 3
|
|
|
|
type
|
|
AppBarData* {.final.} = object
|
|
cbSize*: DWORD
|
|
hWnd*: HWND
|
|
uCallbackMessage*: UINT
|
|
uEdge*: UINT
|
|
rc*: RECT
|
|
lParam*: LPARAM # message specific
|
|
|
|
TAPPBARDATA* = AppBarData
|
|
PAPPBARDATA* = ptr AppBarData
|
|
|
|
proc SHAppBarMessage*(dwMessage: DWORD, pData: APPBARDATA): UINT_PTR{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHAppBarMessage".}
|
|
#
|
|
# EndAppBar
|
|
#
|
|
proc DoEnvironmentSubstA*(szString: LPSTR, cchString: UINT): DWORD{.stdcall,
|
|
dynlib: "shell32.dll", importc: "DoEnvironmentSubstA".}
|
|
proc DoEnvironmentSubstW*(szString: LPWSTR, cchString: UINT): DWORD{.stdcall,
|
|
dynlib: "shell32.dll", importc: "DoEnvironmentSubstW".}
|
|
proc DoEnvironmentSubst*(szString: LPSTR, cchString: UINT): DWORD{.stdcall,
|
|
dynlib: "shell32.dll", importc: "DoEnvironmentSubstA".}
|
|
proc DoEnvironmentSubst*(szString: LPWSTR, cchString: UINT): DWORD{.stdcall,
|
|
dynlib: "shell32.dll", importc: "DoEnvironmentSubstW".}
|
|
#Macro
|
|
proc EIRESID*(x: int32): int32
|
|
proc ExtractIconExA*(lpszFile: LPCSTR, nIconIndex: int32, phiconLarge: pHICON,
|
|
phiconSmall: pHIcon, nIcons: UINT): UINT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ExtractIconExA".}
|
|
proc ExtractIconExW*(lpszFile: LPCWSTR, nIconIndex: int32, phiconLarge: pHICON,
|
|
phiconSmall: pHIcon, nIcons: UINT): UINT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ExtractIconExW".}
|
|
proc ExtractIconExA*(lpszFile: LPCSTR, nIconIndex: int32,
|
|
phiconLarge: var HICON, phiconSmall: var HIcon,
|
|
nIcons: UINT): UINT{.stdcall, dynlib: "shell32.dll",
|
|
importc: "ExtractIconExA".}
|
|
proc ExtractIconExW*(lpszFile: LPCWSTR, nIconIndex: int32,
|
|
phiconLarge: var HICON, phiconSmall: var HIcon,
|
|
nIcons: UINT): UINT{.stdcall, dynlib: "shell32.dll",
|
|
importc: "ExtractIconExW".}
|
|
proc ExtractIconEx*(lpszFile: LPCSTR, nIconIndex: int32, phiconLarge: pHICON,
|
|
phiconSmall: pHIcon, nIcons: UINT): UINT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ExtractIconExA".}
|
|
proc ExtractIconEx*(lpszFile: LPCWSTR, nIconIndex: int32, phiconLarge: pHICON,
|
|
phiconSmall: pHIcon, nIcons: UINT): UINT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ExtractIconExW".}
|
|
proc ExtractIconEx*(lpszFile: LPCSTR, nIconIndex: int32, phiconLarge: var HICON,
|
|
phiconSmall: var HIcon, nIcons: UINT): UINT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ExtractIconExA".}
|
|
proc ExtractIconEx*(lpszFile: LPCWSTR, nIconIndex: int32,
|
|
phiconLarge: var HICON, phiconSmall: var HIcon, nIcons: UINT): UINT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "ExtractIconExW".}
|
|
#
|
|
# Shell File Operations
|
|
#
|
|
#ifndef FO_MOVE //these need to be kept in sync with the ones in shlobj.h}
|
|
const
|
|
FO_MOVE* = 0x00000001
|
|
FO_COPY* = 0x00000002
|
|
FO_DELETE* = 0x00000003
|
|
FO_RENAME* = 0x00000004
|
|
FOF_MULTIDESTFILES* = 0x00000001
|
|
FOF_CONFIRMMOUSE* = 0x00000002
|
|
FOF_SILENT* = 0x00000004 # don't create progress/report
|
|
FOF_RENAMEONCOLLISION* = 0x00000008
|
|
FOF_NOCONFIRMATION* = 0x00000010 # Don't prompt the user.
|
|
FOF_WANTMAPPINGHANDLE* = 0x00000020 # Fill in SHFILEOPSTRUCT.hNameMappings
|
|
FOF_ALLOWUNDO* = 0x00000040 # Must be freed using SHFreeNameMappings
|
|
FOF_FILESONLY* = 0x00000080 # on *.*, do only files
|
|
FOF_SIMPLEPROGRESS* = 0x00000100 # means don't show names of files
|
|
FOF_NOCONFIRMMKDIR* = 0x00000200 # don't confirm making any needed dirs
|
|
FOF_NOERRORUI* = 0x00000400 # don't put up error UI
|
|
FOF_NOCOPYSECURITYATTRIBS* = 0x00000800 # dont copy NT file Security Attributes
|
|
FOF_NORECURSION* = 0x00001000 # don't recurse into directories.
|
|
#if (_WIN32_IE >= 0x0500)
|
|
FOF_NO_CONNECTED_ELEMENTS* = 0x00002000 # don't operate on connected elements.
|
|
FOF_WANTNUKEWARNING* = 0x00004000 # during delete operation, warn if nuking instead of recycling (partially overrides FOF_NOCONFIRMATION)
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0501)
|
|
FOF_NORECURSEREPARSE* = 0x00008000 # treat reparse points as objects, not containers
|
|
#endif
|
|
|
|
type
|
|
FILEOP_FLAGS* = int16
|
|
|
|
const
|
|
PO_DELETE* = 0x00000013 # printer is being deleted
|
|
PO_RENAME* = 0x00000014 # printer is being renamed
|
|
PO_PORTCHANGE* = 0x00000020 # port this printer connected to is being changed
|
|
# if this id is set, the strings received by
|
|
# the copyhook are a doubly-null terminated
|
|
# list of strings. The first is the printer
|
|
# name and the second is the printer port.
|
|
PO_REN_PORT* = 0x00000034 # PO_RENAME and PO_PORTCHANGE at same time.
|
|
# no POF_ flags currently defined
|
|
|
|
type
|
|
PRINTEROP_FLAGS* = int16 #endif}
|
|
# FO_MOVE
|
|
# implicit parameters are:
|
|
# if pFrom or pTo are unqualified names the current directories are
|
|
# taken from the global current drive/directory settings managed
|
|
# by Get/SetCurrentDrive/Directory
|
|
#
|
|
# the global confirmation settings
|
|
# only used if FOF_SIMPLEPROGRESS
|
|
|
|
type
|
|
SHFILEOPSTRUCTA* {.final.} = object
|
|
hwnd*: HWND
|
|
wFunc*: UINT
|
|
pFrom*: LPCSTR
|
|
pTo*: LPCSTR
|
|
fFlags*: FILEOP_FLAGS
|
|
fAnyOperationsAborted*: BOOL
|
|
hNameMappings*: LPVOID
|
|
lpszProgressTitle*: LPCSTR # only used if FOF_SIMPLEPROGRESS
|
|
|
|
TSHFILEOPSTRUCTA* = SHFILEOPSTRUCTA
|
|
LPSHFILEOPSTRUCTA* = ptr SHFILEOPSTRUCTA
|
|
SHFILEOPSTRUCTW* {.final.} = object
|
|
hwnd*: HWND
|
|
wFunc*: UINT
|
|
pFrom*: LPCWSTR
|
|
pTo*: LPCWSTR
|
|
fFlags*: FILEOP_FLAGS
|
|
fAnyOperationsAborted*: BOOL
|
|
hNameMappings*: LPVOID
|
|
lpszProgressTitle*: LPCWSTR
|
|
|
|
TSHFILEOPSTRUCTW* = SHFILEOPSTRUCTW
|
|
LPSHFILEOPSTRUCTW* = ptr SHFILEOPSTRUCTW
|
|
|
|
when defined(UNICODE):
|
|
type
|
|
SHFILEOPSTRUCT* = SHFILEOPSTRUCTW
|
|
TSHFILEOPSTRUCT* = SHFILEOPSTRUCTW
|
|
LPSHFILEOPSTRUCT* = LPSHFILEOPSTRUCTW
|
|
else:
|
|
type
|
|
SHFILEOPSTRUCT* = SHFILEOPSTRUCTA
|
|
TSHFILEOPSTRUCT* = SHFILEOPSTRUCTA
|
|
LPSHFILEOPSTRUCT* = LPSHFILEOPSTRUCTA
|
|
proc SHFileOperationA*(lpFileOp: LPSHFILEOPSTRUCTA): int32{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHFileOperationA".}
|
|
proc SHFileOperationW*(lpFileOp: LPSHFILEOPSTRUCTW): int32{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHFileOperationW".}
|
|
proc SHFileOperation*(lpFileOp: LPSHFILEOPSTRUCTA): int32{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHFileOperationA".}
|
|
proc SHFileOperation*(lpFileOp: LPSHFILEOPSTRUCTW): int32{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHFileOperationW".}
|
|
proc SHFreeNameMappings*(hNameMappings: THandle){.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHFreeNameMappings".}
|
|
type
|
|
SHNAMEMAPPINGA* {.final.} = object
|
|
pszOldPath*: LPSTR
|
|
pszNewPath*: LPSTR
|
|
cchOldPath*: int32
|
|
cchNewPath*: int32
|
|
|
|
TSHNAMEMAPPINGA* = SHNAMEMAPPINGA
|
|
LPSHNAMEMAPPINGA* = ptr SHNAMEMAPPINGA
|
|
SHNAMEMAPPINGW* {.final.} = object
|
|
pszOldPath*: LPWSTR
|
|
pszNewPath*: LPWSTR
|
|
cchOldPath*: int32
|
|
cchNewPath*: int32
|
|
|
|
TSHNAMEMAPPINGW* = SHNAMEMAPPINGW
|
|
LPSHNAMEMAPPINGW* = ptr SHNAMEMAPPINGW
|
|
|
|
when not(defined(UNICODE)):
|
|
type
|
|
SHNAMEMAPPING* = SHNAMEMAPPINGW
|
|
TSHNAMEMAPPING* = SHNAMEMAPPINGW
|
|
LPSHNAMEMAPPING* = LPSHNAMEMAPPINGW
|
|
else:
|
|
type
|
|
SHNAMEMAPPING* = SHNAMEMAPPINGA
|
|
TSHNAMEMAPPING* = SHNAMEMAPPINGA
|
|
LPSHNAMEMAPPING* = LPSHNAMEMAPPINGA
|
|
#
|
|
# End Shell File Operations
|
|
#
|
|
#
|
|
# Begin ShellExecuteEx and family
|
|
#
|
|
# ShellExecute() and ShellExecuteEx() error codes
|
|
# regular WinExec() codes
|
|
|
|
const
|
|
SE_ERR_FNF* = 2 # file not found
|
|
SE_ERR_PNF* = 3 # path not found
|
|
SE_ERR_ACCESSDENIED* = 5 # access denied
|
|
SE_ERR_OOM* = 8 # out of memory
|
|
SE_ERR_DLLNOTFOUND* = 32 # endif WINVER >= 0x0400
|
|
# error values for ShellExecute() beyond the regular WinExec() codes
|
|
SE_ERR_SHARE* = 26
|
|
SE_ERR_ASSOCINCOMPLETE* = 27
|
|
SE_ERR_DDETIMEOUT* = 28
|
|
SE_ERR_DDEFAIL* = 29
|
|
SE_ERR_DDEBUSY* = 30
|
|
SE_ERR_NOASSOC* = 31 #if(WINVER >= 0x0400)}
|
|
# Note CLASSKEY overrides CLASSNAME
|
|
SEE_MASK_CLASSNAME* = 0x00000001
|
|
SEE_MASK_CLASSKEY* = 0x00000003 # Note INVOKEIDLIST overrides IDLIST
|
|
SEE_MASK_IDLIST* = 0x00000004
|
|
SEE_MASK_INVOKEIDLIST* = 0x0000000C
|
|
SEE_MASK_ICON* = 0x00000010
|
|
SEE_MASK_HOTKEY* = 0x00000020
|
|
SEE_MASK_NOCLOSEPROCESS* = 0x00000040
|
|
SEE_MASK_CONNECTNETDRV* = 0x00000080
|
|
SEE_MASK_FLAG_DDEWAIT* = 0x00000100
|
|
SEE_MASK_DOENVSUBST* = 0x00000200
|
|
SEE_MASK_FLAG_NO_UI* = 0x00000400
|
|
SEE_MASK_UNICODE* = 0x00004000
|
|
SEE_MASK_NO_CONSOLE* = 0x00008000
|
|
SEE_MASK_ASYNCOK* = 0x00100000
|
|
SEE_MASK_HMONITOR* = 0x00200000 #if (_WIN32_IE >= 0x0500)
|
|
SEE_MASK_NOQUERYCLASSSTORE* = 0x01000000
|
|
SEE_MASK_WAITFORINPUTIDLE* = 0x02000000 #endif (_WIN32_IE >= 0x500)
|
|
#if (_WIN32_IE >= 0x0560)
|
|
SEE_MASK_FLAG_LOG_USAGE* = 0x04000000 #endif
|
|
# (_WIN32_IE >= 0x560)
|
|
|
|
type
|
|
SHELLEXECUTEINFOA* {.final.} = object
|
|
cbSize*: DWORD
|
|
fMask*: ULONG
|
|
hwnd*: HWND
|
|
lpVerb*: LPCSTR
|
|
lpFile*: LPCSTR
|
|
lpParameters*: LPCSTR
|
|
lpDirectory*: LPCSTR
|
|
nShow*: int32
|
|
hInstApp*: HINST
|
|
lpIDList*: LPVOID
|
|
lpClass*: LPCSTR
|
|
hkeyClass*: HKEY
|
|
dwHotKey*: DWORD
|
|
hMonitor*: HANDLE # also: hIcon
|
|
hProcess*: HANDLE
|
|
|
|
TSHELLEXECUTEINFOA* = SHELLEXECUTEINFOA
|
|
LPSHELLEXECUTEINFOA* = ptr SHELLEXECUTEINFOA
|
|
SHELLEXECUTEINFOW* {.final.} = object
|
|
cbSize*: DWORD
|
|
fMask*: ULONG
|
|
hwnd*: HWND
|
|
lpVerb*: lpcwstr
|
|
lpFile*: lpcwstr
|
|
lpParameters*: lpcwstr
|
|
lpDirectory*: lpcwstr
|
|
nShow*: int32
|
|
hInstApp*: HINST
|
|
lpIDList*: LPVOID
|
|
lpClass*: LPCWSTR
|
|
hkeyClass*: HKEY
|
|
dwHotKey*: DWORD
|
|
hMonitor*: HANDLE # also: hIcon
|
|
hProcess*: HANDLE
|
|
|
|
TSHELLEXECUTEINFOW* = SHELLEXECUTEINFOW
|
|
LPSHELLEXECUTEINFOW* = ptr SHELLEXECUTEINFOW
|
|
|
|
when defined(UNICODE):
|
|
type
|
|
SHELLEXECUTEINFO* = SHELLEXECUTEINFOW
|
|
TSHELLEXECUTEINFO* = SHELLEXECUTEINFOW
|
|
LPSHELLEXECUTEINFO* = LPSHELLEXECUTEINFOW
|
|
else:
|
|
type
|
|
SHELLEXECUTEINFO* = SHELLEXECUTEINFOA
|
|
TSHELLEXECUTEINFO* = SHELLEXECUTEINFOA
|
|
LPSHELLEXECUTEINFO* = LPSHELLEXECUTEINFOA
|
|
proc ShellExecuteExA*(lpExecInfo: LPSHELLEXECUTEINFOA): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ShellExecuteExA".}
|
|
proc ShellExecuteExW*(lpExecInfo: LPSHELLEXECUTEINFOW): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ShellExecuteExW".}
|
|
proc ShellExecuteEx*(lpExecInfo: LPSHELLEXECUTEINFOA): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ShellExecuteExA".}
|
|
proc ShellExecuteEx*(lpExecInfo: LPSHELLEXECUTEINFOW): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "ShellExecuteExW".}
|
|
proc WinExecErrorA*(HWND: hwnd, error: int32, lpstrFileName: LPCSTR,
|
|
lpstrTitle: LPCSTR){.stdcall, dynlib: "shell32.dll",
|
|
importc: "WinExecErrorA".}
|
|
proc WinExecErrorW*(HWND: hwnd, error: int32, lpstrFileName: LPCWSTR,
|
|
lpstrTitle: LPCWSTR){.stdcall, dynlib: "shell32.dll",
|
|
importc: "WinExecErrorW".}
|
|
proc WinExecError*(HWND: hwnd, error: int32, lpstrFileName: LPCSTR,
|
|
lpstrTitle: LPCSTR){.stdcall, dynlib: "shell32.dll",
|
|
importc: "WinExecErrorA".}
|
|
proc WinExecError*(HWND: hwnd, error: int32, lpstrFileName: LPCWSTR,
|
|
lpstrTitle: LPCWSTR){.stdcall, dynlib: "shell32.dll",
|
|
importc: "WinExecErrorW".}
|
|
type
|
|
SHCREATEPROCESSINFOW* {.final.} = object
|
|
cbSize*: DWORD
|
|
fMask*: ULONG
|
|
hwnd*: HWND
|
|
pszFile*: LPCWSTR
|
|
pszParameters*: LPCWSTR
|
|
pszCurrentDirectory*: LPCWSTR
|
|
hUserToken*: HANDLE
|
|
lpProcessAttributes*: LPSECURITY_ATTRIBUTES
|
|
lpThreadAttributes*: LPSECURITY_ATTRIBUTES
|
|
bInheritHandles*: BOOL
|
|
dwCreationFlags*: DWORD
|
|
lpStartupInfo*: LPSTARTUPINFOW
|
|
lpProcessInformation*: LPPROCESS_INFORMATION
|
|
|
|
TSHCREATEPROCESSINFOW* = SHCREATEPROCESSINFOW
|
|
PSHCREATEPROCESSINFOW* = ptr SHCREATEPROCESSINFOW
|
|
|
|
proc SHCreateProcessAsUserW*(pscpi: PSHCREATEPROCESSINFOW): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHCreateProcessAsUserW".}
|
|
#
|
|
# End ShellExecuteEx and family }
|
|
#
|
|
#
|
|
# RecycleBin
|
|
#
|
|
# struct for query recycle bin info
|
|
type
|
|
SHQUERYRBINFO* {.final.} = object
|
|
cbSize*: DWORD
|
|
i64Size*: int64
|
|
i64NumItems*: int64
|
|
|
|
TSHQUERYRBINFO* = SHQUERYRBINFO
|
|
LPSHQUERYRBINFO* = ptr SHQUERYRBINFO # flags for SHEmptyRecycleBin
|
|
|
|
const
|
|
SHERB_NOCONFIRMATION* = 0x00000001
|
|
SHERB_NOPROGRESSUI* = 0x00000002
|
|
SHERB_NOSOUND* = 0x00000004
|
|
|
|
proc SHQueryRecycleBinA*(pszRootPath: LPCSTR, pSHQueryRBInfo: LPSHQUERYRBINFO): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHQueryRecycleBinA".}
|
|
proc SHQueryRecycleBinW*(pszRootPath: LPCWSTR, pSHQueryRBInfo: LPSHQUERYRBINFO): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHQueryRecycleBinW".}
|
|
proc SHQueryRecycleBin*(pszRootPath: LPCSTR, pSHQueryRBInfo: LPSHQUERYRBINFO): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHQueryRecycleBinA".}
|
|
proc SHQueryRecycleBin*(pszRootPath: LPCWSTR, pSHQueryRBInfo: LPSHQUERYRBINFO): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHQueryRecycleBinW".}
|
|
proc SHEmptyRecycleBinA*(hwnd: HWND, pszRootPath: LPCSTR, dwFlags: DWORD): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHEmptyRecycleBinA".}
|
|
proc SHEmptyRecycleBinW*(hwnd: HWND, pszRootPath: LPCWSTR, dwFlags: DWORD): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHEmptyRecycleBinW".}
|
|
proc SHEmptyRecycleBin*(hwnd: HWND, pszRootPath: LPCSTR, dwFlags: DWORD): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHEmptyRecycleBinA".}
|
|
proc SHEmptyRecycleBin*(hwnd: HWND, pszRootPath: LPCWSTR, dwFlags: DWORD): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHEmptyRecycleBinW".}
|
|
#
|
|
# end of RecycleBin
|
|
#
|
|
#
|
|
# Tray notification definitions
|
|
#
|
|
type
|
|
NOTIFYICONDATAA* {.final.} = object
|
|
cbSize*: DWORD
|
|
hWnd*: HWND
|
|
uID*: UINT
|
|
uFlags*: UINT
|
|
uCallbackMessage*: UINT
|
|
hIcon*: HICON
|
|
szTip*: array[0..127, CHAR]
|
|
dwState*: DWORD
|
|
dwStateMask*: DWORD
|
|
szInfo*: array[0..255, CHAR]
|
|
uTimeout*: UINT # also: uVersion
|
|
szInfoTitle*: array[0..63, CHAR]
|
|
dwInfoFlags*: DWORD
|
|
guidItem*: TGUID
|
|
|
|
TNOTIFYICONDATAA* = NOTIFYICONDATAA
|
|
PNOTIFYICONDATAA* = ptr NOTIFYICONDATAA
|
|
NOTIFYICONDATAW* {.final.} = object
|
|
cbSize*: DWORD
|
|
hWnd*: HWND
|
|
uID*: UINT
|
|
uFlags*: UINT
|
|
uCallbackMessage*: UINT
|
|
hIcon*: HICON
|
|
szTip*: array[0..127, WCHAR]
|
|
dwState*: DWORD
|
|
dwStateMask*: DWORD
|
|
szInfo*: array[0..255, WCHAR]
|
|
uTimeout*: UINT # also uVersion : UINT
|
|
szInfoTitle*: array[0..63, CHAR]
|
|
dwInfoFlags*: DWORD
|
|
guidItem*: TGUID
|
|
|
|
TNOTIFYICONDATAW* = NOTIFYICONDATAW
|
|
PNOTIFYICONDATAW* = ptr NOTIFYICONDATAW
|
|
|
|
when defined(UNICODE):
|
|
type
|
|
NOTIFYICONDATA* = NOTIFYICONDATAW
|
|
TNOTIFYICONDATA* = NOTIFYICONDATAW
|
|
PNOTIFYICONDATA* = PNOTIFYICONDATAW
|
|
else:
|
|
type
|
|
NOTIFYICONDATA* = NOTIFYICONDATAA
|
|
TNOTIFYICONDATA* = NOTIFYICONDATAA
|
|
PNOTIFYICONDATA* = PNOTIFYICONDATAA
|
|
const
|
|
NIN_SELECT* = WM_USER + 0
|
|
NINF_KEY* = 0x00000001
|
|
NIN_KEYSELECT* = NIN_SELECT or NINF_KEY
|
|
NIN_BALLOONSHOW* = WM_USER + 2
|
|
NIN_BALLOONHIDE* = WM_USER + 3
|
|
NIN_BALLOONTIMEOUT* = WM_USER + 4
|
|
NIN_BALLOONUSERCLICK* = WM_USER + 5
|
|
NIM_ADD* = 0x00000000
|
|
NIM_MODIFY* = 0x00000001
|
|
NIM_DELETE* = 0x00000002
|
|
NIM_SETFOCUS* = 0x00000003
|
|
NIM_SETVERSION* = 0x00000004
|
|
NOTIFYICON_VERSION* = 3
|
|
NIF_MESSAGE* = 0x00000001
|
|
NIF_ICON* = 0x00000002
|
|
NIF_TIP* = 0x00000004
|
|
NIF_STATE* = 0x00000008
|
|
NIF_INFO* = 0x00000010
|
|
NIF_GUID* = 0x00000020
|
|
NIS_HIDDEN* = 0x00000001
|
|
NIS_SHAREDICON* = 0x00000002 # says this is the source of a shared icon
|
|
# Notify Icon Infotip flags
|
|
NIIF_NONE* = 0x00000000 # icon flags are mutually exclusive
|
|
# and take only the lowest 2 bits
|
|
NIIF_INFO* = 0x00000001
|
|
NIIF_WARNING* = 0x00000002
|
|
NIIF_ERROR* = 0x00000003
|
|
NIIF_ICON_MASK* = 0x0000000F
|
|
NIIF_NOSOUND* = 0x00000010
|
|
|
|
proc Shell_NotifyIconA*(dwMessage: Dword, lpData: PNOTIFYICONDATAA): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "Shell_NotifyIconA".}
|
|
proc Shell_NotifyIconW*(dwMessage: Dword, lpData: PNOTIFYICONDATAW): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "Shell_NotifyIconW".}
|
|
proc Shell_NotifyIcon*(dwMessage: Dword, lpData: PNOTIFYICONDATAA): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "Shell_NotifyIconA".}
|
|
proc Shell_NotifyIcon*(dwMessage: Dword, lpData: PNOTIFYICONDATAW): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "Shell_NotifyIconW".}
|
|
#
|
|
# The SHGetFileInfo API provides an easy way to get attributes
|
|
# for a file given a pathname.
|
|
#
|
|
# PARAMETERS
|
|
#
|
|
# pszPath file name to get info about
|
|
# dwFileAttributes file attribs, only used with SHGFI_USEFILEATTRIBUTES
|
|
# psfi place to return file info
|
|
# cbFileInfo size of structure
|
|
# uFlags flags
|
|
#
|
|
# RETURN
|
|
# TRUE if things worked
|
|
#
|
|
# out: icon
|
|
# out: icon index
|
|
# out: SFGAO_ flags
|
|
# out: display name (or path)
|
|
# out: type name
|
|
type
|
|
SHFILEINFOA* {.final.} = object
|
|
hIcon*: HICON # out: icon
|
|
iIcon*: int32 # out: icon index
|
|
dwAttributes*: DWORD # out: SFGAO_ flags
|
|
szDisplayName*: array[0..(MAX_PATH) - 1, CHAR] # out: display name (or path)
|
|
szTypeName*: array[0..79, CHAR] # out: type name
|
|
|
|
TSHFILEINFOA* = SHFILEINFOA
|
|
pSHFILEINFOA* = ptr SHFILEINFOA
|
|
SHFILEINFOW* {.final.} = object
|
|
hIcon*: HICON # out: icon
|
|
iIcon*: int32 # out: icon index
|
|
dwAttributes*: DWORD # out: SFGAO_ flags
|
|
szDisplayName*: array[0..(MAX_PATH) - 1, WCHAR] # out: display name (or path)
|
|
szTypeName*: array[0..79, WCHAR] # out: type name
|
|
|
|
TSHFILEINFOW* = SHFILEINFOW
|
|
pSHFILEINFOW* = ptr SHFILEINFOW
|
|
|
|
when defined(UNICODE):
|
|
type
|
|
SHFILEINFO* = SHFILEINFOW
|
|
TSHFILEINFO* = SHFILEINFOW
|
|
pFILEINFO* = SHFILEINFOW
|
|
else:
|
|
type
|
|
SHFILEINFO* = SHFILEINFOA
|
|
TSHFILEINFO* = SHFILEINFOA
|
|
pFILEINFO* = SHFILEINFOA
|
|
# NOTE: This is also in shlwapi.h. Please keep in synch.
|
|
|
|
const
|
|
SHGFI_ICON* = 0x00000100 # get Icon
|
|
SHGFI_DISPLAYNAME* = 0x00000200 # get display name
|
|
SHGFI_TYPENAME* = 0x00000400 # get type name
|
|
SHGFI_ATTRIBUTES* = 0x00000800 # get attributes
|
|
SHGFI_ICONLOCATION* = 0x00001000 # get icon location
|
|
SHGFI_EXETYPE* = 0x00002000 # return exe type
|
|
SHGFI_SYSICONINDEX* = 0x00004000 # get system icon index
|
|
SHGFI_LINKOVERLAY* = 0x00008000 # put a link overlay on icon
|
|
SHGFI_SELECTED* = 0x00010000 # show icon in selected state
|
|
SHGFI_ATTR_SPECIFIED* = 0x00020000 # get only specified attributes
|
|
SHGFI_LARGEICON* = 0x00000000 # get large icon
|
|
SHGFI_SMALLICON* = 0x00000001 # get small icon
|
|
SHGFI_OPENICON* = 0x00000002 # get open icon
|
|
SHGFI_SHELLICONSIZE* = 0x00000004 # get shell size icon
|
|
SHGFI_PIDL* = 0x00000008 # pszPath is a pidl
|
|
SHGFI_USEFILEATTRIBUTES* = 0x00000010 # use passed dwFileAttribute
|
|
SHGFI_ADDOVERLAYS* = 0x00000020 # apply the appropriate overlays
|
|
SHGFI_OVERLAYINDEX* = 0x00000040 # Get the index of the overlay
|
|
# in the upper 8 bits of the iIcon
|
|
|
|
proc SHGetFileInfoA*(pszPath: LPCSTR, dwFileAttributes: DWORD,
|
|
psfi: pSHFILEINFOA, cbFileInfo, UFlags: UINT): DWORD{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetFileInfoA".}
|
|
proc SHGetFileInfoW*(pszPath: LPCWSTR, dwFileAttributes: DWORD,
|
|
psfi: pSHFILEINFOW, cbFileInfo, UFlags: UINT): DWORD{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetFileInfoW".}
|
|
proc SHGetFileInfo*(pszPath: LPCSTR, dwFileAttributes: DWORD,
|
|
psfi: pSHFILEINFOA, cbFileInfo, UFlags: UINT): DWORD{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetFileInfoA".}
|
|
proc SHGetFileInfoA*(pszPath: LPCSTR, dwFileAttributes: DWORD,
|
|
psfi: var TSHFILEINFOA, cbFileInfo, UFlags: UINT): DWORD{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetFileInfoA".}
|
|
proc SHGetFileInfoW*(pszPath: LPCWSTR, dwFileAttributes: DWORD,
|
|
psfi: var TSHFILEINFOW, cbFileInfo, UFlags: UINT): DWORD{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetFileInfoW".}
|
|
proc SHGetFileInfo*(pszPath: LPCSTR, dwFileAttributes: DWORD,
|
|
psfi: var TSHFILEINFOA, cbFileInfo, UFlags: UINT): DWORD{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetFileInfoA".}
|
|
proc SHGetFileInfo*(pszPath: LPCWSTR, dwFileAttributes: DWORD,
|
|
psfi: var TSHFILEINFOW, cbFileInfo, UFlags: UINT): DWORD{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetFileInfoW".}
|
|
proc SHGetDiskFreeSpaceExA*(pszDirectoryName: LPCSTR,
|
|
pulFreeBytesAvailableToCaller: pULARGE_INTEGER,
|
|
pulTotalNumberOfBytes: pULARGE_INTEGER,
|
|
pulTotalNumberOfFreeBytes: pULARGE_INTEGER): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetDiskFreeSpaceExA".}
|
|
proc SHGetDiskFreeSpaceExW*(pszDirectoryName: LPCWSTR,
|
|
pulFreeBytesAvailableToCaller: pULARGE_INTEGER,
|
|
pulTotalNumberOfBytes: pULARGE_INTEGER,
|
|
pulTotalNumberOfFreeBytes: pULARGE_INTEGER): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetDiskFreeSpaceExW".}
|
|
proc SHGetDiskFreeSpaceEx*(pszDirectoryName: LPCSTR,
|
|
pulFreeBytesAvailableToCaller: pULARGE_INTEGER,
|
|
pulTotalNumberOfBytes: pULARGE_INTEGER,
|
|
pulTotalNumberOfFreeBytes: pULARGE_INTEGER): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetDiskFreeSpaceExA".}
|
|
proc SHGetDiskFreeSpace*(pszDirectoryName: LPCSTR,
|
|
pulFreeBytesAvailableToCaller: pULARGE_INTEGER,
|
|
pulTotalNumberOfBytes: pULARGE_INTEGER,
|
|
pulTotalNumberOfFreeBytes: pULARGE_INTEGER): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetDiskFreeSpaceExA".}
|
|
proc SHGetDiskFreeSpaceEx*(pszDirectoryName: LPCWSTR,
|
|
pulFreeBytesAvailableToCaller: pULARGE_INTEGER,
|
|
pulTotalNumberOfBytes: pULARGE_INTEGER,
|
|
pulTotalNumberOfFreeBytes: pULARGE_INTEGER): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetDiskFreeSpaceExW".}
|
|
proc SHGetDiskFreeSpace*(pszDirectoryName: LPCWSTR,
|
|
pulFreeBytesAvailableToCaller: pULARGE_INTEGER,
|
|
pulTotalNumberOfBytes: pULARGE_INTEGER,
|
|
pulTotalNumberOfFreeBytes: pULARGE_INTEGER): Bool{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetDiskFreeSpaceExW".}
|
|
proc SHGetNewLinkInfoA*(pszLinkTo: LPCSTR, pszDir: LPCSTR, pszName: LPSTR,
|
|
pfMustCopy: pBool, uFlags: UINT): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetNewLinkInfoA".}
|
|
proc SHGetNewLinkInfoW*(pszLinkTo: LPCWSTR, pszDir: LPCWSTR, pszName: LPWSTR,
|
|
pfMustCopy: pBool, uFlags: UINT): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetNewLinkInfoW".}
|
|
proc SHGetNewLinkInfo*(pszLinkTo: LPCSTR, pszDir: LPCSTR, pszName: LPSTR,
|
|
pfMustCopy: pBool, uFlags: UINT): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetNewLinkInfoA".}
|
|
proc SHGetNewLinkInfo*(pszLinkTo: LPCWSTR, pszDir: LPCWSTR, pszName: LPWSTR,
|
|
pfMustCopy: pBool, uFlags: UINT): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetNewLinkInfoW".}
|
|
const
|
|
SHGNLI_PIDL* = 0x00000001 # pszLinkTo is a pidl
|
|
SHGNLI_PREFIXNAME* = 0x00000002 # Make name "Shortcut to xxx"
|
|
SHGNLI_NOUNIQUE* = 0x00000004 # don't do the unique name generation
|
|
SHGNLI_NOLNK* = 0x00000008 # don't add ".lnk" extension
|
|
PRINTACTION_OPEN* = 0
|
|
PRINTACTION_PROPERTIES* = 1
|
|
PRINTACTION_NETINSTALL* = 2
|
|
PRINTACTION_NETINSTALLLINK* = 3
|
|
PRINTACTION_TESTPAGE* = 4
|
|
PRINTACTION_OPENNETPRN* = 5
|
|
PRINTACTION_DOCUMENTDEFAULTS* = 6
|
|
PRINTACTION_SERVERPROPERTIES* = 7
|
|
|
|
proc SHInvokePrinterCommandA*(HWND: hwnd, uAction: UINT, lpBuf1: LPCSTR,
|
|
lpBuf2: LPCSTR, fModal: Bool): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHInvokePrinterCommandA".}
|
|
proc SHInvokePrinterCommandW*(HWND: hwnd, uAction: UINT, lpBuf1: LPCWSTR,
|
|
lpBuf2: LPCWSTR, fModal: Bool): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHInvokePrinterCommandW".}
|
|
proc SHInvokePrinterCommand*(HWND: hwnd, uAction: UINT, lpBuf1: LPCSTR,
|
|
lpBuf2: LPCSTR, fModal: Bool): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHInvokePrinterCommandA".}
|
|
proc SHInvokePrinterCommand*(HWND: hwnd, uAction: UINT, lpBuf1: LPCWSTR,
|
|
lpBuf2: LPCWSTR, fModal: Bool): Bool{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHInvokePrinterCommandW".}
|
|
proc SHLoadNonloadedIconOverlayIdentifiers*(): HResult{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHInvokePrinterCommandW".}
|
|
proc SHIsFileAvailableOffline*(pwszPath: LPCWSTR, pdwStatus: LPDWORD): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHIsFileAvailableOffline".}
|
|
const
|
|
OFFLINE_STATUS_LOCAL* = 0x00000001 # If open, it's open locally
|
|
OFFLINE_STATUS_REMOTE* = 0x00000002 # If open, it's open remotely
|
|
OFFLINE_STATUS_INCOMPLETE* = 0x00000004 # The local copy is currently incomplete.
|
|
# The file will not be available offline
|
|
# until it has been synchronized.
|
|
# sets the specified path to use the string resource
|
|
# as the UI instead of the file system name
|
|
|
|
proc SHSetLocalizedName*(pszPath: LPWSTR, pszResModule: LPCWSTR, idsRes: int32): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHSetLocalizedName".}
|
|
proc SHEnumerateUnreadMailAccountsA*(hKeyUser: HKEY, dwIndex: DWORD,
|
|
pszMailAddress: LPSTR,
|
|
cchMailAddress: int32): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHEnumerateUnreadMailAccountsA".}
|
|
proc SHEnumerateUnreadMailAccountsW*(hKeyUser: HKEY, dwIndex: DWORD,
|
|
pszMailAddress: LPWSTR,
|
|
cchMailAddress: int32): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHEnumerateUnreadMailAccountsW".}
|
|
proc SHEnumerateUnreadMailAccounts*(hKeyUser: HKEY, dwIndex: DWORD,
|
|
pszMailAddress: LPWSTR,
|
|
cchMailAddress: int32): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHEnumerateUnreadMailAccountsW".}
|
|
proc SHGetUnreadMailCountA*(hKeyUser: HKEY, pszMailAddress: LPCSTR,
|
|
pdwCount: PDWORD, pFileTime: PFILETIME,
|
|
pszShellExecuteCommand: LPSTR,
|
|
cchShellExecuteCommand: int32): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetUnreadMailCountA".}
|
|
proc SHGetUnreadMailCountW*(hKeyUser: HKEY, pszMailAddress: LPCWSTR,
|
|
pdwCount: PDWORD, pFileTime: PFILETIME,
|
|
pszShellExecuteCommand: LPWSTR,
|
|
cchShellExecuteCommand: int32): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetUnreadMailCountW".}
|
|
proc SHGetUnreadMailCount*(hKeyUser: HKEY, pszMailAddress: LPCSTR,
|
|
pdwCount: PDWORD, pFileTime: PFILETIME,
|
|
pszShellExecuteCommand: LPSTR,
|
|
cchShellExecuteCommand: int32): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetUnreadMailCountA".}
|
|
proc SHGetUnreadMailCount*(hKeyUser: HKEY, pszMailAddress: LPCWSTR,
|
|
pdwCount: PDWORD, pFileTime: PFILETIME,
|
|
pszShellExecuteCommand: LPWSTR,
|
|
cchShellExecuteCommand: int32): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHGetUnreadMailCountW".}
|
|
proc SHSetUnreadMailCountA*(pszMailAddress: LPCSTR, dwCount: DWORD,
|
|
pszShellExecuteCommand: LPCSTR): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHSetUnreadMailCountA".}
|
|
proc SHSetUnreadMailCountW*(pszMailAddress: LPCWSTR, dwCount: DWORD,
|
|
pszShellExecuteCommand: LPCWSTR): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHSetUnreadMailCountW".}
|
|
proc SHSetUnreadMailCount*(pszMailAddress: LPCSTR, dwCount: DWORD,
|
|
pszShellExecuteCommand: LPCSTR): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHSetUnreadMailCountA".}
|
|
proc SHSetUnreadMailCount*(pszMailAddress: LPCWSTR, dwCount: DWORD,
|
|
pszShellExecuteCommand: LPCWSTR): HRESULT{.stdcall,
|
|
dynlib: "shell32.dll", importc: "SHSetUnreadMailCountW".}
|
|
proc SHGetImageList*(iImageList: int32, riid: TIID, ppvObj: ptr pointer): HRESULT{.
|
|
stdcall, dynlib: "shell32.dll", importc: "SHGetImageList".}
|
|
const
|
|
SHIL_LARGE* = 0 # normally 32x32
|
|
SHIL_SMALL* = 1 # normally 16x16
|
|
SHIL_EXTRALARGE* = 2
|
|
SHIL_SYSSMALL* = 3 # like SHIL_SMALL, but tracks system small icon metric correctly
|
|
SHIL_LAST* = SHIL_SYSSMALL
|
|
|
|
# implementation
|
|
|
|
proc EIRESID(x: int32): int32 =
|
|
result = -x
|