xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/windows/shellapi.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
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 module core.sys.windows.shellapi;
version(Windows)11 version (Windows):
12 @system:
13 
14 version (ANSI) {} else version = Unicode;
15 pragma(lib, "shell32");
16 
17 import core.sys.windows.w32api, core.sys.windows.windef, core.sys.windows.basetyps;
18 
19 enum : UINT {
20     ABE_LEFT,
21     ABE_TOP,
22     ABE_RIGHT,
23     ABE_BOTTOM // = 3
24 }
25 
26 enum : UINT {
27     ABS_AUTOHIDE    = 1,
28     ABS_ALWAYSONTOP
29 }
30 
31 enum 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 
48 enum : 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 
61 static if (_WIN32_WINNT >= 0x501) {
62 enum DWORD ABM_SETSTATE = 10;
63 }
64 
65 enum : UINT {
66     ABN_STATECHANGE,
67     ABN_POSCHANGED,
68     ABN_FULLSCREENAPP,
69     ABN_WINDOWARRANGE
70 }
71 
72 enum : DWORD {
73     NIM_ADD,
74     NIM_MODIFY,
75     NIM_DELETE
76 }
77 
78 static if (_WIN32_IE >= 0x500) {
79 enum NOTIFYICON_VERSION = 3;
80 
81     enum : DWORD {
82         NIM_SETFOCUS = 3,
83         NIM_SETVERSION
84     }
85 }
86 
87 enum UINT
88     NIF_MESSAGE = 1,
89     NIF_ICON    = 2,
90     NIF_TIP     = 4,
91     NIF_STATE   = 8;
92 
93 static if (_WIN32_IE >= 0x500) {
94 enum UINT NIF_INFO = 0x00000010;
95 }
96 
97 static if (_WIN32_IE >= 0x600) {
98 enum UINT NIF_GUID = 0x00000020;
99 }
100 
101 static if (_WIN32_IE >= 0x500) {
102     enum : DWORD {
103         NIIF_NONE,
104         NIIF_INFO,
105         NIIF_WARNING,
106         NIIF_ERROR
107     }
108 }
109 
110 static if (_WIN32_IE >= 0x600) {
111     enum : DWORD {
112         NIIF_ICON_MASK = 15,
113         NIIF_NOSOUND
114     }
115 }
116 
117 enum DWORD
118     NIS_HIDDEN     = 1,
119     NIS_SHAREDICON = 2;
120 
121 enum 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 
134 enum : UINT {
135     FO_MOVE = 1,
136     FO_COPY,
137     FO_DELETE,
138     FO_RENAME
139 }
140 
141 enum 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
156 enum {
157     PO_DELETE     = 19,
158     PO_RENAME     = 20,
159     PO_PORTCHANGE = 32,
160     PO_REN_PORT   = 52
161 }
162 
163 enum 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 
181 static if (_WIN32_IE >= 0x500) {
182 enum uint
183         SHGFI_ADDOVERLAYS   = 0x000020,
184         SHGFI_OVERLAYINDEX  = 0x000040;
185 }
186 
187 enum SHERB_NOCONFIRMATION = 1;
188 enum SHERB_NOPROGRESSUI   = 2;
189 enum SHERB_NOSOUND        = 4;
190 
191 alias WORD FILEOP_FLAGS, PRINTEROP_FLAGS;
192 mixin DECLARE_HANDLE!("HDROP");
193 
194 //align(2): // 1 in Win32, default in Win64
195 
196 struct APPBARDATA {
197     DWORD  cbSize = APPBARDATA.sizeof;
198     HWND   hWnd;
199     UINT   uCallbackMessage;
200     UINT   uEdge;
201     RECT   rc;
202     LPARAM lParam;
203 }
204 alias APPBARDATA* PAPPBARDATA;
205 
206 struct 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 }
231 alias NOTIFYICONDATAA* PNOTIFYICONDATAA;
232 
233 struct 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 }
258 alias NOTIFYICONDATAW* PNOTIFYICONDATAW;
259 
260 struct 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 }
277 alias SHELLEXECUTEINFOA* LPSHELLEXECUTEINFOA;
278 
279 struct 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 }
296 alias SHELLEXECUTEINFOW* LPSHELLEXECUTEINFOW;
297 
298 align(1) struct SHFILEOPSTRUCTA {
299 align(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 }
313 alias SHFILEOPSTRUCTA* LPSHFILEOPSTRUCTA;
314 
315 align(1) struct SHFILEOPSTRUCTW {
316 align(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 }
330 alias SHFILEOPSTRUCTW* LPSHFILEOPSTRUCTW;
331 
332 struct SHFILEINFOA {
333     HICON          hIcon;
334     int            iIcon;
335     DWORD          dwAttributes;
336     CHAR[MAX_PATH] szDisplayName = 0;
337     CHAR[80]       szTypeName = 0;
338 }
339 
340 struct SHFILEINFOW {
341     HICON           hIcon;
342     int             iIcon;
343     DWORD           dwAttributes;
344     WCHAR[MAX_PATH] szDisplayName = 0;
345     WCHAR[80]       szTypeName = 0;
346 }
347 
348 align(1) struct SHQUERYRBINFO {
349 align(1):
350     DWORD cbSize = SHQUERYRBINFO.sizeof;
351     version (Win64)
352         DWORD _padding;
353     long  i64Size;
354     long  i64NumItems;
355 }
356 alias SHQUERYRBINFO* LPSHQUERYRBINFO;
357 
358 extern (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 
394 version (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 
432 alias NOTIFYICONDATA* PNOTIFYICONDATA;
433 alias SHELLEXECUTEINFO* LPSHELLEXECUTEINFO;
434 alias SHFILEOPSTRUCT* LPSHFILEOPSTRUCT;
435