IContextMenu -
ICopyHook -
IShellExtInit -
SHChangeNotify -
PCMInvokeCommandInfo
PItemIDList
TCMInvokeCommandInfo
TItemIDList
TSHItemID
FO_COPY
FO_DELETE
FO_MOVE
FO_RENAME
GCS_HELPTEXT
GCS_VALIDATE
GCS_VERB
IID_IContextMenu
IID_IShellCopyHook
IID_IShellExtInit
SHCNE_ALLEVENTS
SHCNE_ASSOCCHANGED
SHCNE_ATTRIBUTES
SHCNE_CREATE
SHCNE_DELETE
SHCNE_DISKEVENTS
SHCNE_DRIVEADD
SHCNE_DRIVEADDGUI
SHCNE_DRIVEREMOVED
SHCNE_FREESPACE
SHCNE_GLOBALEVENTS
SHCNE_INTERRUPT
SHCNE_MEDIAINSERTED
SHCNE_MEDIAREMOVED
SHCNE_MKDIR
SHCNE_NETSHARE
SHCNE_NETUNSHARE
SHCNE_RENAMEFOLDER
SHCNE_RENAMEITEM
SHCNE_RMDIR
SHCNE_SERVERDISCONNECT
SHCNE_UPDATEDIR
SHCNE_UPDATEIMAGE
SHCNE_UPDATEITEM
SHCNF_DWORD
SHCNF_FLUSH
SHCNF_FLUSHNOWAIT
SHCNF_IDLIST
SHCNF_PATH
SHCNF_PRINTER
SHCNF_TYPE
procedure SHChangeNotify(wEventId:longint; uFlags:UINT;
dwItem1,dwItem2:pointer);
PCMInvokeCommandInfo = ^TCMInvokeCommandInfo
PItemIDList = ^TItemIDList
ITEMIDLIST -- List if item IDs (combined with 0-terminator)
TCMInvokeCommandInfo = record
cbSize : DWORD;
fMask : DWORD;
hwnd : HWND;
lpVerb : LPCSTR;
lpParameters : LPCSTR;
lpDirectory : LPCSTR;
nShow : integer;
dwHotKey : DWORD;
hIcon : THANDLE;
end;
TItemIDList = record
mkid : TSHITEMID;
end;
TSHItemID = record
cb : word;
abID : array[0..0] of BYTE;
end;
validate command exists
FO_COPY = $0002
FO_DELETE = $0003
FO_MOVE = $0001
added by njr
FO_RENAME = $0004
GCS_HELPTEXT = $00000001 { help text (for status bar) }
canonical verb
GCS_VALIDATE = $00000002 { validate command exists }
help text (for status bar)
GCS_VERB = $00000000 { canonical verb }
GetCommandString uFlags
IID_IContextMenu = (
D1:$000214E4; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
Note - Delphi 2.0 shipped without a unit corresponding to SHLOBJ.H. The ShellObj unit is a stripped-down version of SHLOBJ.H containing just the definitions and constants required by this program. Delphi 2.01 added the SHLOBJ unit.
IID_IShellCopyHook = (
D1:$000214EF; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IShellExtInit = (
D1:$000214E8; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
SHCNE_ALLEVENTS = $7FFFFFFF
Events that dont match pidls first
SHCNE_ASSOCCHANGED = $08000000
SHCNE_ATTRIBUTES = $00000800
SHCNE_CREATE = $00000002
SHCNE_DELETE = $00000004
SHCNE_DISKEVENTS = $0002381F
SHCNE_DRIVEADD = $00000100
SHCNE_DRIVEADDGUI = $00010000
SHCNE_DRIVEREMOVED = $00000080
SHCNE_FREESPACE = $00040000
SHCNE_GLOBALEVENTS = $0C0581E0 { Events that dont match pidls first }
SHCNE_INTERRUPT = $80000000 { The presence of this flag indicates }
SHCNE_MEDIAINSERTED = $00000020
SHCNE_MEDIAREMOVED = $00000040
SHCNE_MKDIR = $00000008
SHCNE_NETSHARE = $00000200
SHCNE_NETUNSHARE = $00000400
SHCNE_RENAMEFOLDER = $00020000
SHCNE_RENAMEITEM = $00000001
File System Notification flags
SHCNE_RMDIR = $00000010
SHCNE_SERVERDISCONNECT = $00004000
SHCNE_UPDATEDIR = $00001000
SHCNE_UPDATEIMAGE = $00008000
SHCNE_UPDATEITEM = $00002000
SHCNF_DWORD = $0003 { DWORD }
printer friendly name
SHCNF_FLUSH = $1000
SHCNF_FLUSHNOWAIT = $2000
SHCNF_IDLIST = $0000 { LPITEMIDLIST }
that the event was generated by an } { interrupt. It is stripped out before } { the clients of SHCNNotify_ see it. } { Flags } { uFlags & SHCNF_TYPE is an ID which indicates what dwItem1 and dwItem2 mean
SHCNF_PATH = $0001 { path name }
LPITEMIDLIST
SHCNF_PRINTER = $0002 { printer friendly name }
path name
SHCNF_TYPE = $00FF
DWORD