/** * Windows API header module * * Translated from MinGW Windows headers * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) * Source: $(DRUNTIMESRC core/sys/windows/_shellapi.d) */ module core.sys.windows.shellapi; version (Windows): @system: version (ANSI) {} else version = Unicode; pragma(lib, "shell32"); import core.sys.windows.w32api, core.sys.windows.windef, core.sys.windows.basetyps; enum : UINT { ABE_LEFT, ABE_TOP, ABE_RIGHT, ABE_BOTTOM // = 3 } enum : UINT { ABS_AUTOHIDE = 1, ABS_ALWAYSONTOP } enum ULONG SEE_MASK_CLASSNAME = 1, SEE_MASK_CLASSKEY = 3, SEE_MASK_IDLIST = 4, SEE_MASK_INVOKEIDLIST = 12, SEE_MASK_ICON = 0x000010, SEE_MASK_HOTKEY = 0x000020, SEE_MASK_NOCLOSEPROCESS = 0x000040, SEE_MASK_CONNECTNETDRV = 0x000080, SEE_MASK_FLAG_DDEWAIT = 0x000100, SEE_MASK_DOENVSUBST = 0x000200, SEE_MASK_FLAG_NO_UI = 0x000400, SEE_MASK_NO_CONSOLE = 0x008000, SEE_MASK_UNICODE = 0x010000, SEE_MASK_ASYNCOK = 0x100000, SEE_MASK_HMONITOR = 0x200000; enum : DWORD { ABM_NEW, ABM_REMOVE, ABM_QUERYPOS, ABM_SETPOS, ABM_GETSTATE, ABM_GETTASKBARPOS, ABM_ACTIVATE, ABM_GETAUTOHIDEBAR, ABM_SETAUTOHIDEBAR, ABM_WINDOWPOSCHANGED // = 9 } static if (_WIN32_WINNT >= 0x501) { enum DWORD ABM_SETSTATE = 10; } enum : UINT { ABN_STATECHANGE, ABN_POSCHANGED, ABN_FULLSCREENAPP, ABN_WINDOWARRANGE } enum : DWORD { NIM_ADD, NIM_MODIFY, NIM_DELETE } static if (_WIN32_IE >= 0x500) { enum NOTIFYICON_VERSION = 3; enum : DWORD { NIM_SETFOCUS = 3, NIM_SETVERSION } } enum UINT NIF_MESSAGE = 1, NIF_ICON = 2, NIF_TIP = 4, NIF_STATE = 8; static if (_WIN32_IE >= 0x500) { enum UINT NIF_INFO = 0x00000010; } static if (_WIN32_IE >= 0x600) { enum UINT NIF_GUID = 0x00000020; } static if (_WIN32_IE >= 0x500) { enum : DWORD { NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR } } static if (_WIN32_IE >= 0x600) { enum : DWORD { NIIF_ICON_MASK = 15, NIIF_NOSOUND } } enum DWORD NIS_HIDDEN = 1, NIS_SHAREDICON = 2; enum HINSTANCE SE_ERR_FNF = cast(HINSTANCE) 2, SE_ERR_PNF = cast(HINSTANCE) 3, SE_ERR_ACCESSDENIED = cast(HINSTANCE) 5, SE_ERR_OOM = cast(HINSTANCE) 8, SE_ERR_DLLNOTFOUND = cast(HINSTANCE) 32, SE_ERR_SHARE = cast(HINSTANCE) 26, SE_ERR_ASSOCINCOMPLETE = cast(HINSTANCE) 27, SE_ERR_DDETIMEOUT = cast(HINSTANCE) 28, SE_ERR_DDEFAIL = cast(HINSTANCE) 29, SE_ERR_DDEBUSY = cast(HINSTANCE) 30, SE_ERR_NOASSOC = cast(HINSTANCE) 31; enum : UINT { FO_MOVE = 1, FO_COPY, FO_DELETE, FO_RENAME } enum FILEOP_FLAGS FOF_MULTIDESTFILES = 0x0001, FOF_CONFIRMMOUSE = 0x0002, FOF_SILENT = 0x0004, FOF_RENAMEONCOLLISION = 0x0008, FOF_NOCONFIRMATION = 0x0010, FOF_WANTMAPPINGHANDLE = 0x0020, FOF_ALLOWUNDO = 0x0040, FOF_FILESONLY = 0x0080, FOF_SIMPLEPROGRESS = 0x0100, FOF_NOCONFIRMMKDIR = 0x0200, FOF_NOERRORUI = 0x0400, FOF_NOCOPYSECURITYATTRIBS = 0x0800; // these are not documented on the MSDN site enum { PO_DELETE = 19, PO_RENAME = 20, PO_PORTCHANGE = 32, PO_REN_PORT = 52 } enum UINT SHGFI_LARGEICON = 0x000000, SHGFI_SMALLICON = 0x000001, SHGFI_OPENICON = 0x000002, SHGFI_SHELLICONSIZE = 0x000004, SHGFI_PIDL = 0x000008, SHGFI_USEFILEATTRIBUTES = 0x000010, SHGFI_ICON = 0x000100, SHGFI_DISPLAYNAME = 0x000200, SHGFI_TYPENAME = 0x000400, SHGFI_ATTRIBUTES = 0x000800, SHGFI_ICONLOCATION = 0x001000, SHGFI_EXETYPE = 0x002000, SHGFI_SYSICONINDEX = 0x004000, SHGFI_LINKOVERLAY = 0x008000, SHGFI_SELECTED = 0x010000, SHGFI_ATTR_SPECIFIED = 0x020000; static if (_WIN32_IE >= 0x500) { enum uint SHGFI_ADDOVERLAYS = 0x000020, SHGFI_OVERLAYINDEX = 0x000040; } enum SHERB_NOCONFIRMATION = 1; enum SHERB_NOPROGRESSUI = 2; enum SHERB_NOSOUND = 4; alias WORD FILEOP_FLAGS, PRINTEROP_FLAGS; mixin DECLARE_HANDLE!("HDROP"); //align(2): // 1 in Win32, default in Win64 struct APPBARDATA { DWORD cbSize = APPBARDATA.sizeof; HWND hWnd; UINT uCallbackMessage; UINT uEdge; RECT rc; LPARAM lParam; } alias APPBARDATA* PAPPBARDATA; struct NOTIFYICONDATAA { DWORD cbSize = NOTIFYICONDATAA.sizeof; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; HICON hIcon; static if (_WIN32_IE >= 0x500) { CHAR[128] szTip = 0; DWORD dwState; DWORD dwStateMask; CHAR[256] szInfo = 0; union { UINT uTimeout; UINT uVersion; } CHAR[64] szInfoTitle = 0; DWORD dwInfoFlags; } else { CHAR[64] szTip = 0; } static if (_WIN32_IE >= 0x600) { GUID guidItem; } } alias NOTIFYICONDATAA* PNOTIFYICONDATAA; struct NOTIFYICONDATAW { DWORD cbSize = NOTIFYICONDATAW.sizeof; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; HICON hIcon; static if (_WIN32_IE >= 0x500) { WCHAR[128] szTip = 0; DWORD dwState; DWORD dwStateMask; WCHAR[256] szInfo = 0; union { UINT uTimeout; UINT uVersion; } WCHAR[64] szInfoTitle = 0; DWORD dwInfoFlags; } else { WCHAR[64] szTip = 0; } static if (_WIN32_IE >= 0x600) { GUID guidItem; } } alias NOTIFYICONDATAW* PNOTIFYICONDATAW; struct SHELLEXECUTEINFOA { DWORD cbSize = SHELLEXECUTEINFOA.sizeof; ULONG fMask; HWND hwnd; LPCSTR lpVerb; LPCSTR lpFile; LPCSTR lpParameters; LPCSTR lpDirectory; int nShow; HINSTANCE hInstApp; PVOID lpIDList; LPCSTR lpClass; HKEY hkeyClass; DWORD dwHotKey; HANDLE hIcon; HANDLE hProcess; } alias SHELLEXECUTEINFOA* LPSHELLEXECUTEINFOA; struct SHELLEXECUTEINFOW { DWORD cbSize = SHELLEXECUTEINFOW.sizeof; ULONG fMask; HWND hwnd; LPCWSTR lpVerb; LPCWSTR lpFile; LPCWSTR lpParameters; LPCWSTR lpDirectory; int nShow; HINSTANCE hInstApp; PVOID lpIDList; LPCWSTR lpClass; HKEY hkeyClass; DWORD dwHotKey; HANDLE hIcon; HANDLE hProcess; } alias SHELLEXECUTEINFOW* LPSHELLEXECUTEINFOW; align(1) struct SHFILEOPSTRUCTA { align(1): HWND hwnd; UINT wFunc; version (Win64) WORD _padding1; LPCSTR pFrom; LPCSTR pTo; FILEOP_FLAGS fFlags; version (Win64) DWORD _padding2; BOOL fAnyOperationsAborted; PVOID hNameMappings; LPCSTR lpszProgressTitle; } alias SHFILEOPSTRUCTA* LPSHFILEOPSTRUCTA; align(1) struct SHFILEOPSTRUCTW { align(1): HWND hwnd; UINT wFunc; version (Win64) DWORD _padding1; LPCWSTR pFrom; LPCWSTR pTo; FILEOP_FLAGS fFlags; version (Win64) WORD _padding2; BOOL fAnyOperationsAborted; PVOID hNameMappings; LPCWSTR lpszProgressTitle; } alias SHFILEOPSTRUCTW* LPSHFILEOPSTRUCTW; struct SHFILEINFOA { HICON hIcon; int iIcon; DWORD dwAttributes; CHAR[MAX_PATH] szDisplayName = 0; CHAR[80] szTypeName = 0; } struct SHFILEINFOW { HICON hIcon; int iIcon; DWORD dwAttributes; WCHAR[MAX_PATH] szDisplayName = 0; WCHAR[80] szTypeName = 0; } align(1) struct SHQUERYRBINFO { align(1): DWORD cbSize = SHQUERYRBINFO.sizeof; version (Win64) DWORD _padding; long i64Size; long i64NumItems; } alias SHQUERYRBINFO* LPSHQUERYRBINFO; extern (Windows) nothrow @nogc { LPWSTR* CommandLineToArgvW(LPCWSTR, int*); void DragAcceptFiles(HWND, BOOL); void DragFinish(HDROP); UINT DragQueryFileA(HDROP, UINT, LPSTR, UINT); UINT DragQueryFileW(HDROP, UINT, LPWSTR, UINT); BOOL DragQueryPoint(HDROP, LPPOINT); HICON DuplicateIcon(HINSTANCE, HICON); HICON ExtractAssociatedIconA(HINSTANCE, LPCSTR, PWORD); HICON ExtractAssociatedIconW(HINSTANCE, LPCWSTR, PWORD); HICON ExtractIconA(HINSTANCE, LPCSTR, UINT); HICON ExtractIconW(HINSTANCE, LPCWSTR, UINT); UINT ExtractIconExA(LPCSTR, int, HICON*, HICON*, UINT); UINT ExtractIconExW(LPCWSTR, int, HICON*, HICON*, UINT); HINSTANCE FindExecutableA(LPCSTR, LPCSTR, LPSTR); HINSTANCE FindExecutableW(LPCWSTR, LPCWSTR, LPWSTR); UINT_PTR SHAppBarMessage(DWORD, PAPPBARDATA); BOOL Shell_NotifyIconA(DWORD, PNOTIFYICONDATAA); BOOL Shell_NotifyIconW(DWORD, PNOTIFYICONDATAW); int ShellAboutA(HWND, LPCSTR, LPCSTR, HICON); int ShellAboutW(HWND, LPCWSTR, LPCWSTR, HICON); HINSTANCE ShellExecuteA(HWND, LPCSTR, LPCSTR, LPCSTR, LPCSTR, INT); HINSTANCE ShellExecuteW(HWND, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, INT); BOOL ShellExecuteExA(LPSHELLEXECUTEINFOA); BOOL ShellExecuteExW(LPSHELLEXECUTEINFOW); int SHFileOperationA(LPSHFILEOPSTRUCTA); int SHFileOperationW(LPSHFILEOPSTRUCTW); void SHFreeNameMappings(HANDLE); DWORD_PTR SHGetFileInfoA(LPCSTR, DWORD, SHFILEINFOA*, UINT, UINT); DWORD_PTR SHGetFileInfoW(LPCWSTR, DWORD, SHFILEINFOW*, UINT, UINT); HRESULT SHQueryRecycleBinA(LPCSTR, LPSHQUERYRBINFO); HRESULT SHQueryRecycleBinW(LPCWSTR, LPSHQUERYRBINFO); HRESULT SHEmptyRecycleBinA(HWND, LPCSTR, DWORD); HRESULT SHEmptyRecycleBinW(HWND, LPCWSTR, DWORD); } version (Unicode) { alias NOTIFYICONDATAW NOTIFYICONDATA; alias SHELLEXECUTEINFOW SHELLEXECUTEINFO; alias SHFILEOPSTRUCTW SHFILEOPSTRUCT; alias SHFILEINFOW SHFILEINFO; alias DragQueryFileW DragQueryFile; alias ExtractAssociatedIconW ExtractAssociatedIcon; alias ExtractIconW ExtractIcon; alias ExtractIconExW ExtractIconEx; alias FindExecutableW FindExecutable; alias Shell_NotifyIconW Shell_NotifyIcon; alias ShellAboutW ShellAbout; alias ShellExecuteW ShellExecute; alias ShellExecuteExW ShellExecuteEx; alias SHFileOperationW SHFileOperation; alias SHGetFileInfoW SHGetFileInfo; alias SHQueryRecycleBinW SHQueryRecycleBin; alias SHEmptyRecycleBinW SHEmptyRecycleBin; } else { alias NOTIFYICONDATAA NOTIFYICONDATA; alias SHELLEXECUTEINFOA SHELLEXECUTEINFO; alias SHFILEOPSTRUCTA SHFILEOPSTRUCT; alias SHFILEINFOA SHFILEINFO; alias DragQueryFileA DragQueryFile; alias ExtractAssociatedIconA ExtractAssociatedIcon; alias ExtractIconA ExtractIcon; alias ExtractIconExA ExtractIconEx; alias FindExecutableA FindExecutable; alias Shell_NotifyIconA Shell_NotifyIcon; alias ShellAboutA ShellAbout; alias ShellExecuteA ShellExecute; alias ShellExecuteExA ShellExecuteEx; alias SHFileOperationA SHFileOperation; alias SHGetFileInfoA SHGetFileInfo; alias SHQueryRecycleBinA SHQueryRecycleBin; alias SHEmptyRecycleBinA SHEmptyRecycleBin; } alias NOTIFYICONDATA* PNOTIFYICONDATA; alias SHELLEXECUTEINFO* LPSHELLEXECUTEINFO; alias SHFILEOPSTRUCT* LPSHFILEOPSTRUCT;