blob: 2b7f1456d22f82462c0393aed0c979e57116d915 [file] [log] [blame]
/**
* 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 src/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;