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