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