From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- public/sdk/inc/shellapi.h | 516 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 516 insertions(+) create mode 100644 public/sdk/inc/shellapi.h (limited to 'public/sdk/inc/shellapi.h') diff --git a/public/sdk/inc/shellapi.h b/public/sdk/inc/shellapi.h new file mode 100644 index 000000000..7168b105c --- /dev/null +++ b/public/sdk/inc/shellapi.h @@ -0,0 +1,516 @@ +/*****************************************************************************\ +* * +* shellapi.h - SHELL.DLL functions, types, and definitions * +* * +* Copyright (c) 1992-1996, Microsoft Corp. All rights reserved * +* * +\*****************************************************************************/ + +#ifndef _INC_SHELLAPI +#define _INC_SHELLAPI + + + +// +// Define API decoration for direct importing of DLL references. +// +#ifndef WINSHELLAPI +#if !defined(_SHELL32_) +#define WINSHELLAPI DECLSPEC_IMPORT +#else +#define WINSHELLAPI +#endif +#endif // WINSHELLAPI + +#include + +#ifdef __cplusplus +extern "C" { /* Assume C declarations for C++ */ +#endif /* __cplusplus */ + + + +DECLARE_HANDLE(HDROP); + +WINSHELLAPI UINT APIENTRY DragQueryFileA(HDROP,UINT,LPSTR,UINT); +WINSHELLAPI UINT APIENTRY DragQueryFileW(HDROP,UINT,LPWSTR,UINT); +#ifdef UNICODE +#define DragQueryFile DragQueryFileW +#else +#define DragQueryFile DragQueryFileA +#endif // !UNICODE +WINSHELLAPI BOOL APIENTRY DragQueryPoint(HDROP,LPPOINT); +WINSHELLAPI VOID APIENTRY DragFinish(HDROP); +WINSHELLAPI VOID APIENTRY DragAcceptFiles(HWND,BOOL); + +WINSHELLAPI HINSTANCE APIENTRY ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); +WINSHELLAPI HINSTANCE APIENTRY ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd); +#ifdef UNICODE +#define ShellExecute ShellExecuteW +#else +#define ShellExecute ShellExecuteA +#endif // !UNICODE +WINSHELLAPI HINSTANCE APIENTRY FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult); +WINSHELLAPI HINSTANCE APIENTRY FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult); +#ifdef UNICODE +#define FindExecutable FindExecutableW +#else +#define FindExecutable FindExecutableA +#endif // !UNICODE +WINSHELLAPI LPWSTR * APIENTRY CommandLineToArgvW(LPCWSTR lpCmdLine, int*pNumArgs); + +WINSHELLAPI INT APIENTRY ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon); +WINSHELLAPI INT APIENTRY ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon); +#ifdef UNICODE +#define ShellAbout ShellAboutW +#else +#define ShellAbout ShellAboutA +#endif // !UNICODE +WINSHELLAPI HICON APIENTRY ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon); +WINSHELLAPI HICON APIENTRY ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIcon); +#ifdef UNICODE +#define ExtractAssociatedIcon ExtractAssociatedIconW +#else +#define ExtractAssociatedIcon ExtractAssociatedIconA +#endif // !UNICODE + +WINSHELLAPI HICON APIENTRY ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIconIndex); +WINSHELLAPI HICON APIENTRY ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIconIndex); +#ifdef UNICODE +#define ExtractIcon ExtractIconW +#else +#define ExtractIcon ExtractIconA +#endif // !UNICODE + +#if(WINVER >= 0x0400) + +//// +//// AppBar stuff +//// +#define ABM_NEW 0x00000000 +#define ABM_REMOVE 0x00000001 +#define ABM_QUERYPOS 0x00000002 +#define ABM_SETPOS 0x00000003 +#define ABM_GETSTATE 0x00000004 +#define ABM_GETTASKBARPOS 0x00000005 +#define ABM_ACTIVATE 0x00000006 // lParam == TRUE/FALSE means activate/deactivate +#define ABM_GETAUTOHIDEBAR 0x00000007 +#define ABM_SETAUTOHIDEBAR 0x00000008 // this can fail at any time. MUST check the result + // lParam = TRUE/FALSE Set/Unset + // uEdge = what edge +#define ABM_WINDOWPOSCHANGED 0x0000009 + + +// these are put in the wparam of callback messages +#define ABN_STATECHANGE 0x0000000 +#define ABN_POSCHANGED 0x0000001 +#define ABN_FULLSCREENAPP 0x0000002 +#define ABN_WINDOWARRANGE 0x0000003 // lParam == TRUE means hide + +// flags for get state +#define ABS_AUTOHIDE 0x0000001 +#define ABS_ALWAYSONTOP 0x0000002 + +#define ABE_LEFT 0 +#define ABE_TOP 1 +#define ABE_RIGHT 2 +#define ABE_BOTTOM 3 + +typedef struct _AppBarData +{ + DWORD cbSize; + HWND hWnd; + UINT uCallbackMessage; + UINT uEdge; + RECT rc; + LPARAM lParam; // message specific +} APPBARDATA, *PAPPBARDATA; + +WINSHELLAPI UINT APIENTRY SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData); + +//// +//// EndAppBar +//// + + + + +#define EIRESID(x) (-1 * (int)(x)) +WINSHELLAPI UINT WINAPI ExtractIconExA(LPCSTR lpszFile, int nIconIndex, HICON FAR *phiconLarge, HICON FAR *phiconSmall, UINT nIcons); +WINSHELLAPI UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, HICON FAR *phiconLarge, HICON FAR *phiconSmall, UINT nIcons); +#ifdef UNICODE +#define ExtractIconEx ExtractIconExW +#else +#define ExtractIconEx ExtractIconExA +#endif // !UNICODE + + + +//// +//// Shell File Operations +//// + +#ifndef FO_MOVE //these need to be kept in sync with the ones in shlobj.h + +#define FO_MOVE 0x0001 +#define FO_COPY 0x0002 +#define FO_DELETE 0x0003 +#define FO_RENAME 0x0004 + +#define FOF_MULTIDESTFILES 0x0001 +#define FOF_CONFIRMMOUSE 0x0002 +#define FOF_SILENT 0x0004 // don't create progress/report +#define FOF_RENAMEONCOLLISION 0x0008 +#define FOF_NOCONFIRMATION 0x0010 // Don't prompt the user. +#define FOF_WANTMAPPINGHANDLE 0x0020 // Fill in SHFILEOPSTRUCT.hNameMappings + // Must be freed using SHFreeNameMappings +#define FOF_ALLOWUNDO 0x0040 +#define FOF_FILESONLY 0x0080 // on *.*, do only files +#define FOF_SIMPLEPROGRESS 0x0100 // means don't show names of files +#define FOF_NOCONFIRMMKDIR 0x0200 // don't confirm making any needed dirs +#define FOF_NOERRORUI 0x0400 // don't put up error UI +typedef WORD FILEOP_FLAGS; + +#define PO_DELETE 0x0013 // printer is being deleted +#define PO_RENAME 0x0014 // printer is being renamed +#define PO_PORTCHANGE 0x0020 // 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. +#define PO_REN_PORT 0x0034 // PO_RENAME and PO_PORTCHANGE at same time. + +// no POF_ flags currently defined + +typedef WORD PRINTEROP_FLAGS; + +#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 + +typedef struct _SHFILEOPSTRUCTA +{ + HWND hwnd; + UINT wFunc; + LPCSTR pFrom; + LPCSTR pTo; + FILEOP_FLAGS fFlags; + BOOL fAnyOperationsAborted; + LPVOID hNameMappings; + LPCSTR lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS +} SHFILEOPSTRUCTA, FAR *LPSHFILEOPSTRUCTA; +typedef struct _SHFILEOPSTRUCTW +{ + HWND hwnd; + UINT wFunc; + LPCWSTR pFrom; + LPCWSTR pTo; + FILEOP_FLAGS fFlags; + BOOL fAnyOperationsAborted; + LPVOID hNameMappings; + LPCWSTR lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS +} SHFILEOPSTRUCTW, FAR *LPSHFILEOPSTRUCTW; +#ifdef UNICODE +typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT; +typedef LPSHFILEOPSTRUCTW LPSHFILEOPSTRUCT; +#else +typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT; +typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT; +#endif // UNICODE + +WINSHELLAPI int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp); +WINSHELLAPI int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp); +#ifdef UNICODE +#define SHFileOperation SHFileOperationW +#else +#define SHFileOperation SHFileOperationA +#endif // !UNICODE + +WINSHELLAPI void WINAPI SHFreeNameMappings(HANDLE hNameMappings); + +typedef struct _SHNAMEMAPPINGA +{ + LPSTR pszOldPath; + LPSTR pszNewPath; + int cchOldPath; + int cchNewPath; +} SHNAMEMAPPINGA, FAR *LPSHNAMEMAPPINGA; +typedef struct _SHNAMEMAPPINGW +{ + LPWSTR pszOldPath; + LPWSTR pszNewPath; + int cchOldPath; + int cchNewPath; +} SHNAMEMAPPINGW, FAR *LPSHNAMEMAPPINGW; +#ifdef UNICODE +typedef SHNAMEMAPPINGW SHNAMEMAPPING; +typedef LPSHNAMEMAPPINGW LPSHNAMEMAPPING; +#else +typedef SHNAMEMAPPINGA SHNAMEMAPPING; +typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING; +#endif // UNICODE + + +//// +//// End Shell File Operations +//// + +//// +//// Begin ShellExecuteEx and family +//// + + + + + + + + + +/* ShellExecute() and ShellExecuteEx() error codes */ + +/* regular WinExec() codes */ +#define SE_ERR_FNF 2 // file not found +#define SE_ERR_PNF 3 // path not found +#define SE_ERR_ACCESSDENIED 5 // access denied +#define SE_ERR_OOM 8 // out of memory +#define SE_ERR_DLLNOTFOUND 32 + +#endif /* WINVER >= 0x0400 */ + +/* error values for ShellExecute() beyond the regular WinExec() codes */ +#define SE_ERR_SHARE 26 +#define SE_ERR_ASSOCINCOMPLETE 27 +#define SE_ERR_DDETIMEOUT 28 +#define SE_ERR_DDEFAIL 29 +#define SE_ERR_DDEBUSY 30 +#define SE_ERR_NOASSOC 31 + +#if(WINVER >= 0x0400) + + + +// Note CLASSKEY overrides CLASSNAME +#define SEE_MASK_CLASSNAME 0x00000001 +#define SEE_MASK_CLASSKEY 0x00000003 +// Note INVOKEIDLIST overrides IDLIST +#define SEE_MASK_IDLIST 0x00000004 +#define SEE_MASK_INVOKEIDLIST 0x0000000c +#define SEE_MASK_ICON 0x00000010 +#define SEE_MASK_HOTKEY 0x00000020 +#define SEE_MASK_NOCLOSEPROCESS 0x00000040 +#define SEE_MASK_CONNECTNETDRV 0x00000080 +#define SEE_MASK_FLAG_DDEWAIT 0x00000100 +#define SEE_MASK_DOENVSUBST 0x00000200 +#define SEE_MASK_FLAG_NO_UI 0x00000400 +#define SEE_MASK_UNICODE 0x00004000 +#define SEE_MASK_NO_CONSOLE 0x00008000 +#define SEE_MASK_ASYNCOK 0x00100000 + +typedef struct _SHELLEXECUTEINFOA +{ + DWORD cbSize; + ULONG fMask; + HWND hwnd; + LPCSTR lpVerb; + LPCSTR lpFile; + LPCSTR lpParameters; + LPCSTR lpDirectory; + int nShow; + HINSTANCE hInstApp; + // Optional fields + LPVOID lpIDList; + LPCSTR lpClass; + HKEY hkeyClass; + DWORD dwHotKey; + HANDLE hIcon; + HANDLE hProcess; +} SHELLEXECUTEINFOA, FAR *LPSHELLEXECUTEINFOA; +typedef struct _SHELLEXECUTEINFOW +{ + DWORD cbSize; + ULONG fMask; + HWND hwnd; + LPCWSTR lpVerb; + LPCWSTR lpFile; + LPCWSTR lpParameters; + LPCWSTR lpDirectory; + int nShow; + HINSTANCE hInstApp; + // Optional fields + LPVOID lpIDList; + LPCWSTR lpClass; + HKEY hkeyClass; + DWORD dwHotKey; + HANDLE hIcon; + HANDLE hProcess; +} SHELLEXECUTEINFOW, FAR *LPSHELLEXECUTEINFOW; +#ifdef UNICODE +typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO; +typedef LPSHELLEXECUTEINFOW LPSHELLEXECUTEINFO; +#else +typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO; +typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO; +#endif // UNICODE + +WINSHELLAPI BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo); +WINSHELLAPI BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo); +#ifdef UNICODE +#define ShellExecuteEx ShellExecuteExW +#else +#define ShellExecuteEx ShellExecuteExA +#endif // !UNICODE + +//// +//// End ShellExecuteEx and family +//// + + +//// +//// Tray notification definitions +//// + +typedef struct _NOTIFYICONDATAA { + DWORD cbSize; + HWND hWnd; + UINT uID; + UINT uFlags; + UINT uCallbackMessage; + HICON hIcon; + CHAR szTip[64]; +} NOTIFYICONDATAA, *PNOTIFYICONDATAA; +typedef struct _NOTIFYICONDATAW { + DWORD cbSize; + HWND hWnd; + UINT uID; + UINT uFlags; + UINT uCallbackMessage; + HICON hIcon; + WCHAR szTip[64]; +} NOTIFYICONDATAW, *PNOTIFYICONDATAW; +#ifdef UNICODE +typedef NOTIFYICONDATAW NOTIFYICONDATA; +typedef PNOTIFYICONDATAW PNOTIFYICONDATA; +#else +typedef NOTIFYICONDATAA NOTIFYICONDATA; +typedef PNOTIFYICONDATAA PNOTIFYICONDATA; +#endif // UNICODE + + +#define NIM_ADD 0x00000000 +#define NIM_MODIFY 0x00000001 +#define NIM_DELETE 0x00000002 + +#define NIF_MESSAGE 0x00000001 +#define NIF_ICON 0x00000002 +#define NIF_TIP 0x00000004 + +WINSHELLAPI BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData); +WINSHELLAPI BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData); +#ifdef UNICODE +#define Shell_NotifyIcon Shell_NotifyIconW +#else +#define Shell_NotifyIcon Shell_NotifyIconA +#endif // !UNICODE + +//// +//// 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 + */ + +typedef struct _SHFILEINFOA +{ + HICON hIcon; // out: icon + int iIcon; // out: icon index + DWORD dwAttributes; // out: SFGAO_ flags + CHAR szDisplayName[MAX_PATH]; // out: display name (or path) + CHAR szTypeName[80]; // out: type name +} SHFILEINFOA; +typedef struct _SHFILEINFOW +{ + HICON hIcon; // out: icon + int iIcon; // out: icon index + DWORD dwAttributes; // out: SFGAO_ flags + WCHAR szDisplayName[MAX_PATH]; // out: display name (or path) + WCHAR szTypeName[80]; // out: type name +} SHFILEINFOW; +#ifdef UNICODE +typedef SHFILEINFOW SHFILEINFO; +#else +typedef SHFILEINFOA SHFILEINFO; +#endif // UNICODE + +#define SHGFI_ICON 0x000000100 // get icon +#define SHGFI_DISPLAYNAME 0x000000200 // get display name +#define SHGFI_TYPENAME 0x000000400 // get type name +#define SHGFI_ATTRIBUTES 0x000000800 // get attributes +#define SHGFI_ICONLOCATION 0x000001000 // get icon location +#define SHGFI_EXETYPE 0x000002000 // return exe type +#define SHGFI_SYSICONINDEX 0x000004000 // get system icon index +#define SHGFI_LINKOVERLAY 0x000008000 // put a link overlay on icon +#define SHGFI_SELECTED 0x000010000 // show icon in selected state +#define SHGFI_LARGEICON 0x000000000 // get large icon +#define SHGFI_SMALLICON 0x000000001 // get small icon +#define SHGFI_OPENICON 0x000000002 // get open icon +#define SHGFI_SHELLICONSIZE 0x000000004 // get shell size icon +#define SHGFI_PIDL 0x000000008 // pszPath is a pidl +#define SHGFI_USEFILEATTRIBUTES 0x000000010 // use passed dwFileAttribute + +WINSHELLAPI DWORD WINAPI SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA FAR *psfi, UINT cbFileInfo, UINT uFlags); +WINSHELLAPI DWORD WINAPI SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, SHFILEINFOW FAR *psfi, UINT cbFileInfo, UINT uFlags); +#ifdef UNICODE +#define SHGetFileInfo SHGetFileInfoW +#else +#define SHGetFileInfo SHGetFileInfoA +#endif // !UNICODE + + +#define SHGNLI_PIDL 0x000000001 // pszLinkTo is a pidl +#define SHGNLI_PREFIXNAME 0x000000002 // Make name "Shortcut to xxx" +#define SHGNLI_NOUNIQUE 0x000000004 // don't do the unique name generation + + +//// +//// End SHGetFileInfo +//// + + + + + + +#endif /* WINVER >= 0x0400 */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include + +#endif /* _INC_SHELLAPI */ -- cgit v1.2.3