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