-#ifndef _WINE_SHELLAPI_H
-#define _WINE_SHELLAPI_H
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
-#include "wintypes.h"
+#ifndef __WINE_SHELLAPI_H
+#define __WINE_SHELLAPI_H
-HICON16 WINAPI ExtractIcon16(HINSTANCE16,LPCSTR,UINT16);
-HICON32 WINAPI ExtractIcon32A(HINSTANCE32,LPCSTR,UINT32);
-HICON32 WINAPI ExtractIcon32W(HINSTANCE32,LPCWSTR,UINT32);
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#include <pshpack1.h>
+
+DECLARE_HANDLE(HDROP);
+
+/******************************************
+ * DragObject
+ */
+
+typedef struct _DRAGINFOA
+{ UINT uSize;
+ POINT pt;
+ BOOL fNC;
+ LPSTR lpFileList;
+ DWORD grfKeyState;
+} DRAGINFOA, *LPDRAGINFOA;
+
+typedef struct _DRAGINFOW
+{ UINT uSize;
+ POINT pt;
+ BOOL fNC;
+ LPWSTR lpFileList;
+ DWORD grfKeyState;
+} DRAGINFOW, *LPDRAGINFOW;
+
+DECL_WINELIB_TYPE_AW(DRAGINFO)
+DECL_WINELIB_TYPE_AW(LPDRAGINFO)
+
+void WINAPI DragAcceptFiles(HWND hWnd, BOOL b);
+UINT WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength);
+UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength);
+#define DragQueryFile WINELIB_NAME_AW(DragQueryFile)
+void WINAPI DragFinish(HDROP h);
+BOOL WINAPI DragQueryPoint(HDROP hDrop, POINT *p);
+
+#define NIF_MESSAGE 0x00000001
+#define NIF_ICON 0x00000002
+#define NIF_TIP 0x00000004
+#define NIF_STATE 0x00000008
+#define NIF_INFO 0x00000010
+#define NIF_GUID 0x00000020
+
+#define NIM_ADD 0x00000000
+#define NIM_MODIFY 0x00000001
+#define NIM_DELETE 0x00000002
+
+
+
+/******************************************
+ * Application Bar
+ */
+#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
+#define ABM_GETAUTOHIDEBAR 0x00000007
+#define ABM_SETAUTOHIDEBAR 0x00000008
+#define ABM_WINDOWPOSCHANGED 0x00000009
+
+#define ABN_STATECHANGE 0x00000000
+#define ABN_POSCHANGED 0x00000001
+#define ABN_FULLSCREENAPP 0x00000002
+#define ABN_WINDOWARRANGE 0x00000003
+
+#define ABS_AUTOHIDE 0x00000001
+#define ABS_ALWAYSONTOP 0x00000002
+
+#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;
+} APPBARDATA, *PAPPBARDATA;
+
+UINT WINAPI SHAppBarMessage(DWORD,PAPPBARDATA);
+
+/******************************************
+ * SHGetFileInfo
+ */
+
+#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 */
+#define SHGFI_ADDOVERLAYS 0x000000020
+#define SHGFI_OVERLAYINDEX 0x000000040
+#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_ATTR_SPECIFIED 0x000020000 /* get only specified attributes */
+
+typedef struct tagSHFILEINFOA
+{ HICON hIcon; /* icon */
+ int iIcon; /* icon index */
+ DWORD dwAttributes; /* SFGAO_ flags */
+ CHAR szDisplayName[MAX_PATH];/* display name (or path) */
+ CHAR szTypeName[80]; /* type name */
+} SHFILEINFOA;
+
+typedef struct tagSHFILEINFOW
+{ HICON hIcon; /* icon */
+ int iIcon; /* icon index */
+ DWORD dwAttributes; /* SFGAO_ flags */
+ WCHAR szDisplayName[MAX_PATH];/* display name (or path) */
+ WCHAR szTypeName[80]; /* type name */
+} SHFILEINFOW;
+
+DECL_WINELIB_TYPE_AW(SHFILEINFO)
+
+DWORD_PTR WINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
+DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);
+#define SHGetFileInfo WINELIB_NAME_AW(SHGetFileInfo)
+
+/******************************************
+ * SHSetFileInfo
+ */
+
+/******************************************
+* SHFileOperation
+*/
+#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
+#define FOF_RENAMEONCOLLISION 0x0008
+#define FOF_NOCONFIRMATION 0x0010
+#define FOF_WANTMAPPINGHANDLE 0x0020
+#define FOF_ALLOWUNDO 0x0040
+#define FOF_FILESONLY 0x0080
+#define FOF_SIMPLEPROGRESS 0x0100
+#define FOF_NOCONFIRMMKDIR 0x0200
+#define FOF_NOERRORUI 0x0400
+#define FOF_NOCOPYSECURITYATTRIBS 0x0800
+#define FOF_NORECURSION 0x1000 /* don't do recursion into directories */
+#define FOF_NO_CONNECTED_ELEMENTS 0x2000 /* don't do connected files */
+#define FOF_WANTNUKEWARNING 0x4000 /* during delete operation, warn if delete instead
+ of recycling (even if FOF_NOCONFIRMATION) */
+#define FOF_NORECURSEREPARSE 0x8000 /* don't do recursion into reparse points */
+
+typedef WORD FILEOP_FLAGS;
+
+#define PO_DELETE 0x0013
+#define PO_RENAME 0x0014
+#define PO_PORTCHANGE 0x0020
+#define PO_REN_PORT (PO_RENAME | PO_PORTCHANGE)
+
+typedef WORD PRINTEROP_FLAGS;
+
+typedef struct _SHFILEOPSTRUCTA
+{ HWND hwnd;
+ UINT wFunc;
+ LPCSTR pFrom;
+ LPCSTR pTo;
+ FILEOP_FLAGS fFlags;
+ BOOL fAnyOperationsAborted;
+ LPVOID hNameMappings;
+ LPCSTR lpszProgressTitle;
+} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
+
+typedef struct _SHFILEOPSTRUCTW
+{ HWND hwnd;
+ UINT wFunc;
+ LPCWSTR pFrom;
+ LPCWSTR pTo;
+ FILEOP_FLAGS fFlags;
+ BOOL fAnyOperationsAborted;
+ LPVOID hNameMappings;
+ LPCWSTR lpszProgressTitle;
+} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;
+
+#define SHFILEOPSTRUCT WINELIB_NAME_AW(SHFILEOPSTRUCT)
+#define LPSHFILEOPSTRUCT WINELIB_NAME_AW(LPSHFILEOPSTRUCT)
+
+int WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp);
+int WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp);
+#define SHFileOperation WINELIB_NAME_AW(SHFileOperation)
+
+typedef struct _SHNAMEMAPPINGA
+{
+ LPSTR pszOldPath;
+ LPSTR pszNewPath;
+ int cchOldPath;
+ int cchNewPath;
+} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA;
+
+typedef struct _SHNAMEMAPPINGW
+{
+ LPWSTR pszOldPath;
+ LPWSTR pszNewPath;
+ int cchOldPath;
+ int cchNewPath;
+} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW;
+
+DECL_WINELIB_TYPE_AW(SHNAMEMAPPING)
+DECL_WINELIB_TYPE_AW(LPSHNAMEMAPPING)
+
+void WINAPI SHFreeNameMappings(HANDLE hNameMappings);
+
+/******************************************
+ * ShellExecute
+ */
+#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
+
+HINSTANCE WINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT);
+HINSTANCE WINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT);
+#define ShellExecute WINELIB_NAME_AW(ShellExecute)
+
+#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
+#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
+
+#define SEE_MASK_CLASSNAME 0x00000001
+#define SEE_MASK_CLASSKEY 0x00000003
+#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
+#define SEE_MASK_HMONITOR 0x00200000
+#define SEE_MASK_NOZONECHECKS 0x00800000
+#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000
+#define SEE_MASK_WAITFORINPUTIDLE 0x02000000
+#define SEE_MASK_FLAG_LOG_USAGE 0x04000000
+
+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;
+ union
+ { HANDLE hIcon;
+ HANDLE hMonitor;
+ } DUMMYUNIONNAME;
+ HANDLE hProcess;
+} SHELLEXECUTEINFOA, *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;
+ union
+ { HANDLE hIcon;
+ HANDLE hMonitor;
+ } DUMMYUNIONNAME;
+ HANDLE hProcess;
+} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;
+
+#define SHELLEXECUTEINFO WINELIB_NAME_AW(SHELLEXECUTEINFO)
+#define LPSHELLEXECUTEINFO WINELIB_NAME_AW(LPSHELLEXECUTEINFO)
+
+BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo);
+BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo);
+#define ShellExecuteEx WINELIB_NAME_AW(ShellExecuteEx)
+
+void WINAPI WinExecErrorA(HWND hwnd,INT error, LPCSTR lpstrFileName, LPCSTR lpstrTitle);
+void WINAPI WinExecErrorW(HWND hwnd,INT error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle);
+#define WinExecError WINELIB_NAME_AW(WinExecError)
+
+/******************************************
+ * Tray Notification
+ */
+typedef struct _NOTIFYICONDATAA
+{ DWORD cbSize;
+ HWND hWnd;
+ UINT uID;
+ UINT uFlags;
+ UINT uCallbackMessage;
+ HICON hIcon;
+ CHAR szTip[128];
+ DWORD dwState;
+ DWORD dwStateMask;
+ CHAR szInfo[256];
+ union {
+ UINT uTimeout;
+ UINT uVersion;
+ } DUMMYUNIONNAME;
+ CHAR szInfoTitle[64];
+ DWORD dwInfoFlags;
+} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
+
+typedef struct _NOTIFYICONDATAW
+{ DWORD cbSize;
+ HWND hWnd;
+ UINT uID;
+ UINT uFlags;
+ UINT uCallbackMessage;
+ HICON hIcon;
+ WCHAR szTip[128];
+ DWORD dwState;
+ DWORD dwStateMask;
+ WCHAR szInfo[256];
+ union {
+ UINT uTimeout;
+ UINT uVersion;
+ } DUMMYUNIONNAME;
+ WCHAR szInfoTitle[64];
+ DWORD dwInfoFlags;
+} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
+
+DECL_WINELIB_TYPE_AW(NOTIFYICONDATA)
+DECL_WINELIB_TYPE_AW(PNOTIFYICONDATA)
+
+BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData);
+BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData);
+
+#define Shell_NotifyIcon WINELIB_NAME_AW(Shell_NotifyIcon)
+
+/******************************************
+ * Links
+ */
+
+#define SHGNLI_PIDL 0x01
+#define SHGNLI_PREFIXNAME 0x02
+#define SHGNLI_NOUNIQUE 0x04
+#define SHGNLI_NOLNK 0x08
+
+BOOL WINAPI SHGetNewLinkInfoA(LPCSTR,LPCSTR,LPSTR,BOOL*,UINT);
+BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR,LPCWSTR,LPWSTR,BOOL*,UINT);
+#define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
+
+/******************************************
+ * Recycle bin
+ */
+
+typedef struct _SHQUERYRBINFO
+{
+ DWORD cbSize;
+ DWORDLONG i64Size;
+ DWORDLONG i64NumItems;
+} SHQUERYRBINFO, *LPSHQUERYRBINFO;
+
+HRESULT WINAPI SHEmptyRecycleBinA(HWND,LPCSTR,DWORD);
+HRESULT WINAPI SHEmptyRecycleBinW(HWND,LPCWSTR,DWORD);
+#define SHEmptyRecycleBin WINELIB_NAME_AW(SHEmptyRecycleBin)
+HRESULT WINAPI SHQueryRecycleBinA(LPCSTR,LPSHQUERYRBINFO);
+HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR,LPSHQUERYRBINFO);
+#define SHQueryRecycleBin WINELIB_NAME_AW(SHQueryRecycleBin)
+
+/******************************************
+ * Misc
+ */
+
+LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR,int*);
+HICON WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT);
+HICON WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT);
#define ExtractIcon WINELIB_NAME_AW(ExtractIcon)
-HICON16 WINAPI ExtractAssociatedIcon16(HINSTANCE16,LPSTR,LPWORD);
-HICON32 WINAPI ExtractAssociatedIcon32A(HINSTANCE32,LPSTR,LPWORD);
-HICON32 WINAPI ExtractAssociatedIcon32W(HINSTANCE32,LPWSTR,LPWORD);
+HICON WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,LPWORD);
+HICON WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,LPWORD);
#define ExtractAssociatedIcon WINELIB_NAME_AW(ExtractAssociatedIcon)
-HINSTANCE16 WINAPI FindExecutable16(LPCSTR,LPCSTR,LPSTR);
-HINSTANCE32 WINAPI FindExecutable32A(LPCSTR,LPCSTR,LPSTR);
-HINSTANCE32 WINAPI FindExecutable32W(LPCWSTR,LPCWSTR,LPWSTR);
+HICON WINAPI ExtractAssociatedIconExA(HINSTANCE,LPSTR,LPWORD,LPWORD);
+HICON WINAPI ExtractAssociatedIconExW(HINSTANCE,LPWSTR,LPWORD,LPWORD);
+#define ExtractAssociatedIconEx WINELIB_NAME_AW(ExtractAssociatedIconEx)
+UINT WINAPI ExtractIconExA(LPCSTR,INT,HICON*,HICON*,UINT);
+UINT WINAPI ExtractIconExW(LPCWSTR,INT,HICON*,HICON*,UINT);
+#define ExtractIconEx WINELIB_NAME_AW(ExtractIconEx)
+HINSTANCE WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR);
+HINSTANCE WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR);
#define FindExecutable WINELIB_NAME_AW(FindExecutable)
-BOOL16 WINAPI ShellAbout16(HWND16,LPCSTR,LPCSTR,HICON16);
-BOOL32 WINAPI ShellAbout32A(HWND32,LPCSTR,LPCSTR,HICON32);
-BOOL32 WINAPI ShellAbout32W(HWND32,LPCWSTR,LPCWSTR,HICON32);
+BOOL WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
+BOOL WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
#define ShellAbout WINELIB_NAME_AW(ShellAbout)
-HINSTANCE16 WINAPI ShellExecute16(HWND16,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT16);
-HINSTANCE32 WINAPI ShellExecute32A(HWND32,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT32);
-HINSTANCE32 WINAPI ShellExecute32W(HWND32,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT32);
-#define ShellExecute WINELIB_NAME_AW(ShellExecute)
+int WINAPIV ShellMessageBoxA(HINSTANCE,HWND,LPCSTR,LPCSTR,UINT,...);
+int WINAPIV ShellMessageBoxW(HINSTANCE,HWND,LPCWSTR,LPCWSTR,UINT,...);
+#define ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)
+DWORD WINAPI DoEnvironmentSubstA(LPSTR, UINT);
+DWORD WINAPI DoEnvironmentSubstW(LPWSTR, UINT);
+#define DoEnvironmentSubst WINELIB_NAME_AW(DoEnvironmentSubst)
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+#include <poppack.h>
-#endif /* _WINE_SHELLAPI_H */
+#endif /* __WINE_SHELLAPI_H */