spiegel-keyman/common/windows/delphi/ext/jwa/Win32API/JwaShellAPI.pas
2022-06-06 08:13:37 +10:00

2273 lines
66 KiB
ObjectPascal

{******************************************************************************}
{ }
{ Shell32 API Interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2005 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The initial developer of the original translation is Rudy Velthuis }
{ }
{ Portions created by Rudy Velthuis are Copyright (C) 2005-2008 }
{ All Rights Reserved. }
{ }
{ Adapted for JEDI API Library by Christian Wimmer }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ The original code is: shellapi.h, released 2005. }
{ }
{ You may retrieve the latest version of this file at the Project JEDI }
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{ }
{******************************************************************************}
{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaShellAPI;
{$I ..\Includes\JediAPILib.inc}
interface
uses
JwaWinBase, JwaWinUser, JwaWinType;
{
Delphi7 does not contain:
PStartupInfoW
}
{$HPPEMIT '#include <shellapi.h>'}
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
type
{$EXTERNALSYM HDROP}
HDROP = THandle;
{$IFNDEF JWA_INCLUDEMODE}
PPWideChar = ^PWideChar;
{$ENDIF JWA_INCLUDEMODE}
{$EXTERNALSYM DragQueryFileA}
function DragQueryFileA(hDrop: HDROP; iFile: UINT; lpszFile: PAnsiChar; cch: UINT): UINT; stdcall;
{$EXTERNALSYM DragQueryFileW}
function DragQueryFileW(hDrop: HDROP; iFile: UINT; lpszFile: PWideChar; cch: UINT): UINT; stdcall;
{$EXTERNALSYM DragQueryFile}
function DragQueryFile(hDrop: HDROP; iFile: UINT; lpszFile: PTSTR; cch: UINT): UINT; stdcall;
{$EXTERNALSYM DragQueryPoint}
function DragQueryPoint(hDrop: HDROP; var lppt: TPOINT): BOOL; stdcall;
{$EXTERNALSYM DragFinish}
procedure DragFinish(hDrop: HDROP); stdcall;
{$EXTERNALSYM DragAcceptFiles}
procedure DragAcceptFiles(HWnd: HWND; fAccept: BOOL); stdcall;
{$EXTERNALSYM ShellExecuteA}
function ShellExecuteA(hwnd: HWND; lpOperation, lpFile, lpParameters, lpDirectory: PAnsiChar; nShowCmd: Integer): THandle; stdcall;
{$EXTERNALSYM ShellExecuteW}
function ShellExecuteW(hwnd: HWND; lpOperation, lpFile, lpParameters, lpDirectory: PWideChar; nShowCmd: Integer): THandle; stdcall;
{$EXTERNALSYM ShellExecute}
function ShellExecute(hwnd: HWND; lpOperation, lpFile, lpParameters, lpDirectory: PTSTR; nShowCmd: Integer): THandle; stdcall;
{$EXTERNALSYM FindExecutableA}
function FindExecutableA(lpFile, lpDirectory, lpResult: PAnsiChar): THandle; stdcall;
{$EXTERNALSYM FindExecutableW}
function FindExecutableW(lpFile, lpDirectory, lpResult: PWideChar): THandle; stdcall;
{$EXTERNALSYM FindExecutable}
function FindExecutable(lpFile, lpDirectory, lpResult: PTSTR): THandle; stdcall;
{$EXTERNALSYM CommandLineToArgvW}
function CommandLineToArgvW(lpCmdLine: PWideChar; var pNumArgs: Integer): PPWideChar; stdcall;
{$EXTERNALSYM ShellAboutA}
function ShellAboutA(hWnd: HWND; szApp, szOtherStuff: PAnsiChar; hIcon: HICON): Integer; stdcall;
{$EXTERNALSYM ShellAboutW}
function ShellAboutW(hWnd: HWND; szApp, szOtherStuff: PWideChar; hIcon: HICON): Integer; stdcall;
{$EXTERNALSYM ShellAbout}
function ShellAbout(hWnd: HWND; szApp, szOtherStuff: PTSTR; hIcon: HICON): Integer; stdcall;
{$EXTERNALSYM DuplicateIcon}
function DuplicateIcon(hInst: THandle; hIcon: HICON): HICON; stdcall;
{$EXTERNALSYM ExtractAssociatedIconA}
function ExtractAssociatedIconA(hInst: THandle; lpIconPath: PAnsiChar; var lpiIcon: Word): HICON; stdcall;
{$EXTERNALSYM ExtractAssociatedIconW}
function ExtractAssociatedIconW(hInst: THandle; lpIconPath: PWideChar; var lpiIcon: Word): HICON; stdcall;
{$EXTERNALSYM ExtractAssociatedIcon}
function ExtractAssociatedIcon(hInst: THandle; lpIconPath: PTSTR; var lpiIcon: Word): HICON; stdcall;
{$EXTERNALSYM ExtractAssociatedIconExA}
function ExtractAssociatedIconExA(hInst: THandle; lpIconPath: PAnsiChar; var lpiIconIndex, lpiIconId: Word): HICON; stdcall;
{$EXTERNALSYM ExtractAssociatedIconExW}
function ExtractAssociatedIconExW(hInst: THandle; lpIconPath: PWideChar; var lpiIconIndex, lpiIconId: Word): HICON; stdcall;
{$EXTERNALSYM ExtractAssociatedIconEx}
function ExtractAssociatedIconEx(hInst: THandle; lpIconPath: PTSTR; var lpiIconIndex, lpiIconId: Word): HICON; stdcall;
{$EXTERNALSYM ExtractIconA}
function ExtractIconA(hInst: THandle; lpszExeFileName: PAnsiChar; nIconIndex: UINT): HICON; stdcall;
{$EXTERNALSYM ExtractIconW}
function ExtractIconW(hInst: THandle; lpszExeFileName: PWideChar; nIconIndex: UINT): HICON; stdcall;
{$EXTERNALSYM ExtractIcon}
function ExtractIcon(hInst: THandle; lpszExeFileName: PTSTR; nIconIndex: UINT): HICON; stdcall;
type
PDragInfoA = ^TDragInfoA;
{$EXTERNALSYM _DRAGINFOA}
_DRAGINFOA = packed record
uSize: UINT; { init with sizeof(DRAGINFO) }
pt: TPoint;
fNC: BOOL;
lpFileList: PAnsiChar;
grfKeyState: DWORD;
end;
{$EXTERNALSYM DRAGINFOA}
DRAGINFOA = _DRAGINFOA;
TDragInfoA = DRAGINFOA;
PDragInfoW = ^TDragInfoW;
{$EXTERNALSYM _DRAGINFOW}
_DRAGINFOW = packed record
uSize: UINT; { init with sizeof(DRAGINFO) }
pt: TPoint;
fNC: BOOL;
lpFileList: PWideChar;
grfKeyState: DWORD;
end;
{$EXTERNALSYM DRAGINFOW}
DRAGINFOW = _DRAGINFOW;
TDragInfoW = DRAGINFOW;
{$IFDEF UNICODE}
{$EXTERNALSYM DRAGINFO}
DRAGINFO = DRAGINFOW;
TDragInfo = TDragInfoW;
PDragInfo = PDragInfoW;
{$ELSE}
{$EXTERNALSYM DRAGINFO}
DRAGINFO = DRAGINFOA;
TDragInfo = TDragInfoA;
PDragInfo = PDragInfoA;
{$ENDIF}
////
//// AppBar stuff
////
const
{$EXTERNALSYM ABM_NEW}
ABM_NEW = $00000000;
{$EXTERNALSYM ABM_REMOVE}
ABM_REMOVE = $00000001;
{$EXTERNALSYM ABM_QUERYPOS}
ABM_QUERYPOS = $00000002;
{$EXTERNALSYM ABM_SETPOS}
ABM_SETPOS = $00000003;
{$EXTERNALSYM ABM_GETSTATE}
ABM_GETSTATE = $00000004;
{$EXTERNALSYM ABM_GETTASKBARPOS}
ABM_GETTASKBARPOS = $00000005;
{$EXTERNALSYM ABM_ACTIVATE}
ABM_ACTIVATE = $00000006; // lParam == TRUE/FALSE means activate/deactivate
{$EXTERNALSYM ABM_GETAUTOHIDEBAR}
ABM_GETAUTOHIDEBAR = $00000007;
{$EXTERNALSYM ABM_SETAUTOHIDEBAR}
ABM_SETAUTOHIDEBAR = $00000008; // this can fail at any time. MUST check the result
// lParam = TRUE/FALSE Set/Unset
// uEdge = what edge
{$EXTERNALSYM ABM_WINDOWPOSCHANGED}
ABM_WINDOWPOSCHANGED = $00000009;
{$EXTERNALSYM ABM_SETSTATE}
ABM_SETSTATE = $0000000A;
// these are put in the wparam of callback messages
{$EXTERNALSYM ABN_STATECHANGE}
ABN_STATECHANGE = $00000000;
{$EXTERNALSYM ABN_POSCHANGED}
ABN_POSCHANGED = $00000001;
{$EXTERNALSYM ABN_FULLSCREENAPP}
ABN_FULLSCREENAPP = $00000002;
{$EXTERNALSYM ABN_WINDOWARRANGE}
ABN_WINDOWARRANGE = $00000003; // lParam == TRUE means hide
// flags for get state
{$EXTERNALSYM ABS_AUTOHIDE}
ABS_AUTOHIDE = $00000001;
{$EXTERNALSYM ABS_ALWAYSONTOP}
ABS_ALWAYSONTOP = $00000002;
{$EXTERNALSYM ABE_LEFT}
ABE_LEFT = 0;
{$EXTERNALSYM ABE_TOP}
ABE_TOP = 1;
{$EXTERNALSYM ABE_RIGHT}
ABE_RIGHT = 2;
{$EXTERNALSYM ABE_BOTTOM}
ABE_BOTTOM = 3;
type
PAppBarData = ^TAppBarData;
{$EXTERNALSYM _AppBarData}
_AppBarData = packed record
cbSize: DWORD;
hWnd: HWND;
uCallbackMessage: UINT;
uEdge: UINT;
rc: TRect;
lParam: LPARAM; // message specific
end;
{$EXTERNALSYM APPBARDATA}
APPBARDATA = _AppBarData;
TAppBarData = APPBARDATA;
{$EXTERNALSYM SHAppBarMessage}
function SHAppBarMessage(dwMessage: DWORD; var Data: TAppBarData): UINT; stdcall;
////
//// EndAppBar
////
{$EXTERNALSYM DoEnvironmentSubstA}
function DoEnvironmentSubstA(szString: PAnsiChar; cchString: UINT): DWORD; stdcall;
{$EXTERNALSYM DoEnvironmentSubstW}
function DoEnvironmentSubstW(szString: PWideChar; cchString: UINT): DWORD; stdcall;
{$EXTERNALSYM DoEnvironmentSubst}
function DoEnvironmentSubst(szString: PTSTR; cchString: UINT): DWORD; stdcall;
{$EXTERNALSYM EIRESID}
function EIRESID(x: Integer): Integer;
type
PHICON = ^HICON;
{$EXTERNALSYM ExtractIconExA}
function ExtractIconExA(lpszFile: PAnsiChar; nIconIndex: Integer; phiconLarge, phiconSmall: PHICON; nIcons: UINT): UINT; stdcall;
{$EXTERNALSYM ExtractIconExW}
function ExtractIconExW(lpszFile: PWideChar; nIconIndex: Integer; phiconLarge, phiconSmall: PHICON; nIcons: UINT): UINT; stdcall;
{$EXTERNALSYM ExtractIconEx}
function ExtractIconEx(lpszFile: PTSTR; nIconIndex: Integer; phiconLarge, phiconSmall: PHICON; nIcons: UINT): UINT; stdcall;
////
//// Shell File Operations
////
const
{$EXTERNALSYM FO_MOVE}
FO_MOVE = $0001;
{$EXTERNALSYM FO_COPY}
FO_COPY = $0002;
{$EXTERNALSYM FO_DELETE}
FO_DELETE = $0003;
{$EXTERNALSYM FO_RENAME}
FO_RENAME = $0004;
{$EXTERNALSYM FOF_MULTIDESTFILES}
FOF_MULTIDESTFILES = $0001;
{$EXTERNALSYM FOF_CONFIRMMOUSE}
FOF_CONFIRMMOUSE = $0002;
{$EXTERNALSYM FOF_SILENT}
FOF_SILENT = $0004; // don't create progress/report
{$EXTERNALSYM FOF_RENAMEONCOLLISION}
FOF_RENAMEONCOLLISION = $0008;
{$EXTERNALSYM FOF_NOCONFIRMATION}
FOF_NOCONFIRMATION = $0010; // Don't prompt the user.
{$EXTERNALSYM FOF_WANTMAPPINGHANDLE}
FOF_WANTMAPPINGHANDLE = $0020; // Fill in SHFILEOPSTRUCT.hNameMappings
// Must be freed using SHFreeNameMappings
{$EXTERNALSYM FOF_ALLOWUNDO}
FOF_ALLOWUNDO = $0040;
{$EXTERNALSYM FOF_FILESONLY}
FOF_FILESONLY = $0080; // on *.*, do only files
{$EXTERNALSYM FOF_SIMPLEPROGRESS}
FOF_SIMPLEPROGRESS = $0100; // means don't show names of files
{$EXTERNALSYM FOF_NOCONFIRMMKDIR}
FOF_NOCONFIRMMKDIR = $0200; // don't confirm making any needed dirs
{$EXTERNALSYM FOF_NOERRORUI}
FOF_NOERRORUI = $0400; // don't put up error UI
{$EXTERNALSYM FOF_NOCOPYSECURITYATTRIBS}
FOF_NOCOPYSECURITYATTRIBS = $0800; // dont copy NT file Security Attributes
{$EXTERNALSYM FOF_NORECURSION}
FOF_NORECURSION = $1000; // don't recurse into directories.
{$EXTERNALSYM FOF_NO_CONNECTED_ELEMENTS}
FOF_NO_CONNECTED_ELEMENTS = $2000; // don't operate on connected elements.
{$EXTERNALSYM FOF_WANTNUKEWARNING}
FOF_WANTNUKEWARNING = $4000; // during delete operation, warn if nuking instead of recycling (partially overrides FOF_NOCONFIRMATION)
{$EXTERNALSYM FOF_NORECURSEREPARSE}
FOF_NORECURSEREPARSE = $8000; // treat reparse points as objects, not containers
type
{$EXTERNALSYM FILEOP_FLAGS}
FILEOP_FLAGS = Word;
const
{$EXTERNALSYM PO_DELETE}
PO_DELETE = $0013; // printer is being deleted
{$EXTERNALSYM PO_RENAME}
PO_RENAME = $0014; // printer is being renamed
{$EXTERNALSYM PO_PORTCHANGE}
PO_PORTCHANGE = $0020; // 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.
{$EXTERNALSYM PO_REN_PORT}
PO_REN_PORT = $0034; // PO_RENAME and PO_PORTCHANGE at same time.
// no POF_ flags currently defined
type
{$EXTERNALSYM PRINTEROP_FLAGS}
PRINTEROP_FLAGS = Word;
// 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
type
PSHFileOpStructA = ^TSHFileOpStructA;
{$EXTERNALSYM _SHFILEOPSTRUCTA}
_SHFILEOPSTRUCTA = packed record
hwnd: HWND;
wFunc: UINT;
pFrom: PAnsiChar;
pTo: PAnsiChar;
fFlags: FILEOP_FLAGS;
fAnyOperationsAborted: BOOL;
hNameMappings: Pointer;
lpszProgressTitle: PAnsiChar; // only used if FOF_SIMPLEPROGRESS
end;
{$EXTERNALSYM SHFILEOPSTRUCTA}
SHFILEOPSTRUCTA = _SHFILEOPSTRUCTA;
TSHFileOpStructA = SHFILEOPSTRUCTA;
PSHFileOpStructW = ^TSHFileOpStructW;
{$EXTERNALSYM _SHFILEOPSTRUCTW}
_SHFILEOPSTRUCTW = packed record
hwnd: HWND;
wFunc: UINT;
pFrom: PWideChar;
pTo: PWideChar;
fFlags: FILEOP_FLAGS;
fAnyOperationsAborted: BOOL;
hNameMappings: Pointer;
lpszProgressTitle: PWideChar; // only used if FOF_SIMPLEPROGRESS
end;
{$EXTERNALSYM SHFILEOPSTRUCTW}
SHFILEOPSTRUCTW = _SHFILEOPSTRUCTW;
TSHFileOpStructW = SHFILEOPSTRUCTW;
{$IFDEF UNICODE}
{$EXTERNALSYM SHFILEOPSTRUCT}
SHFILEOPSTRUCT = SHFILEOPSTRUCTW;
TSHFileOpStruct = TSHFileOpStructW;
PSHFileOpStruct = PSHFileOpStructW;
{$ELSE} {$EXTERNALSYM SHFILEOPSTRUCT}
SHFILEOPSTRUCT = SHFILEOPSTRUCTA;
TSHFileOpStruct = TSHFileOpStructA;
PSHFileOpStruct = PSHFileOpStructA;
{$ENDIF}
{$EXTERNALSYM SHFileOperationA}
function SHFileOperationA(var lpFileOp: TSHFileOpStructA): Integer; stdcall;
{$EXTERNALSYM SHFileOperationW}
function SHFileOperationW(var lpFileOp: TSHFileOpStructW): Integer; stdcall;
{$EXTERNALSYM SHFileOperation}
function SHFileOperation(var lpFileOp: TSHFileOpStruct): Integer; stdcall;
{$EXTERNALSYM SHFreeNameMappings}
procedure SHFreeNameMappings(hNameMappings: THandle); stdcall;
type
PSHNameMappingA = ^TSHNameMappingA;
{$EXTERNALSYM _SHNAMEMAPPINGA}
_SHNAMEMAPPINGA = packed record
pszOldPath: PAnsiChar;
pszNewPath: PAnsiChar;
cchOldPath: Integer;
cchNewPath: Integer;
end;
{$EXTERNALSYM SHNAMEMAPPINGA}
SHNAMEMAPPINGA = _SHNAMEMAPPINGA;
TSHNameMappingA = SHNAMEMAPPINGA;
PSHNameMappingW = ^TSHNameMappingW;
{$EXTERNALSYM _SHNAMEMAPPINGW}
_SHNAMEMAPPINGW = packed record
pszOldPath: PWideChar;
pszNewPath: PWideChar;
cchOldPath: Integer;
cchNewPath: Integer;
end;
{$EXTERNALSYM SHNAMEMAPPINGW}
SHNAMEMAPPINGW = _SHNAMEMAPPINGW;
TSHNameMappingW = SHNAMEMAPPINGW;
{$IFDEF UNICODE}
{$EXTERNALSYM SHNAMEMAPPING}
SHNAMEMAPPING = SHNAMEMAPPINGW;
PSHNameMapping = PSHNameMappingW;
TSHNameMapping = TSHNameMappingW;
{$ELSE}
{$EXTERNALSYM SHNAMEMAPPING}
SHNAMEMAPPING = SHNAMEMAPPINGA;
PSHNameMapping = PSHNameMappingA;
TSHNameMapping = TSHNameMappingA;
{$ENDIF}
////
//// End Shell File Operations
////
////
//// Begin ShellExecuteEx and family
////
{ ShellExecute() and ShellExecuteEx() error codes }
{ regular WinExec() codes }
const
{$EXTERNALSYM SE_ERR_FNF}
SE_ERR_FNF = 2; // file not found
{$EXTERNALSYM SE_ERR_PNF}
SE_ERR_PNF = 3; // path not found
{$EXTERNALSYM SE_ERR_ACCESSDENIED}
SE_ERR_ACCESSDENIED = 5; // access denied
{$EXTERNALSYM SE_ERR_OOM}
SE_ERR_OOM = 8; // out of memory
{$EXTERNALSYM SE_ERR_DLLNOTFOUND}
SE_ERR_DLLNOTFOUND = 32;
{ error values for ShellExecute() beyond the regular WinExec() codes }
{$EXTERNALSYM SE_ERR_SHARE}
SE_ERR_SHARE = 26;
{$EXTERNALSYM SE_ERR_ASSOCINCOMPLETE}
SE_ERR_ASSOCINCOMPLETE = 27;
{$EXTERNALSYM SE_ERR_DDETIMEOUT}
SE_ERR_DDETIMEOUT = 28;
{$EXTERNALSYM SE_ERR_DDEFAIL}
SE_ERR_DDEFAIL = 29;
{$EXTERNALSYM SE_ERR_DDEBUSY}
SE_ERR_DDEBUSY = 30;
{$EXTERNALSYM SE_ERR_NOASSOC}
SE_ERR_NOASSOC = 31;
// Note CLASSKEY overrides CLASSNAME
{$EXTERNALSYM SEE_MASK_CLASSNAME}
SEE_MASK_CLASSNAME = $00000001;
{$EXTERNALSYM SEE_MASK_CLASSKEY}
SEE_MASK_CLASSKEY = $00000003;
// Note INVOKEIDLIST overrides IDLIST
{$EXTERNALSYM SEE_MASK_IDLIST}
SEE_MASK_IDLIST = $00000004;
{$EXTERNALSYM SEE_MASK_INVOKEIDLIST}
SEE_MASK_INVOKEIDLIST = $0000000C;
{$EXTERNALSYM SEE_MASK_ICON}
SEE_MASK_ICON = $00000010;
{$EXTERNALSYM SEE_MASK_HOTKEY}
SEE_MASK_HOTKEY = $00000020;
{$EXTERNALSYM SEE_MASK_NOCLOSEPROCESS}
SEE_MASK_NOCLOSEPROCESS = $00000040;
{$EXTERNALSYM SEE_MASK_CONNECTNETDRV}
SEE_MASK_CONNECTNETDRV = $00000080;
{$EXTERNALSYM SEE_MASK_NOASYNC}
SEE_MASK_NOASYNC = $00000100;
{$EXTERNALSYM SEE_MASK_FLAG_DDEWAIT}
SEE_MASK_FLAG_DDEWAIT = SEE_MASK_NOASYNC;
{$EXTERNALSYM SEE_MASK_DOENVSUBST}
SEE_MASK_DOENVSUBST = $00000200;
{$EXTERNALSYM SEE_MASK_FLAG_NO_UI}
SEE_MASK_FLAG_NO_UI = $00000400;
{$EXTERNALSYM SEE_MASK_UNICODE}
SEE_MASK_UNICODE = $00004000;
{$EXTERNALSYM SEE_MASK_NO_CONSOLE}
SEE_MASK_NO_CONSOLE = $00008000;
{$EXTERNALSYM SEE_MASK_ASYNCOK}
SEE_MASK_ASYNCOK = $00100000;
{$EXTERNALSYM SEE_MASK_HMONITOR}
SEE_MASK_HMONITOR = $00200000;
{$EXTERNALSYM SEE_MASK_NOZONECHECKS}
SEE_MASK_NOZONECHECKS = $00800000;
{$EXTERNALSYM SEE_MASK_NOQUERYCLASSSTORE}
SEE_MASK_NOQUERYCLASSSTORE = $01000000;
{$EXTERNALSYM SEE_MASK_WAITFORINPUTIDLE}
SEE_MASK_WAITFORINPUTIDLE = $02000000;
{$EXTERNALSYM SEE_MASK_FLAG_LOG_USAGE}
SEE_MASK_FLAG_LOG_USAGE = $04000000;
type
PShellExecuteInfoA = ^TShellExecuteInfoA;
{$EXTERNALSYM _SHELLEXECUTEINFOA}
_SHELLEXECUTEINFOA = packed record
cbSize: DWORD;
fMask: ULONG;
hwnd: HWND;
lpVerb: PAnsiChar;
lpFile: PAnsiChar;
lpParameters: PAnsiChar;
lpDirectory: PAnsiChar;
nShow: Integer;
hInstApp: THandle;
// Optional fields
lpIDList: Pointer;
lpClass: PAnsiChar;
hkeyClass: HKEY;
dwHotKey: DWORD;
u: packed record
case Byte of
0: (hIcon: THandle);
1: (hMonitor: THandle);
end;
hProcess: THandle;
end;
{$EXTERNALSYM SHELLEXECUTEINFOA}
SHELLEXECUTEINFOA = _SHELLEXECUTEINFOA;
TShellExecuteInfoA = SHELLEXECUTEINFOA;
PShellExecuteInfoW = ^TShellExecuteInfoW;
{$EXTERNALSYM _SHELLEXECUTEINFOW}
_SHELLEXECUTEINFOW = packed record
cbSize: DWORD;
fMask: ULONG;
hwnd: HWND;
lpVerb: PWideChar;
lpFile: PWideChar;
lpParameters: PWideChar;
lpDirectory: PWideChar;
nShow: Integer;
hInstApp: THandle;
// Optional fields
lpIDList: Pointer;
lpClass: PWideChar;
hkeyClass: HKEY;
dwHotKey: DWORD;
u: packed record
case Byte of
0: (hIcon: THandle);
1: (hMonitor: THandle);
end;
hProcess: THandle;
end;
{$EXTERNALSYM SHELLEXECUTEINFOA}
SHELLEXECUTEINFOW = _SHELLEXECUTEINFOW;
TShellExecuteInfoW = SHELLEXECUTEINFOW;
{$IFDEF UNICODE}
{$EXTERNALSYM SHELLEXECUTEINFO}
SHELLEXECUTEINFO = SHELLEXECUTEINFOW;
PShellExecuteInfo = PShellExecuteInfoW;
TShellExecuteInfo = TShellExecuteInfoW;
{$ELSE}
{$EXTERNALSYM SHELLEXECUTEINFO}
SHELLEXECUTEINFO = SHELLEXECUTEINFOA;
PShellExecuteInfo = PShellExecuteInfoA;
TShellExecuteInfo = TShellExecuteInfoA;
{$ENDIF}
{$EXTERNALSYM ShellExecuteExA}
function ShellExecuteExA(var lpExecInfo: TShellExecuteInfoA): BOOL; stdcall;
{$EXTERNALSYM ShellExecuteExW}
function ShellExecuteExW(var lpExecInfo: TShellExecuteInfoW): BOOL; stdcall;
{$EXTERNALSYM ShellExecuteEx}
function ShellExecuteEx(var lpExecInfo: TShellExecuteInfo): BOOL; stdcall;
var
{$EXTERNALSYM WinExecErrorA}
WinExecErrorA: procedure(hwnd: HWND; error: Integer; lpstrFileName, lpstrTitle: PAnsiChar); stdcall;
{$EXTERNALSYM WinExecErrorW}
WinExecErrorW: procedure(hwnd: HWND; error: Integer; lpstrFileName, lpstrTitle: PWideChar); stdcall;
{$EXTERNALSYM WinExecError}
WinExecError: procedure(hwnd: HWND; error: Integer; lpstrFileName, lpstrTitle: PTSTR); stdcall;
//
// SHCreateProcessAsUser()
type
PSHCreateProcessInfoW = ^TSHCreateProcessInfoW;
{$EXTERNALSYM _SHCREATEPROCESSINFOW}
_SHCREATEPROCESSINFOW = packed record
cbSize: DWORD;
fMask: ULONG;
hwnd: HWND;
pszFile: PWideChar;
pszParameters: PWideChar;
pszCurrentDirectory: PWideChar;
hUserToken: THandle;
lpProcessAttributes: PSecurityAttributes;
lpThreadAttributes: PSecurityAttributes;
bInheritHandles: BOOL;
dwCreationFlags: DWORD;
lpStartupInfo: PStartupInfoW;
lpProcessInformation: PProcessInformation;
end;
{$EXTERNALSYM SHCREATEPROCESSINFOW}
SHCREATEPROCESSINFOW = _SHCREATEPROCESSINFOW;
TSHCreateProcessInfoW = SHCREATEPROCESSINFOW;
{$EXTERNALSYM SHCreateProcessAsUserW}
function SHCreateProcessAsUserW(var pscpi: TSHCreateProcessInfoW): BOOL; stdcall;
////
//// End ShellExecuteEx and family
////
//
// RecycleBin
//
// struct for query recycle bin info
type
PSHQueryRBInfo = ^TSHQueryRBInfo;
{$EXTERNALSYM _SHQUERYRBINFO}
_SHQUERYRBINFO = packed record
cbSize: DWORD;
i64Size: Int64;
i64NumItems: Int64;
end;
{$EXTERNALSYM SHQUERYRBINFO}
SHQUERYRBINFO = _SHQUERYRBINFO;
TSHQueryRBInfo = SHQUERYRBINFO;
// flags for SHEmptyRecycleBin
const
{$EXTERNALSYM SHERB_NOCONFIRMATION}
SHERB_NOCONFIRMATION = $00000001;
{$EXTERNALSYM SHERB_NOPROGRESSUI}
SHERB_NOPROGRESSUI = $00000002;
{$EXTERNALSYM SHERB_NOSOUND}
SHERB_NOSOUND = $00000004;
{$EXTERNALSYM SHQueryRecycleBinA}
function SHQueryRecycleBinA(pszRootPath: PAnsiChar; var pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; stdcall;
{$EXTERNALSYM SHQueryRecycleBinW}
function SHQueryRecycleBinW(pszRootPath: PWideChar; var pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; stdcall;
{$EXTERNALSYM SHQueryRecycleBin}
function SHQueryRecycleBin(pszRootPath: PTSTR; var pSHQueryRBInfo: TSHQueryRBInfo): HRESULT; stdcall;
{$EXTERNALSYM SHEmptyRecycleBinA}
function SHEmptyRecycleBinA(hwnd: HWND; pszRootPath: PAnsiChar; dwFlags: DWORD): HRESULT; stdcall;
{$EXTERNALSYM SHEmptyRecycleBinW}
function SHEmptyRecycleBinW(hwnd: HWND; pszRootPath: PWideChar; dwFlags: DWORD): HRESULT; stdcall;
{$EXTERNALSYM SHEmptyRecycleBin}
function SHEmptyRecycleBin(hwnd: HWND; pszRootPath: PTSTR; dwFlags: DWORD): HRESULT; stdcall;
////
//// end of RecycleBin
////
//// Tray notification definitions
////
type
PNotifyIconDataA = ^TNotifyIconDataA;
{$EXTERNALSYM _NOTIFYICONDATAA}
_NOTIFYICONDATAA = packed record
cbSize: DWORD;
hWnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array[0..127] of AnsiChar;
dwState: DWORD;
dwStateMask: DWORD;
szInfo: array[0..255] of AnsiChar;
u: packed record
case Byte of
0: (uTimeout: UINT);
1: (uVersion: UINT);
end;
szInfoTitle: array[0..63] of AnsiChar;
dwInfoFlags: DWORD;
guidItem: TGUID;
end;
{$EXTERNALSYM NOTIFYICONDATAA}
NOTIFYICONDATAA = _NOTIFYICONDATAA;
TNotifyIconDataA = NOTIFYICONDATAA;
PNotifyIcondataW = ^TNotifyIconDataW;
{$EXTERNALSYM _NOTIFYICONDATAW}
_NOTIFYICONDATAW = packed record
cbSize: DWORD;
hWnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array[0..127] of WideChar;
dwState: DWORD;
dwStateMask: DWORD;
szInfo: array[0..255] of WideChar;
u: packed record
case Byte of
0: (uTimeout: UINT);
1: (uVersion: UINT);
end;
szInfoTitle: array[0..63] of WideChar;
dwInfoFlags: DWORD;
guidItem: TGUID;
end;
{$EXTERNALSYM NOTIFYICONDATAW}
NOTIFYICONDATAW = _NOTIFYICONDATAW;
TNotifyIconDataW = NOTIFYICONDATAW;
{$EXTERNALSYM NOTIFYICONDATA}
NOTIFYICONDATA = NOTIFYICONDATAA;
PNotifyIconData = PNotifyiconDataA;
TNotifyIconData = TNotifyIcondataA;
const
{$EXTERNALSYM NIN_SELECT}
NIN_SELECT = WM_USER + 0;
{$EXTERNALSYM NINF_KEY}
NINF_KEY = $1;
{$EXTERNALSYM NIN_KEYSELECT}
NIN_KEYSELECT = NIN_SELECT or NINF_KEY;
{$EXTERNALSYM NIN_BALLOONSHOW}
NIN_BALLOONSHOW = WM_USER + 2;
{$EXTERNALSYM NIN_BALLOONHIDE}
NIN_BALLOONHIDE = WM_USER + 3;
{$EXTERNALSYM NIN_BALLOONTIMEOUT}
NIN_BALLOONTIMEOUT = WM_USER + 4;
{$EXTERNALSYM NIN_BALLOONUSERCLICK}
NIN_BALLOONUSERCLICK = WM_USER + 5;
{$EXTERNALSYM NIM_ADD}
NIM_ADD = $00000000;
{$EXTERNALSYM NIM_MODIFY}
NIM_MODIFY = $00000001;
{$EXTERNALSYM NIM_DELETE}
NIM_DELETE = $00000002;
{$EXTERNALSYM NIM_SETFOCUS}
NIM_SETFOCUS = $00000003;
{$EXTERNALSYM NIM_SETVERSION}
NIM_SETVERSION = $00000004;
{$EXTERNALSYM NOTIFYICON_VERSION}
NOTIFYICON_VERSION = 3;
{$EXTERNALSYM NIF_MESSAGE}
NIF_MESSAGE = $00000001;
{$EXTERNALSYM NIF_ICON}
NIF_ICON = $00000002;
{$EXTERNALSYM NIF_TIP}
NIF_TIP = $00000004;
{$EXTERNALSYM NIF_STATE}
NIF_STATE = $00000008;
{$EXTERNALSYM NIF_INFO}
NIF_INFO = $00000010;
{$EXTERNALSYM NIF_GUID}
NIF_GUID = $00000020;
{$EXTERNALSYM NIS_HIDDEN}
NIS_HIDDEN = $00000001;
{$EXTERNALSYM NIS_SHAREDICON}
NIS_SHAREDICON = $00000002;
// says this is the source of a shared icon
// Notify Icon Infotip flags
{$EXTERNALSYM NIIF_NONE}
NIIF_NONE = $00000000;
// icon flags are mutually exclusive
// and take only the lowest 2 bits
{$EXTERNALSYM NIIF_INFO}
NIIF_INFO = $00000001;
{$EXTERNALSYM NIIF_WARNING}
NIIF_WARNING = $00000002;
{$EXTERNALSYM NIIF_ERROR}
NIIF_ERROR = $00000003;
{$EXTERNALSYM NIIF_USER}
NIIF_USER = $00000004;
{$EXTERNALSYM NIIF_ICON_MASK}
NIIF_ICON_MASK = $0000000F;
{$EXTERNALSYM NIIF_NOSOUND}
NIIF_NOSOUND = $00000010;
{$EXTERNALSYM Shell_NotifyIconA}
function Shell_NotifyIconA(dwMessage: DWORD; lpData: PNOTIFYICONDATAA): BOOL; stdcall;
{$EXTERNALSYM Shell_NotifyIconW}
function Shell_NotifyIconW(dwMessage: DWORD; lpData: PNOTIFYICONDATAW): BOOL; stdcall;
{$EXTERNALSYM Shell_NotifyIcon}
function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNOTIFYICONDATA): BOOL; stdcall;
////
//// End Tray Notification Icons
////
////
//// Begin SHGetFileInfo
////
{
* 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
}
type
PSHFileInfoA = ^TSHFileInfoA;
{$EXTERNALSYM _SHFILEINFOA}
_SHFILEINFOA = packed record
hIcon: HICON; // out: icon
iIcon: Integer; // out: icon index
dwAttributes: DWORD; // out: SFGAO_ flags
szDisplayName: array[0..MAX_PATH - 1] of AnsiChar; // out: display name (or path)
szTypeName: array[0..79] of AnsiChar; // out: type name
end;
{$EXTERNALSYM SHFILEINFOA}
SHFILEINFOA = _SHFILEINFOA;
TSHFileInfoA = _SHFILEINFOA;
PSHFileInfoW = ^TSHFileInfoW;
{$EXTERNALSYM _SHFILEINFOW}
_SHFILEINFOW = packed record
hIcon: HICON; // out: icon
iIcon: Integer; // out: icon index
dwAttributes: DWORD; // out: SFGAO_ flags
szDisplayName: array[0..MAX_PATH - 1] of WideChar; // out: display name (or path)
szTypeName: array[0..79] of WideChar; // out: type name
end;
{$EXTERNALSYM SHFILEINFOW}
SHFILEINFOW = _SHFILEINFOW;
TSHFileInfoW = _SHFILEINFOW;
{$EXTERNALSYM SHFILEINFO}
SHFILEINFO = SHFILEINFOA;
TSHFileInfo = TSHFileInfoA;
PSHFIleInfo = PSHFileInfoA;
const
{$EXTERNALSYM SHGFI_ICON}
SHGFI_ICON = $000000100; // get icon
{$EXTERNALSYM SHGFI_DISPLAYNAME}
SHGFI_DISPLAYNAME = $000000200; // get display name
{$EXTERNALSYM SHGFI_TYPENAME}
SHGFI_TYPENAME = $000000400; // get type name
{$EXTERNALSYM SHGFI_ATTRIBUTES}
SHGFI_ATTRIBUTES = $000000800; // get attributes
{$EXTERNALSYM SHGFI_ICONLOCATION}
SHGFI_ICONLOCATION = $000001000; // get icon location
{$EXTERNALSYM SHGFI_EXETYPE}
SHGFI_EXETYPE = $000002000; // return exe type
{$EXTERNALSYM SHGFI_SYSICONINDEX}
SHGFI_SYSICONINDEX = $000004000; // get system icon index
{$EXTERNALSYM SHGFI_LINKOVERLAY}
SHGFI_LINKOVERLAY = $000008000; // put a link overlay on icon
{$EXTERNALSYM SHGFI_SELECTED}
SHGFI_SELECTED = $000010000; // show icon in selected state
{$EXTERNALSYM SHGFI_ATTR_SPECIFIED}
SHGFI_ATTR_SPECIFIED = $000020000; // get only specified attributes
{$EXTERNALSYM SHGFI_LARGEICON}
SHGFI_LARGEICON = $000000000; // get large icon
{$EXTERNALSYM SHGFI_SMALLICON}
SHGFI_SMALLICON = $000000001; // get small icon
{$EXTERNALSYM SHGFI_OPENICON}
SHGFI_OPENICON = $000000002; // get open icon
{$EXTERNALSYM SHGFI_SHELLICONSIZE}
SHGFI_SHELLICONSIZE = $000000004; // get shell size icon
{$EXTERNALSYM SHGFI_PIDL}
SHGFI_PIDL = $000000008; // pszPath is a pidl
{$EXTERNALSYM SHGFI_USEFILEATTRIBUTES}
SHGFI_USEFILEATTRIBUTES = $000000010; // use passed dwFileAttribute
{$EXTERNALSYM SHGFI_ADDOVERLAYS}
SHGFI_ADDOVERLAYS = $000000020; // apply the appropriate overlays
{$EXTERNALSYM SHGFI_OVERLAYINDEX}
SHGFI_OVERLAYINDEX = $000000040; // Get the index of the overlay
// in the upper 8 bits of the iIcon
{$EXTERNALSYM SHGetFileInfoA}
function SHGetFileInfoA(pszPath: PAnsiChar; dwFileAttributes: DWORD; var psfi: TSHFileInfoA; cbFileInfo, uFlags: UINT): DWORD; stdcall;
{$EXTERNALSYM SHGetFileInfoW}
function SHGetFileInfoW(pszPath: PWideChar; dwFileAttributes: DWORD; var psfi: TSHFileInfoW; cbFileInfo, uFlags: UINT): DWORD; stdcall;
{$EXTERNALSYM SHGetFileInfo}
function SHGetFileInfo(pszPath: PTSTR; dwFileAttributes: DWORD; var psfi: TSHFileInfo; cbFileInfo, uFlags: UINT): DWORD; stdcall;
{$EXTERNALSYM SHGetDiskFreeSpaceExA}
function SHGetDiskFreeSpaceExA(pszDirectoryName: PAnsiChar; var pulFreeBytesAvailableToCaller, pulTotalNumberOfBytes, pulTotalNumberOfFreeBytes: ULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM SHGetDiskFreeSpaceExW}
function SHGetDiskFreeSpaceExW(pszDirectoryName: PWideChar; var pulFreeBytesAvailableToCaller, pulTotalNumberOfBytes, pulTotalNumberOfFreeBytes: ULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM SHGetDiskFreeSpaceEx}
function SHGetDiskFreeSpaceEx(pszDirectoryName: PTSTR; var pulFreeBytesAvailableToCaller, pulTotalNumberOfBytes, pulTotalNumberOfFreeBytes: ULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM SHGetDiskFreeSpaceA}
function SHGetDiskFreeSpaceA(pszDirectoryName: PAnsiChar; var pulFreeBytesAvailableToCaller, pulTotalNumberOfBytes, pulTotalNumberOfFreeBytes: ULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM SHGetDiskFreeSpaceW}
function SHGetDiskFreeSpaceW(pszDirectoryName: PWideChar; var pulFreeBytesAvailableToCaller, pulTotalNumberOfBytes, pulTotalNumberOfFreeBytes: ULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM SHGetDiskFreeSpace}
function SHGetDiskFreeSpace(pszDirectoryName: PTSTR; var pulFreeBytesAvailableToCaller, pulTotalNumberOfBytes, pulTotalNumberOfFreeBytes: ULARGE_INTEGER): BOOL; stdcall;
{$EXTERNALSYM SHGetNewLinkInfoA}
function SHGetNewLinkInfoA(pszLinkTo, pszDir, pszName: PAnsiChar; var pfMustCopy: BOOL; uFlags: UINT): BOOL; stdcall;
{$EXTERNALSYM SHGetNewLinkInfoW}
function SHGetNewLinkInfoW(pszLinkTo, pszDir, pszName: PWideChar; var pfMustCopy: BOOL; uFlags: UINT): BOOL; stdcall;
{$EXTERNALSYM SHGetNewLinkInfo}
function SHGetNewLinkInfo(pszLinkTo, pszDir, pszName: PTSTR; var pfMustCopy: BOOL; uFlags: UINT): BOOL; stdcall;
const
{$EXTERNALSYM SHGNLI_PIDL}
SHGNLI_PIDL = $000000001; // pszLinkTo is a pidl
{$EXTERNALSYM SHGNLI_PREFIXNAME}
SHGNLI_PREFIXNAME = $000000002; // Make name "Shortcut to xxx"
{$EXTERNALSYM SHGNLI_NOUNIQUE}
SHGNLI_NOUNIQUE = $000000004; // don't do the unique name generation
{$EXTERNALSYM SHGNLI_NOLNK}
SHGNLI_NOLNK = $000000008; // don't add ".lnk" extension
////
//// End SHGetFileInfo
////
// Printer stuff
const
{$EXTERNALSYM PRINTACTION_OPEN}
PRINTACTION_OPEN = 0;
{$EXTERNALSYM PRINTACTION_PROPERTIES}
PRINTACTION_PROPERTIES = 1;
{$EXTERNALSYM PRINTACTION_NETINSTALL}
PRINTACTION_NETINSTALL = 2;
{$EXTERNALSYM PRINTACTION_NETINSTALLLINK}
PRINTACTION_NETINSTALLLINK = 3;
{$EXTERNALSYM PRINTACTION_TESTPAGE}
PRINTACTION_TESTPAGE = 4;
{$EXTERNALSYM PRINTACTION_OPENNETPRN}
PRINTACTION_OPENNETPRN = 5;
{$EXTERNALSYM PRINTACTION_DOCUMENTDEFAULTS}
PRINTACTION_DOCUMENTDEFAULTS = 6;
{$EXTERNALSYM PRINTACTION_SERVERPROPERTIES}
PRINTACTION_SERVERPROPERTIES = 7;
{$EXTERNALSYM SHInvokePrinterCommandA}
function SHInvokePrinterCommandA(hwnd: HWND; uAction: UINT; lpBuf1, lpBuf2: PAnsiChar; fModal: BOOL): BOOL; stdcall;
{$EXTERNALSYM SHInvokePrinterCommandW}
function SHInvokePrinterCommandW(hwnd: HWND; uAction: UINT; lpBuf1, lpBuf2: PWideChar; fModal: BOOL): BOOL; stdcall;
{$EXTERNALSYM SHInvokePrinterCommand}
function SHInvokePrinterCommand(hwnd: HWND; uAction: UINT; lpBuf1, lpBuf2: PTSTR; fModal: BOOL): BOOL; stdcall;
//
// The SHLoadNonloadedIconOverlayIdentifiers API causes the shell's
// icon overlay manager to load any registered icon overlay
// identifers that are not currently loaded. This is useful if an
// overlay identifier did not load at shell startup but is needed
// and can be loaded at a later time. Identifiers already loaded
// are not affected. Overlay identifiers implement the
// IShellIconOverlayIdentifier interface.
//
// Returns:
// S_OK
//
{$EXTERNALSYM SHLoadNonloadedIconOverlayIdentifiers}
function SHLoadNonloadedIconOverlayIdentifiers: HRESULT; stdcall;
//
// The SHIsFileAvailableOffline API determines whether a file
// or folder is available for offline use.
//
// Parameters:
// pwszPath file name to get info about
// pdwStatus (optional) OFFLINE_STATUS_* flags returned here
//
// Returns:
// S_OK File/directory is available offline, unless
// OFFLINE_STATUS_INCOMPLETE is returned.
// E_INVALIDARG Path is invalid, or not a net path
// E_FAIL File/directory is not available offline
//
// Notes:
// OFFLINE_STATUS_INCOMPLETE is never returned for directories.
// Both OFFLINE_STATUS_LOCAL and OFFLINE_STATUS_REMOTE may be returned,
// indicating "open in both places." This is common when the server is online.
//
{$EXTERNALSYM SHIsFileAvailableOffline}
function SHIsFileAvailableOffline(pwszPath: PWideChar; var pdwStatus: DWORD): HRESULT; stdcall;
const
{$EXTERNALSYM OFFLINE_STATUS_LOCAL}
OFFLINE_STATUS_LOCAL = $0001; // If open, it's open locally
{$EXTERNALSYM OFFLINE_STATUS_REMOTE}
OFFLINE_STATUS_REMOTE = $0002; // If open, it's open remotely
{$EXTERNALSYM OFFLINE_STATUS_INCOMPLETE}
OFFLINE_STATUS_INCOMPLETE = $0004; // The local copy is currently imcomplete.
// 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
{$EXTERNALSYM SHSetLocalizedName}
function SHSetLocalizedName(pszPath, pszResModule: PWideChar; idsRes: Integer): HRESULT; stdcall;
//====== ShellMessageBox ================================================
// If lpcTitle is NULL, the title is taken from hWnd
// If lpcText is NULL, this is assumed to be an Out Of Memory message
// If the selector of lpcTitle or lpcText is NULL, the offset should be a
// string resource ID
// The variable arguments must all be 32-bit values (even if fewer bits
// are actually used)
// lpcText (or whatever string resource it causes to be loaded) should
// be a formatting string similar to wsprintf except that only the
// following formats are available:
// %% formats to a single '%'
// %nn%s the nn-th arg is a string which is inserted
// %nn%ld the nn-th arg is a DWORD, and formatted decimal
// %nn%lx the nn-th arg is a DWORD, and formatted hex
// note that lengths are allowed on the %s, %ld, and %lx, just
// like wsprintf
//
{$IFDEF DELPHI6_UP}
//variable arguments are not supported in delphi 5
//maybe this also applies to d6
{$EXTERNALSYM ShellMessageBoxA}
function ShellMessageBoxA(hAppInst: THandle; hWnd: HWND; lpcText, lpcTitle: PAnsiChar; fuStyle: UINT): Integer; cdecl; varargs;
{$EXTERNALSYM ShellMessageBoxW}
function ShellMessageBoxW(hAppInst: THandle; hWnd: HWND; lpcText, lpcTitle: PWideChar; fuStyle: UINT): Integer; cdecl; varargs;
{$EXTERNALSYM ShellMessageBox}
function ShellMessageBox(hAppInst: THandle; hWnd: HWND; lpcText, lpcTitle: PTSTR; fuStyle: UINT): Integer; cdecl; varargs;
{$ENDIF DELPHI6_UP}
{$EXTERNALSYM IsLFNDriveA}
function IsLFNDriveA(pszPath: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM IsLFNDriveW}
function IsLFNDriveW(pszPath: PWideChar): BOOL; stdcall;
{$EXTERNALSYM IsLFNDrive}
function IsLFNDrive(pszPath: PTSTR): BOOL; stdcall;
{The following 3 functions are only available as unicode version.
MSDN states this correctly, however all SDK's define also an ansicode version.
We just define W variant!
}
function SHGetUnreadMailCountW(hKeyUser: Thandle; pszMailAddress: PWideChar; out pdwCount: DWORD; var pFileTime: TFileTime; pszShellExecuteCommand: PWideChar;
cchShellExecuteCommand: Integer): HRESULT; stdcall;
function SHEnumerateUnreadMailAccountsW(hKeyUser: THandle; dwIndex: DWORD; pszMailAddress: PWideChar; cchMailAddress: Integer): HRESULT; stdcall;
function SHSetUnreadMailCountW(pszMailAddress: PWideChar; dwCount: DWORD; pszShellExecuteCommand: PWideChar): HRESULT; stdcall;
{$EXTERNALSYM SHTestTokenMembership}
function SHTestTokenMembership(hToken: THandle; ulRID: ULONG): BOOL; stdcall;
{$EXTERNALSYM SHGetImageList}
function SHGetImageList(iImageList: Integer; riid: TGUID; out ppvObj: Pointer): HRESULT; stdcall;
const
{$EXTERNALSYM SHIL_LARGE}
SHIL_LARGE = 0; // normally 32x32
{$EXTERNALSYM SHIL_SMALL}
SHIL_SMALL = 1; // normally 16x16
{$EXTERNALSYM SHIL_EXTRALARGE}
SHIL_EXTRALARGE = 2;
{$EXTERNALSYM SHIL_SYSSMALL}
SHIL_SYSSMALL = 3; // like SHIL_SMALL, but tracks system small icon metric correctly
{$EXTERNALSYM SHIL_LAST}
SHIL_LAST = SHIL_SYSSMALL;
// Function call types for ntshrui folder sharing helpers
type
{$EXTERNALSYM PFNCANSHAREFOLDERW}
PFNCANSHAREFOLDERW = function(pszPath: PWideChar): HRESULT stdcall;
TFnCanShareFolderW = PFNCANSHAREFOLDERW;
{$EXTERNALSYM PFNSHOWSHAREFOLDERUIW}
PFNSHOWSHAREFOLDERUIW = function(hwndParent: HWND; pszPath: PWideChar): HRESULT stdcall;
TFnShowShareFolderUIW = PFNSHOWSHAREFOLDERUIW;
{$ENDIF JWA_IMPLEMENTATIONSECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
implementation
uses JwaWinDLLNames;
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_INCLUDEMODE}
const
{$IFDEF UNICODE}
AWSuffix = 'W';
{$ELSE}
AWSuffix = 'A';
{$ENDIF UNICODE}
{$ENDIF JWA_INCLUDEMODE}
{$IFNDEF JWA_INTERFACESECTION}
// Macro function
function EIRESID(x: Integer): Integer;
begin
Result := -x;
end;
{$IFDEF DELPHI6_UP}
//cannot be dynamical because of varargs
function ShellMessageBoxA; external Shell32 name 'ShellMessageBoxA';
function ShellMessageBoxW; external Shell32 name 'ShellMessageBoxW';
function ShellMessageBox; external Shell32 name 'ShellMessageBox'+ AWSuffix;
{$ENDIF}
{$IFNDEF DYNAMIC_LINK}
function DragQueryFileA; external Shell32 name 'DragQueryFileA';
function DragQueryFileW; external Shell32 name 'DragQueryFileW';
function DragQueryFile; external Shell32 name 'DragQueryFile' + AWSuffix;
function DragQueryPoint; external Shell32 name 'DragQueryPoint';
procedure DragFinish; external Shell32 name 'DragFinish';
procedure DragAcceptFiles; external Shell32 name 'DragAcceptFiles';
function ShellExecuteA; external Shell32 name 'ShellExecuteA';
function ShellExecuteW; external Shell32 name 'ShellExecuteW';
function ShellExecute; external Shell32 name 'ShellExecute' + AWSuffix;
function FindExecutableA; external Shell32 name 'FindExecutableA';
function FindExecutableW; external Shell32 name 'FindExecutableW';
function FindExecutable; external Shell32 name 'FindExecutable' + AWSuffix;
function CommandLineToArgvW; external Shell32 name 'CommandLineToArgvW';
function ShellAboutA; external Shell32 name 'ShellAboutA';
function ShellAboutW; external Shell32 name 'ShellAboutW';
function ShellAbout; external Shell32 name 'ShellAbout' + AWSuffix;
function DuplicateIcon; external Shell32 name 'DuplicateIcon';
function ExtractAssociatedIconA; external Shell32 name 'ExtractAssociatedIconA';
function ExtractAssociatedIconW; external Shell32 name 'ExtractAssociatedIconW';
function ExtractAssociatedIcon; external Shell32 name 'ExtractAssociatedIcon' + AWSuffix;
function ExtractAssociatedIconExA; external Shell32 name 'ExtractAssociatedIconExA';
function ExtractAssociatedIconExW; external Shell32 name 'ExtractAssociatedIconExW';
function ExtractAssociatedIconEx; external Shell32 name 'ExtractAssociatedIconEx' + AWSuffix;
function ExtractIconA; external Shell32 name 'ExtractIconA';
function ExtractIconW; external Shell32 name 'ExtractIconW';
function ExtractIcon; external Shell32 name 'ExtractIcon' + AWSuffix;
function SHAppBarMessage; external Shell32 name 'SHAppBarMessage';
function DoEnvironmentSubstA; external Shell32 name 'DoEnvironmentSubstA';
function DoEnvironmentSubstW; external Shell32 name 'DoEnvironmentSubstW';
function DoEnvironmentSubst; external Shell32 name 'DoEnvironmentSubst' + AWSuffix;
function ExtractIconExA; external Shell32 name 'ExtractIconExA';
function ExtractIconExW; external Shell32 name 'ExtractIconExW';
function ExtractIconEx; external Shell32 name 'ExtractIconEx' + AWSuffix;
function SHFileOperationA; external Shell32 name 'SHFileOperationA';
function SHFileOperationW; external Shell32 name 'SHFileOperationW';
function SHFileOperation; external Shell32 name 'SHFileOperation' + AWSuffix;
procedure SHFreeNameMappings; external Shell32 name 'SHFreeNameMappings';
function ShellExecuteExA; external Shell32 name 'ShellExecuteExA';
function ShellExecuteExW; external Shell32 name 'ShellExecuteExW';
function ShellExecuteEx; external Shell32 name 'ShellExecuteEx' + AWSuffix;
function SHCreateProcessAsUserW; external Shell32 name 'SHCreateProcessAsUserW';
function SHQueryRecycleBinA; external Shell32 name 'SHQueryRecycleBinA';
function SHQueryRecycleBinW; external Shell32 name 'SHQueryRecycleBinW';
function SHQueryRecycleBin; external Shell32 name 'SHQueryRecycleBin' + AWSuffix;
function SHEmptyRecycleBinA; external Shell32 name 'SHEmptyRecycleBinA';
function SHEmptyRecycleBinW; external Shell32 name 'SHEmptyRecycleBinW';
function SHEmptyRecycleBin; external Shell32 name 'SHEmptyRecycleBin'+ AWSuffix;
function Shell_NotifyIconA; external Shell32 name 'Shell_NotifyIconA';
function Shell_NotifyIconW; external Shell32 name 'Shell_NotifyIconW';
function Shell_NotifyIcon; external Shell32 name 'Shell_NotifyIcon'+ AWSuffix;
function SHGetFileInfoA; external Shell32 name 'SHGetFileInfoA';
function SHGetFileInfoW; external Shell32 name 'SHGetFileInfoW';
function SHGetFileInfo; external Shell32 name 'SHGetFileInfo'+ AWSuffix;
function SHGetDiskFreeSpaceExA; external Shell32 name 'SHGetDiskFreeSpaceExA';
function SHGetDiskFreeSpaceExW; external Shell32 name 'SHGetDiskFreeSpaceExW';
function SHGetDiskFreeSpaceEx; external Shell32 name 'SHGetDiskFreeSpaceEx'+ AWSuffix;
function SHGetDiskFreeSpaceA; external Shell32 name 'SHGetDiskFreeSpaceExA';
function SHGetDiskFreeSpaceW; external Shell32 name 'SHGetDiskFreeSpaceExW';
function SHGetDiskFreeSpace; external Shell32 name 'SHGetDiskFreeSpaceEx'+ AWSuffix;
function SHGetNewLinkInfoA; external Shell32 name 'SHGetNewLinkInfoA';
function SHGetNewLinkInfoW; external Shell32 name 'SHGetNewLinkInfoW';
function SHGetNewLinkInfo; external Shell32 name 'SHGetNewLinkInfo'+ AWSuffix;
function SHInvokePrinterCommandA; external Shell32 name 'SHInvokePrinterCommandA';
function SHInvokePrinterCommandW; external Shell32 name 'SHInvokePrinterCommandW';
function SHInvokePrinterCommand; external Shell32 name 'SHInvokePrinterCommand'+ AWSuffix;
function SHLoadNonloadedIconOverlayIdentifiers; external Shell32 name 'SHLoadNonloadedIconOverlayIdentifiers';
function SHIsFileAvailableOffline; external Shell32 name 'SHIsFileAvailableOffline';
function SHSetLocalizedName; external Shell32 name 'SHSetLocalizedName';
function IsLFNDriveA; external Shell32 name 'IsLFNDriveA';
function IsLFNDriveW; external Shell32 name 'IsLFNDriveW';
function IsLFNDrive; external Shell32 name 'IsLFNDrive'+ AWSuffix;
function SHTestTokenMembership; external Shell32 name 'SHTestTokenMembership';
function SHGetImageList; external Shell32 name 'SHGetImageList';
function SHGetUnreadMailCountW; external Shell32 name 'SHGetUnreadMailCountW';
function SHEnumerateUnreadMailAccountsW; external Shell32 name 'SHEnumerateUnreadMailAccountsW';
function SHSetUnreadMailCountW; external Shell32 name 'SHSetUnreadMailCountW';
{$ELSE}
var
_DragQueryFileA: Pointer;
function DragQueryFileA;
begin
GetProcedureAddress(_DragQueryFileA, Shell32, 'DragQueryFileA');
asm
MOV ESP, EBP
POP EBP
JMP [_DragQueryFileA]
end;
end;
var
_DragQueryFileW: Pointer;
function DragQueryFileW;
begin
GetProcedureAddress(_DragQueryFileW, Shell32, 'DragQueryFileW');
asm
MOV ESP, EBP
POP EBP
JMP [_DragQueryFileW]
end;
end;
var
_DragQueryFile: Pointer;
function DragQueryFile;
begin
GetProcedureAddress(_DragQueryFile, Shell32, 'DragQueryFile'+ AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_DragQueryFile]
end;
end;
var
_DragQueryPoint: Pointer;
function DragQueryPoint;
begin
GetProcedureAddress(_DragQueryPoint, Shell32, 'DragQueryPoint');
asm
MOV ESP, EBP
POP EBP
JMP [_DragQueryPoint]
end;
end;
var
_DragFinish: Pointer;
procedure DragFinish;
begin
GetProcedureAddress(_DragFinish, Shell32, 'DragFinish');
asm
MOV ESP, EBP
POP EBP
JMP [_DragFinish]
end;
end;
var
_DragAcceptFiles: Pointer;
procedure DragAcceptFiles;
begin
GetProcedureAddress(_DragAcceptFiles, Shell32, 'DragAcceptFiles');
asm
MOV ESP, EBP
POP EBP
JMP [_DragAcceptFiles]
end;
end;
var
_ShellExecuteA: Pointer;
function ShellExecuteA;
begin
GetProcedureAddress(_ShellExecuteA, Shell32, 'ShellExecuteA');
asm
MOV ESP, EBP
POP EBP
JMP [_ShellExecuteA]
end;
end;
var
_ShellExecuteW: Pointer;
function ShellExecuteW;
begin
GetProcedureAddress(_ShellExecuteW, Shell32, 'ShellExecuteW');
asm
MOV ESP, EBP
POP EBP
JMP [_ShellExecuteW]
end;
end;
var
_ShellExecute: Pointer;
function ShellExecute;
begin
GetProcedureAddress(_ShellExecute, Shell32, 'ShellExecute'+ AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_ShellExecute]
end;
end;
var
_FindExecutableA: Pointer;
function FindExecutableA;
begin
GetProcedureAddress(_FindExecutableA, Shell32, 'FindExecutableA');
asm
MOV ESP, EBP
POP EBP
JMP [_FindExecutableA]
end;
end;
var
_FindExecutableW: Pointer;
function FindExecutableW;
begin
GetProcedureAddress(_FindExecutableW, Shell32, 'FindExecutableW');
asm
MOV ESP, EBP
POP EBP
JMP [_FindExecutableW]
end;
end;
var
_FindExecutable: Pointer;
function FindExecutable;
begin
GetProcedureAddress(_FindExecutable, Shell32, 'FindExecutable'+ AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_FindExecutable]
end;
end;
var
_CommandLineToArgvW: Pointer;
function CommandLineToArgvW;
begin
GetProcedureAddress(_CommandLineToArgvW, Shell32, 'CommandLineToArgvW');
asm
MOV ESP, EBP
POP EBP
JMP [_CommandLineToArgvW]
end;
end;
var
_ShellAboutA: Pointer;
function ShellAboutA;
begin
GetProcedureAddress(_ShellAboutA, Shell32, 'ShellAboutA');
asm
MOV ESP, EBP
POP EBP
JMP [_ShellAboutA]
end;
end;
var
_ShellAboutW: Pointer;
function ShellAboutW;
begin
GetProcedureAddress(_ShellAboutW, Shell32, 'ShellAboutW');
asm
MOV ESP, EBP
POP EBP
JMP [_ShellAboutW]
end;
end;
var
_ShellAbout: Pointer;
function ShellAbout;
begin
GetProcedureAddress(_ShellAbout, Shell32, 'ShellAbout'+ AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_ShellAbout]
end;
end;
var
_DuplicateIcon: Pointer;
function DuplicateIcon;
begin
GetProcedureAddress(_DuplicateIcon, Shell32, 'DuplicateIcon');
asm
MOV ESP, EBP
POP EBP
JMP [_DuplicateIcon]
end;
end;
var
_ExtractAssociatedIconA: Pointer;
function ExtractAssociatedIconA;
begin
GetProcedureAddress(_ExtractAssociatedIconA, Shell32, 'ExtractAssociatedIconA');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractAssociatedIconA]
end;
end;
var
_ExtractAssociatedIconW: Pointer;
function ExtractAssociatedIconW;
begin
GetProcedureAddress(_ExtractAssociatedIconW, Shell32, 'ExtractAssociatedIconW');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractAssociatedIconW]
end;
end;
var
_ExtractAssociatedIcon: Pointer;
function ExtractAssociatedIcon;
begin
GetProcedureAddress(_ExtractAssociatedIcon, Shell32, 'ExtractAssociatedIcon'+ AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractAssociatedIcon]
end;
end;
var
_ExtractAssociatedIconExA: Pointer;
function ExtractAssociatedIconExA;
begin
GetProcedureAddress(_ExtractAssociatedIconExA, Shell32, 'ExtractAssociatedIconExA');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractAssociatedIconExA]
end;
end;
var
_ExtractAssociatedIconExW: Pointer;
function ExtractAssociatedIconExW;
begin
GetProcedureAddress(_ExtractAssociatedIconExW, Shell32, 'ExtractAssociatedIconExW');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractAssociatedIconExW]
end;
end;
var
_ExtractAssociatedIconEx: Pointer;
function ExtractAssociatedIconEx;
begin
GetProcedureAddress(_ExtractAssociatedIconEx, Shell32, 'ExtractAssociatedIconEx'+ AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractAssociatedIconEx]
end;
end;
var
_ExtractIconA: Pointer;
function ExtractIconA;
begin
GetProcedureAddress(_ExtractIconA, Shell32, 'ExtractIconA');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractIconA]
end;
end;
var
_ExtractIconW: Pointer;
function ExtractIconW;
begin
GetProcedureAddress(_ExtractIconW, Shell32, 'ExtractIconW');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractIconW]
end;
end;
var
_ExtractIcon: Pointer;
function ExtractIcon;
begin
GetProcedureAddress(_ExtractIcon, Shell32, 'ExtractIcon' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractIcon]
end;
end;
var
_SHAppBarMessage: Pointer;
function SHAppBarMessage;
begin
GetProcedureAddress(_SHAppBarMessage, Shell32, 'SHAppBarMessage');
asm
MOV ESP, EBP
POP EBP
JMP [_SHAppBarMessage]
end;
end;
var
_DoEnvironmentSubstA: Pointer;
function DoEnvironmentSubstA;
begin
GetProcedureAddress(_DoEnvironmentSubstA, Shell32, 'DoEnvironmentSubstA');
asm
MOV ESP, EBP
POP EBP
JMP [_DoEnvironmentSubstA]
end;
end;
var
_DoEnvironmentSubstW: Pointer;
function DoEnvironmentSubstW;
begin
GetProcedureAddress(_DoEnvironmentSubstW, Shell32, 'DoEnvironmentSubstW');
asm
MOV ESP, EBP
POP EBP
JMP [_DoEnvironmentSubstW]
end;
end;
var
_DoEnvironmentSubst: Pointer;
function DoEnvironmentSubst;
begin
GetProcedureAddress(_DoEnvironmentSubst, Shell32, 'DoEnvironmentSubst' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_DoEnvironmentSubst]
end;
end;
var
_ExtractIconExA: Pointer;
function ExtractIconExA;
begin
GetProcedureAddress(_ExtractIconExA, Shell32, 'ExtractIconExA');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractIconExA]
end;
end;
var
_ExtractIconExW: Pointer;
function ExtractIconExW;
begin
GetProcedureAddress(_ExtractIconExW, Shell32, 'ExtractIconExW');
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractIconExW]
end;
end;
var
_ExtractIconEx: Pointer;
function ExtractIconEx;
begin
GetProcedureAddress(_ExtractIconEx, Shell32, 'ExtractIconEx' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_ExtractIconEx]
end;
end;
var
_SHFileOperationA: Pointer;
function SHFileOperationA;
begin
GetProcedureAddress(_SHFileOperationA, Shell32, 'SHFileOperationA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHFileOperationA]
end;
end;
var
_SHFileOperationW: Pointer;
function SHFileOperationW;
begin
GetProcedureAddress(_SHFileOperationW, Shell32, 'SHFileOperationW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHFileOperationW]
end;
end;
var
_SHFileOperation: Pointer;
function SHFileOperation;
begin
GetProcedureAddress(_SHFileOperation, Shell32, 'SHFileOperation' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHFileOperation]
end;
end;
var
_SHFreeNameMappings: Pointer;
procedure SHFreeNameMappings;
begin
GetProcedureAddress(_SHFreeNameMappings, Shell32, 'SHFreeNameMappings');
asm
MOV ESP, EBP
POP EBP
JMP [_SHFreeNameMappings]
end;
end;
var
_ShellExecuteExA: Pointer;
function ShellExecuteExA;
begin
GetProcedureAddress(_ShellExecuteExA, Shell32, 'ShellExecuteExA');
asm
MOV ESP, EBP
POP EBP
JMP [_ShellExecuteExA]
end;
end;
var
_ShellExecuteExW: Pointer;
function ShellExecuteExW;
begin
GetProcedureAddress(_ShellExecuteExW, Shell32, 'ShellExecuteExW');
asm
MOV ESP, EBP
POP EBP
JMP [_ShellExecuteExW]
end;
end;
var
_ShellExecuteEx: Pointer;
function ShellExecuteEx;
begin
GetProcedureAddress(_ShellExecuteEx, Shell32, 'ShellExecuteEx' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_ShellExecuteEx]
end;
end;
var
_SHCreateProcessAsUserW: Pointer;
function SHCreateProcessAsUserW;
begin
GetProcedureAddress(_SHCreateProcessAsUserW, Shell32, 'SHCreateProcessAsUserW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHCreateProcessAsUserW]
end;
end;
var
_SHQueryRecycleBinA: Pointer;
function SHQueryRecycleBinA;
begin
GetProcedureAddress(_SHQueryRecycleBinA, Shell32, 'SHQueryRecycleBinA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHQueryRecycleBinA]
end;
end;
var
_SHQueryRecycleBinW: Pointer;
function SHQueryRecycleBinW;
begin
GetProcedureAddress(_SHQueryRecycleBinW, Shell32, 'SHQueryRecycleBinW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHQueryRecycleBinW]
end;
end;
var
_SHQueryRecycleBin: Pointer;
function SHQueryRecycleBin;
begin
GetProcedureAddress(_SHQueryRecycleBin, Shell32, 'SHQueryRecycleBin' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHQueryRecycleBin]
end;
end;
var
_SHEmptyRecycleBinA: Pointer;
function SHEmptyRecycleBinA;
begin
GetProcedureAddress(_SHEmptyRecycleBinA, Shell32, 'SHEmptyRecycleBinA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHEmptyRecycleBinA]
end;
end;
var
_SHEmptyRecycleBinW: Pointer;
function SHEmptyRecycleBinW;
begin
GetProcedureAddress(_SHEmptyRecycleBinW, Shell32, 'SHEmptyRecycleBinW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHEmptyRecycleBinW]
end;
end;
var
_SHEmptyRecycleBin: Pointer;
function SHEmptyRecycleBin;
begin
GetProcedureAddress(_SHEmptyRecycleBin, Shell32, 'SHEmptyRecycleBin' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHEmptyRecycleBin]
end;
end;
var
_Shell_NotifyIconA_NotifyIconA: Pointer;
procedure Shell_NotifyIconA_NotifyIconA;
begin
GetProcedureAddress(_Shell_NotifyIconA_NotifyIconA, Shell32, 'Shell_NotifyIconA_NotifyIconA');
asm
MOV ESP, EBP
POP EBP
JMP [_Shell_NotifyIconA_NotifyIconA]
end;
end;
var
_Shell_NotifyIconW_NotifyIconW: Pointer;
procedure Shell_NotifyIconW_NotifyIconW;
begin
GetProcedureAddress(_Shell_NotifyIconW_NotifyIconW, Shell32, 'Shell_NotifyIconW_NotifyIconW');
asm
MOV ESP, EBP
POP EBP
JMP [_Shell_NotifyIconW_NotifyIconW]
end;
end;
var
_Shell_NotifyIcon_NotifyIcon: Pointer;
procedure Shell_NotifyIcon_NotifyIcon;
begin
GetProcedureAddress(_Shell_NotifyIcon_NotifyIcon, Shell32, 'Shell_NotifyIcon_NotifyIcon' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_Shell_NotifyIcon_NotifyIcon]
end;
end;
var
_SHGetFileInfoA: Pointer;
function SHGetFileInfoA;
begin
GetProcedureAddress(_SHGetFileInfoA, Shell32, 'SHGetFileInfoA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetFileInfoA]
end;
end;
var
_SHGetFileInfoW: Pointer;
function SHGetFileInfoW;
begin
GetProcedureAddress(_SHGetFileInfoW, Shell32, 'SHGetFileInfoW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetFileInfoW]
end;
end;
var
_SHGetFileInfo: Pointer;
function SHGetFileInfo;
begin
GetProcedureAddress(_SHGetFileInfo, Shell32, 'SHGetFileInfo' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetFileInfo]
end;
end;
var
_SHGetDiskFreeSpaceExA: Pointer;
function SHGetDiskFreeSpaceExA;
begin
GetProcedureAddress(_SHGetDiskFreeSpaceExA, Shell32, 'SHGetDiskFreeSpaceExA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetDiskFreeSpaceExA]
end;
end;
var
_SHGetDiskFreeSpaceExW: Pointer;
function SHGetDiskFreeSpaceExW;
begin
GetProcedureAddress(_SHGetDiskFreeSpaceExW, Shell32, 'SHGetDiskFreeSpaceExW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetDiskFreeSpaceExW]
end;
end;
var
_SHGetDiskFreeSpaceEx: Pointer;
function SHGetDiskFreeSpaceEx;
begin
GetProcedureAddress(_SHGetDiskFreeSpaceEx, Shell32, 'SHGetDiskFreeSpaceEx' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetDiskFreeSpaceEx]
end;
end;
var
_SHGetDiskFreeSpaceA: Pointer;
function SHGetDiskFreeSpaceA;
begin
GetProcedureAddress(_SHGetDiskFreeSpaceA, Shell32, 'SHGetDiskFreeSpaceA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetDiskFreeSpaceA]
end;
end;
var
_SHGetDiskFreeSpaceW: Pointer;
function SHGetDiskFreeSpaceW;
begin
GetProcedureAddress(_SHGetDiskFreeSpaceW, Shell32, 'SHGetDiskFreeSpaceW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetDiskFreeSpaceW]
end;
end;
var
_SHGetDiskFreeSpace: Pointer;
function SHGetDiskFreeSpace;
begin
GetProcedureAddress(_SHGetDiskFreeSpace, Shell32, 'SHGetDiskFreeSpace' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetDiskFreeSpace]
end;
end;
var
_SHGetNewLinkInfoA: Pointer;
function SHGetNewLinkInfoA;
begin
GetProcedureAddress(_SHGetNewLinkInfoA, Shell32, 'SHGetNewLinkInfoA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetNewLinkInfoA]
end;
end;
var
_SHGetNewLinkInfoW: Pointer;
function SHGetNewLinkInfoW;
begin
GetProcedureAddress(_SHGetNewLinkInfoW, Shell32, 'SHGetNewLinkInfoW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetNewLinkInfoW]
end;
end;
var
_SHGetNewLinkInfo: Pointer;
function SHGetNewLinkInfo;
begin
GetProcedureAddress(_SHGetNewLinkInfo, Shell32, 'SHGetNewLinkInfo' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetNewLinkInfo]
end;
end;
var
_SHInvokePrinterCommandA: Pointer;
function SHInvokePrinterCommandA;
begin
GetProcedureAddress(_SHInvokePrinterCommandA, Shell32, 'SHInvokePrinterCommandA');
asm
MOV ESP, EBP
POP EBP
JMP [_SHInvokePrinterCommandA]
end;
end;
var
_SHInvokePrinterCommandW: Pointer;
function SHInvokePrinterCommandW;
begin
GetProcedureAddress(_SHInvokePrinterCommandW, Shell32, 'SHInvokePrinterCommandW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHInvokePrinterCommandW]
end;
end;
var
_SHInvokePrinterCommand: Pointer;
function SHInvokePrinterCommand;
begin
GetProcedureAddress(_SHInvokePrinterCommand, Shell32, 'SHInvokePrinterCommand' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SHInvokePrinterCommand]
end;
end;
var
//_SHLoadNonloadedIconOverlayIdentifiers: Pointer; //too long name for d5
_SHLoadNonloadedIOI: Pointer;
function SHLoadNonloadedIconOverlayIdentifiers;
begin
GetProcedureAddress(_SHLoadNonloadedIOI, Shell32, 'SHLoadNonloadedIconOverlayIdentifiers');
asm
MOV ESP, EBP
POP EBP
JMP [_SHLoadNonloadedIOI]
end;
end;
var
_SHIsFileAvailableOffline: Pointer;
function SHIsFileAvailableOffline;
begin
GetProcedureAddress(_SHIsFileAvailableOffline, Shell32, 'SHIsFileAvailableOffline');
asm
MOV ESP, EBP
POP EBP
JMP [_SHIsFileAvailableOffline]
end;
end;
var
_SHSetLocalizedName: Pointer;
function SHSetLocalizedName;
begin
GetProcedureAddress(_SHSetLocalizedName, Shell32, 'SHSetLocalizedName');
asm
MOV ESP, EBP
POP EBP
JMP [_SHSetLocalizedName]
end;
end;
var
_IsLFNDriveA: Pointer;
function IsLFNDriveA;
begin
GetProcedureAddress(_IsLFNDriveA, Shell32, 'IsLFNDriveA');
asm
MOV ESP, EBP
POP EBP
JMP [_IsLFNDriveA]
end;
end;
var
_IsLFNDriveW: Pointer;
function IsLFNDriveW;
begin
GetProcedureAddress(_IsLFNDriveW, Shell32, 'IsLFNDriveW');
asm
MOV ESP, EBP
POP EBP
JMP [_IsLFNDriveW]
end;
end;
var
_IsLFNDrive: Pointer;
function IsLFNDrive;
begin
GetProcedureAddress(_IsLFNDrive, Shell32, 'IsLFNDrive' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_IsLFNDrive]
end;
end;
var
_SHTestTokenMembership: Pointer;
function SHTestTokenMembership;
begin
GetProcedureAddress(_SHTestTokenMembership, Shell32, 'SHTestTokenMembership');
asm
MOV ESP, EBP
POP EBP
JMP [_SHTestTokenMembership]
end;
end;
var
_SHGetImageList: Pointer;
function SHGetImageList;
begin
GetProcedureAddress(_SHGetImageList, Shell32, 'SHGetImageList');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetImageList]
end;
end;
var
_SHGetUnreadMailCountW: Pointer;
function SHGetUnreadMailCountW;
begin
GetProcedureAddress(_SHGetUnreadMailCountW, Shell32, 'SHGetUnreadMailCountW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHGetUnreadMailCountW]
end;
end;
var
_SHEnumerateUnreadMailAccountsW: Pointer;
function SHEnumerateUnreadMailAccountsW;
begin
GetProcedureAddress(_SHEnumerateUnreadMailAccountsW, Shell32, 'SHEnumerateUnreadMailAccountsW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHEnumerateUnreadMailAccountsW]
end;
end;
var
_SHSetUnreadMailCountW: Pointer;
function SHSetUnreadMailCountW;
begin
GetProcedureAddress(_SHSetUnreadMailCountW, Shell32, 'SHSetUnreadMailCountW');
asm
MOV ESP, EBP
POP EBP
JMP [_SHSetUnreadMailCountW]
end;
end;
var
_Shell_NotifyIconA: Pointer;
function Shell_NotifyIconA;
begin
GetProcedureAddress(_Shell_NotifyIconA, Shell32, 'Shell_NotifyIconA');
asm
MOV ESP, EBP
POP EBP
JMP [_Shell_NotifyIconA]
end;
end;
var
_Shell_NotifyIconW: Pointer;
function Shell_NotifyIconW;
begin
GetProcedureAddress(_Shell_NotifyIconW, Shell32, 'Shell_NotifyIconW');
asm
MOV ESP, EBP
POP EBP
JMP [_Shell_NotifyIconW]
end;
end;
var
_Shell_NotifyIcon: Pointer;
function Shell_NotifyIcon;
begin
GetProcedureAddress(_Shell_NotifyIcon, Shell32, 'Shell_NotifyIcon' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_Shell_NotifyIcon]
end;
end;
{$ENDIF DYNAMIC_LINK}
{$ENDIF JWA_INTERFACESECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}