1/** 2 * Windows API header module 3 * 4 * Translated from MinGW Windows headers 5 * 6 * Authors: Stewart Gordon 7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 8 * Source: $(DRUNTIMESRC core/sys/windows/_shellapi.d) 9 */ 10module core.sys.windows.shellapi; 11version (Windows): 12@system: 13 14version (ANSI) {} else version = Unicode; 15pragma(lib, "shell32"); 16 17import core.sys.windows.w32api, core.sys.windows.windef, core.sys.windows.basetyps; 18 19enum : UINT { 20 ABE_LEFT, 21 ABE_TOP, 22 ABE_RIGHT, 23 ABE_BOTTOM // = 3 24} 25 26enum : UINT { 27 ABS_AUTOHIDE = 1, 28 ABS_ALWAYSONTOP 29} 30 31enum ULONG 32 SEE_MASK_CLASSNAME = 1, 33 SEE_MASK_CLASSKEY = 3, 34 SEE_MASK_IDLIST = 4, 35 SEE_MASK_INVOKEIDLIST = 12, 36 SEE_MASK_ICON = 0x000010, 37 SEE_MASK_HOTKEY = 0x000020, 38 SEE_MASK_NOCLOSEPROCESS = 0x000040, 39 SEE_MASK_CONNECTNETDRV = 0x000080, 40 SEE_MASK_FLAG_DDEWAIT = 0x000100, 41 SEE_MASK_DOENVSUBST = 0x000200, 42 SEE_MASK_FLAG_NO_UI = 0x000400, 43 SEE_MASK_NO_CONSOLE = 0x008000, 44 SEE_MASK_UNICODE = 0x010000, 45 SEE_MASK_ASYNCOK = 0x100000, 46 SEE_MASK_HMONITOR = 0x200000; 47 48enum : DWORD { 49 ABM_NEW, 50 ABM_REMOVE, 51 ABM_QUERYPOS, 52 ABM_SETPOS, 53 ABM_GETSTATE, 54 ABM_GETTASKBARPOS, 55 ABM_ACTIVATE, 56 ABM_GETAUTOHIDEBAR, 57 ABM_SETAUTOHIDEBAR, 58 ABM_WINDOWPOSCHANGED // = 9 59} 60 61static if (_WIN32_WINNT >= 0x501) { 62enum DWORD ABM_SETSTATE = 10; 63} 64 65enum : UINT { 66 ABN_STATECHANGE, 67 ABN_POSCHANGED, 68 ABN_FULLSCREENAPP, 69 ABN_WINDOWARRANGE 70} 71 72enum : DWORD { 73 NIM_ADD, 74 NIM_MODIFY, 75 NIM_DELETE 76} 77 78static if (_WIN32_IE >= 0x500) { 79enum NOTIFYICON_VERSION = 3; 80 81 enum : DWORD { 82 NIM_SETFOCUS = 3, 83 NIM_SETVERSION 84 } 85} 86 87enum UINT 88 NIF_MESSAGE = 1, 89 NIF_ICON = 2, 90 NIF_TIP = 4, 91 NIF_STATE = 8; 92 93static if (_WIN32_IE >= 0x500) { 94enum UINT NIF_INFO = 0x00000010; 95} 96 97static if (_WIN32_IE >= 0x600) { 98enum UINT NIF_GUID = 0x00000020; 99} 100 101static if (_WIN32_IE >= 0x500) { 102 enum : DWORD { 103 NIIF_NONE, 104 NIIF_INFO, 105 NIIF_WARNING, 106 NIIF_ERROR 107 } 108} 109 110static if (_WIN32_IE >= 0x600) { 111 enum : DWORD { 112 NIIF_ICON_MASK = 15, 113 NIIF_NOSOUND 114 } 115} 116 117enum DWORD 118 NIS_HIDDEN = 1, 119 NIS_SHAREDICON = 2; 120 121enum HINSTANCE 122 SE_ERR_FNF = cast(HINSTANCE) 2, 123 SE_ERR_PNF = cast(HINSTANCE) 3, 124 SE_ERR_ACCESSDENIED = cast(HINSTANCE) 5, 125 SE_ERR_OOM = cast(HINSTANCE) 8, 126 SE_ERR_DLLNOTFOUND = cast(HINSTANCE) 32, 127 SE_ERR_SHARE = cast(HINSTANCE) 26, 128 SE_ERR_ASSOCINCOMPLETE = cast(HINSTANCE) 27, 129 SE_ERR_DDETIMEOUT = cast(HINSTANCE) 28, 130 SE_ERR_DDEFAIL = cast(HINSTANCE) 29, 131 SE_ERR_DDEBUSY = cast(HINSTANCE) 30, 132 SE_ERR_NOASSOC = cast(HINSTANCE) 31; 133 134enum : UINT { 135 FO_MOVE = 1, 136 FO_COPY, 137 FO_DELETE, 138 FO_RENAME 139} 140 141enum FILEOP_FLAGS 142 FOF_MULTIDESTFILES = 0x0001, 143 FOF_CONFIRMMOUSE = 0x0002, 144 FOF_SILENT = 0x0004, 145 FOF_RENAMEONCOLLISION = 0x0008, 146 FOF_NOCONFIRMATION = 0x0010, 147 FOF_WANTMAPPINGHANDLE = 0x0020, 148 FOF_ALLOWUNDO = 0x0040, 149 FOF_FILESONLY = 0x0080, 150 FOF_SIMPLEPROGRESS = 0x0100, 151 FOF_NOCONFIRMMKDIR = 0x0200, 152 FOF_NOERRORUI = 0x0400, 153 FOF_NOCOPYSECURITYATTRIBS = 0x0800; 154 155// these are not documented on the MSDN site 156enum { 157 PO_DELETE = 19, 158 PO_RENAME = 20, 159 PO_PORTCHANGE = 32, 160 PO_REN_PORT = 52 161} 162 163enum UINT 164 SHGFI_LARGEICON = 0x000000, 165 SHGFI_SMALLICON = 0x000001, 166 SHGFI_OPENICON = 0x000002, 167 SHGFI_SHELLICONSIZE = 0x000004, 168 SHGFI_PIDL = 0x000008, 169 SHGFI_USEFILEATTRIBUTES = 0x000010, 170 SHGFI_ICON = 0x000100, 171 SHGFI_DISPLAYNAME = 0x000200, 172 SHGFI_TYPENAME = 0x000400, 173 SHGFI_ATTRIBUTES = 0x000800, 174 SHGFI_ICONLOCATION = 0x001000, 175 SHGFI_EXETYPE = 0x002000, 176 SHGFI_SYSICONINDEX = 0x004000, 177 SHGFI_LINKOVERLAY = 0x008000, 178 SHGFI_SELECTED = 0x010000, 179 SHGFI_ATTR_SPECIFIED = 0x020000; 180 181static if (_WIN32_IE >= 0x500) { 182enum uint 183 SHGFI_ADDOVERLAYS = 0x000020, 184 SHGFI_OVERLAYINDEX = 0x000040; 185} 186 187enum SHERB_NOCONFIRMATION = 1; 188enum SHERB_NOPROGRESSUI = 2; 189enum SHERB_NOSOUND = 4; 190 191alias WORD FILEOP_FLAGS, PRINTEROP_FLAGS; 192mixin DECLARE_HANDLE!("HDROP"); 193 194//align(2): // 1 in Win32, default in Win64 195 196struct APPBARDATA { 197 DWORD cbSize = APPBARDATA.sizeof; 198 HWND hWnd; 199 UINT uCallbackMessage; 200 UINT uEdge; 201 RECT rc; 202 LPARAM lParam; 203} 204alias APPBARDATA* PAPPBARDATA; 205 206struct NOTIFYICONDATAA { 207 DWORD cbSize = NOTIFYICONDATAA.sizeof; 208 HWND hWnd; 209 UINT uID; 210 UINT uFlags; 211 UINT uCallbackMessage; 212 HICON hIcon; 213 static if (_WIN32_IE >= 0x500) { 214 CHAR[128] szTip = 0; 215 DWORD dwState; 216 DWORD dwStateMask; 217 CHAR[256] szInfo = 0; 218 union { 219 UINT uTimeout; 220 UINT uVersion; 221 } 222 CHAR[64] szInfoTitle = 0; 223 DWORD dwInfoFlags; 224 } else { 225 CHAR[64] szTip = 0; 226 } 227 static if (_WIN32_IE >= 0x600) { 228 GUID guidItem; 229 } 230} 231alias NOTIFYICONDATAA* PNOTIFYICONDATAA; 232 233struct NOTIFYICONDATAW { 234 DWORD cbSize = NOTIFYICONDATAW.sizeof; 235 HWND hWnd; 236 UINT uID; 237 UINT uFlags; 238 UINT uCallbackMessage; 239 HICON hIcon; 240 static if (_WIN32_IE >= 0x500) { 241 WCHAR[128] szTip = 0; 242 DWORD dwState; 243 DWORD dwStateMask; 244 WCHAR[256] szInfo = 0; 245 union { 246 UINT uTimeout; 247 UINT uVersion; 248 } 249 WCHAR[64] szInfoTitle = 0; 250 DWORD dwInfoFlags; 251 } else { 252 WCHAR[64] szTip = 0; 253 } 254 static if (_WIN32_IE >= 0x600) { 255 GUID guidItem; 256 } 257} 258alias NOTIFYICONDATAW* PNOTIFYICONDATAW; 259 260struct SHELLEXECUTEINFOA { 261 DWORD cbSize = SHELLEXECUTEINFOA.sizeof; 262 ULONG fMask; 263 HWND hwnd; 264 LPCSTR lpVerb; 265 LPCSTR lpFile; 266 LPCSTR lpParameters; 267 LPCSTR lpDirectory; 268 int nShow; 269 HINSTANCE hInstApp; 270 PVOID lpIDList; 271 LPCSTR lpClass; 272 HKEY hkeyClass; 273 DWORD dwHotKey; 274 HANDLE hIcon; 275 HANDLE hProcess; 276} 277alias SHELLEXECUTEINFOA* LPSHELLEXECUTEINFOA; 278 279struct SHELLEXECUTEINFOW { 280 DWORD cbSize = SHELLEXECUTEINFOW.sizeof; 281 ULONG fMask; 282 HWND hwnd; 283 LPCWSTR lpVerb; 284 LPCWSTR lpFile; 285 LPCWSTR lpParameters; 286 LPCWSTR lpDirectory; 287 int nShow; 288 HINSTANCE hInstApp; 289 PVOID lpIDList; 290 LPCWSTR lpClass; 291 HKEY hkeyClass; 292 DWORD dwHotKey; 293 HANDLE hIcon; 294 HANDLE hProcess; 295} 296alias SHELLEXECUTEINFOW* LPSHELLEXECUTEINFOW; 297 298align(1) struct SHFILEOPSTRUCTA { 299align(1): 300 HWND hwnd; 301 UINT wFunc; 302 version (Win64) 303 WORD _padding1; 304 LPCSTR pFrom; 305 LPCSTR pTo; 306 FILEOP_FLAGS fFlags; 307 version (Win64) 308 DWORD _padding2; 309 BOOL fAnyOperationsAborted; 310 PVOID hNameMappings; 311 LPCSTR lpszProgressTitle; 312} 313alias SHFILEOPSTRUCTA* LPSHFILEOPSTRUCTA; 314 315align(1) struct SHFILEOPSTRUCTW { 316align(1): 317 HWND hwnd; 318 UINT wFunc; 319 version (Win64) 320 DWORD _padding1; 321 LPCWSTR pFrom; 322 LPCWSTR pTo; 323 FILEOP_FLAGS fFlags; 324 version (Win64) 325 WORD _padding2; 326 BOOL fAnyOperationsAborted; 327 PVOID hNameMappings; 328 LPCWSTR lpszProgressTitle; 329} 330alias SHFILEOPSTRUCTW* LPSHFILEOPSTRUCTW; 331 332struct SHFILEINFOA { 333 HICON hIcon; 334 int iIcon; 335 DWORD dwAttributes; 336 CHAR[MAX_PATH] szDisplayName = 0; 337 CHAR[80] szTypeName = 0; 338} 339 340struct SHFILEINFOW { 341 HICON hIcon; 342 int iIcon; 343 DWORD dwAttributes; 344 WCHAR[MAX_PATH] szDisplayName = 0; 345 WCHAR[80] szTypeName = 0; 346} 347 348align(1) struct SHQUERYRBINFO { 349align(1): 350 DWORD cbSize = SHQUERYRBINFO.sizeof; 351 version (Win64) 352 DWORD _padding; 353 long i64Size; 354 long i64NumItems; 355} 356alias SHQUERYRBINFO* LPSHQUERYRBINFO; 357 358extern (Windows) nothrow @nogc { 359 LPWSTR* CommandLineToArgvW(LPCWSTR, int*); 360 void DragAcceptFiles(HWND, BOOL); 361 void DragFinish(HDROP); 362 UINT DragQueryFileA(HDROP, UINT, LPSTR, UINT); 363 UINT DragQueryFileW(HDROP, UINT, LPWSTR, UINT); 364 BOOL DragQueryPoint(HDROP, LPPOINT); 365 HICON DuplicateIcon(HINSTANCE, HICON); 366 HICON ExtractAssociatedIconA(HINSTANCE, LPCSTR, PWORD); 367 HICON ExtractAssociatedIconW(HINSTANCE, LPCWSTR, PWORD); 368 HICON ExtractIconA(HINSTANCE, LPCSTR, UINT); 369 HICON ExtractIconW(HINSTANCE, LPCWSTR, UINT); 370 UINT ExtractIconExA(LPCSTR, int, HICON*, HICON*, UINT); 371 UINT ExtractIconExW(LPCWSTR, int, HICON*, HICON*, UINT); 372 HINSTANCE FindExecutableA(LPCSTR, LPCSTR, LPSTR); 373 HINSTANCE FindExecutableW(LPCWSTR, LPCWSTR, LPWSTR); 374 UINT_PTR SHAppBarMessage(DWORD, PAPPBARDATA); 375 BOOL Shell_NotifyIconA(DWORD, PNOTIFYICONDATAA); 376 BOOL Shell_NotifyIconW(DWORD, PNOTIFYICONDATAW); 377 int ShellAboutA(HWND, LPCSTR, LPCSTR, HICON); 378 int ShellAboutW(HWND, LPCWSTR, LPCWSTR, HICON); 379 HINSTANCE ShellExecuteA(HWND, LPCSTR, LPCSTR, LPCSTR, LPCSTR, INT); 380 HINSTANCE ShellExecuteW(HWND, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, INT); 381 BOOL ShellExecuteExA(LPSHELLEXECUTEINFOA); 382 BOOL ShellExecuteExW(LPSHELLEXECUTEINFOW); 383 int SHFileOperationA(LPSHFILEOPSTRUCTA); 384 int SHFileOperationW(LPSHFILEOPSTRUCTW); 385 void SHFreeNameMappings(HANDLE); 386 DWORD_PTR SHGetFileInfoA(LPCSTR, DWORD, SHFILEINFOA*, UINT, UINT); 387 DWORD_PTR SHGetFileInfoW(LPCWSTR, DWORD, SHFILEINFOW*, UINT, UINT); 388 HRESULT SHQueryRecycleBinA(LPCSTR, LPSHQUERYRBINFO); 389 HRESULT SHQueryRecycleBinW(LPCWSTR, LPSHQUERYRBINFO); 390 HRESULT SHEmptyRecycleBinA(HWND, LPCSTR, DWORD); 391 HRESULT SHEmptyRecycleBinW(HWND, LPCWSTR, DWORD); 392} 393 394version (Unicode) { 395 alias NOTIFYICONDATAW NOTIFYICONDATA; 396 alias SHELLEXECUTEINFOW SHELLEXECUTEINFO; 397 alias SHFILEOPSTRUCTW SHFILEOPSTRUCT; 398 alias SHFILEINFOW SHFILEINFO; 399 alias DragQueryFileW DragQueryFile; 400 alias ExtractAssociatedIconW ExtractAssociatedIcon; 401 alias ExtractIconW ExtractIcon; 402 alias ExtractIconExW ExtractIconEx; 403 alias FindExecutableW FindExecutable; 404 alias Shell_NotifyIconW Shell_NotifyIcon; 405 alias ShellAboutW ShellAbout; 406 alias ShellExecuteW ShellExecute; 407 alias ShellExecuteExW ShellExecuteEx; 408 alias SHFileOperationW SHFileOperation; 409 alias SHGetFileInfoW SHGetFileInfo; 410 alias SHQueryRecycleBinW SHQueryRecycleBin; 411 alias SHEmptyRecycleBinW SHEmptyRecycleBin; 412} else { 413 alias NOTIFYICONDATAA NOTIFYICONDATA; 414 alias SHELLEXECUTEINFOA SHELLEXECUTEINFO; 415 alias SHFILEOPSTRUCTA SHFILEOPSTRUCT; 416 alias SHFILEINFOA SHFILEINFO; 417 alias DragQueryFileA DragQueryFile; 418 alias ExtractAssociatedIconA ExtractAssociatedIcon; 419 alias ExtractIconA ExtractIcon; 420 alias ExtractIconExA ExtractIconEx; 421 alias FindExecutableA FindExecutable; 422 alias Shell_NotifyIconA Shell_NotifyIcon; 423 alias ShellAboutA ShellAbout; 424 alias ShellExecuteA ShellExecute; 425 alias ShellExecuteExA ShellExecuteEx; 426 alias SHFileOperationA SHFileOperation; 427 alias SHGetFileInfoA SHGetFileInfo; 428 alias SHQueryRecycleBinA SHQueryRecycleBin; 429 alias SHEmptyRecycleBinA SHEmptyRecycleBin; 430} 431 432alias NOTIFYICONDATA* PNOTIFYICONDATA; 433alias SHELLEXECUTEINFO* LPSHELLEXECUTEINFO; 434alias SHFILEOPSTRUCT* LPSHFILEOPSTRUCT; 435