9 #pragma warning(disable:4201)
16 #define WINSHELLAPI DECLSPEC_IMPORT
21 #define ABS_AUTOHIDE 1
22 #define ABS_ALWAYSONTOP 2
24 #define SEE_MASK_DEFAULT 0x00000000
25 #define SEE_MASK_CLASSNAME 0x00000001
26 #define SEE_MASK_CLASSKEY 0x00000003
27 #define SEE_MASK_IDLIST 0x00000004
28 #define SEE_MASK_INVOKEIDLIST 0x0000000C
29 #define SEE_MASK_ICON 0x00000010
30 #define SEE_MASK_HOTKEY 0x00000020
31 #define SEE_MASK_NOCLOSEPROCESS 0x00000040
32 #define SEE_MASK_CONNECTNETDRV 0x00000080
33 #define SEE_MASK_NOASYNC 0x00000100
34 #define SEE_MASK_FLAG_DDEWAIT SEE_MASK_NOASYNC
35 #define SEE_MASK_DOENVSUBST 0x00000200
36 #define SEE_MASK_FLAG_NO_UI 0x00000400
37 #define SEE_MASK_UNICODE 0x00004000
38 #define SEE_MASK_NO_CONSOLE 0x00008000
40 * NOTE: The following three flags are undocumented and are not present in the
41 * official Windows SDK. However they are used in shobjidl.idl to define some
42 * CMIC_MASK_* flags, these ones being mentioned in the MSDN documentation of
43 * the CMINVOKECOMMANDINFOEX structure.
44 * I affect them this range of values which seems to be strangely empty. Of
45 * course their values may differ from the real ones, however I have no way
46 * of discovering them. If somebody else can verify them, it would be great.
48 #define SEE_MASK_HASLINKNAME 0x00010000
49 #define SEE_MASK_HASTITLE 0x00020000
50 #define SEE_MASK_FLAG_SEPVDM 0x00040000
52 #define SEE_MASK_ASYNCOK 0x00100000
53 #define SEE_MASK_HMONITOR 0x00200000
54 #define SEE_MASK_NOZONECHECKS 0x00800000
55 #define SEE_MASK_NOQUERYCLASSSTORE 0x01000000
56 #define SEE_MASK_WAITFORINPUTIDLE 0x02000000
57 #define SEE_MASK_FLAG_LOG_USAGE 0x04000000
61 #define ABM_QUERYPOS 2
63 #define ABM_GETSTATE 4
64 #define ABM_GETTASKBARPOS 5
65 #define ABM_ACTIVATE 6
66 #define ABM_GETAUTOHIDEBAR 7
67 #define ABM_SETAUTOHIDEBAR 8
68 #define ABM_WINDOWPOSCHANGED 9
69 #define ABN_STATECHANGE 0
70 #define ABN_POSCHANGED 1
71 #define ABN_FULLSCREENAPP 2
72 #define ABN_WINDOWARRANGE 3
76 #if _WIN32_IE >= 0x0500
77 #define NOTIFYICON_VERSION 3
78 #define NIM_SETFOCUS 3
79 #define NIM_SETVERSION 4
85 #if _WIN32_IE >= 0x0500
88 #define NIS_SHAREDICON 2
91 #define NIIF_WARNING 2
94 #if _WIN32_IE >= 0x0600
95 #define NIIF_ICON_MASK 0xf
96 #define NIIF_NOSOUND 0x10
97 #endif /* _WIN32_IE >= 0x0600 */
98 #endif /* _WIN32_IE >= 0x0500 */
101 #define SE_ERR_ACCESSDENIED 5
103 #define SE_ERR_DLLNOTFOUND 32
104 #define SE_ERR_SHARE 26
105 #define SE_ERR_ASSOCINCOMPLETE 27
106 #define SE_ERR_DDETIMEOUT 28
107 #define SE_ERR_DDEFAIL 29
108 #define SE_ERR_DDEBUSY 30
109 #define SE_ERR_NOASSOC 31
115 #define FOF_MULTIDESTFILES 0x0001
116 #define FOF_CONFIRMMOUSE 0x0002
117 #define FOF_SILENT 0x0004
118 #define FOF_RENAMEONCOLLISION 0x0008
119 #define FOF_NOCONFIRMATION 0x0010
120 #define FOF_WANTMAPPINGHANDLE 0x0020
121 #define FOF_ALLOWUNDO 0x0040
122 #define FOF_FILESONLY 0x0080
123 #define FOF_SIMPLEPROGRESS 0x0100
124 #define FOF_NOCONFIRMMKDIR 0x0200
125 #define FOF_NOERRORUI 0x0400
126 #define FOF_NOCOPYSECURITYATTRIBS 0x0800
127 #define FOF_NORECURSION 0x1000 /* don't do recursion into directories */
128 #define FOF_NO_CONNECTED_ELEMENTS 0x2000 /* don't do connected files */
129 #define FOF_WANTNUKEWARNING 0x4000 /* during delete operation, warn if delete instead
130 of recycling (even if FOF_NOCONFIRMATION) */
131 #define FOF_NORECURSEREPARSE 0x8000 /* don't do recursion into reparse points */
135 #define PO_PORTCHANGE 32
136 #define PO_REN_PORT 52
137 #define SHGFI_ADDOVERLAYS 32
138 #define SHGFI_OVERLAYINDEX 64
139 #define SHGFI_ICON 256
140 #define SHGFI_DISPLAYNAME 512
141 #define SHGFI_TYPENAME 1024
142 #define SHGFI_ATTRIBUTES 2048
143 #define SHGFI_ICONLOCATION 4096
144 #define SHGFI_EXETYPE 8192
145 #define SHGFI_SYSICONINDEX 16384
146 #define SHGFI_LINKOVERLAY 32768
147 #define SHGFI_SELECTED 65536
148 #define SHGFI_ATTR_SPECIFIED 131072
149 #define SHGFI_LARGEICON 0
150 #define SHGFI_SMALLICON 1
151 #define SHGFI_OPENICON 2
152 #define SHGFI_SHELLICONSIZE 4
154 #define SHGFI_USEFILEATTRIBUTES 16
156 #if (NTDDI_VERSION >= NTDDI_WINXP)
157 #define SHIL_LARGE 0x0
158 #define SHIL_SMALL 0x1
159 #define SHIL_EXTRALARGE 0x2
160 #define SHIL_SYSSMALL 0x3
161 #if (NTDDI_VERSION >= NTDDI_VISTA)
162 #define SHIL_JUMBO 0x4
163 #define SHIL_LAST SHIL_JUMBO
165 #define SHIL_LAST SHIL_SYSSMALL
169 typedef struct _SHCREATEPROCESSINFOW
175 LPCWSTR pszParameters
;
176 LPCWSTR pszCurrentDirectory
;
177 IN HANDLE hUserToken
;
178 IN LPSECURITY_ATTRIBUTES lpProcessAttributes
;
179 IN LPSECURITY_ATTRIBUTES lpThreadAttributes
;
180 IN BOOL bInheritHandles
;
181 IN DWORD dwCreationFlags
;
182 IN LPSTARTUPINFOW lpStartupInfo
;
183 OUT LPPROCESS_INFORMATION lpProcessInformation
;
184 } SHCREATEPROCESSINFOW
, *PSHCREATEPROCESSINFOW
;
186 typedef WORD FILEOP_FLAGS
;
187 typedef WORD PRINTEROP_FLAGS
;
189 typedef struct _AppBarData
{
192 UINT uCallbackMessage
;
196 } APPBARDATA
,*PAPPBARDATA
;
197 DECLARE_HANDLE(HDROP
);
199 typedef struct _NOTIFYICONDATAA
{
204 UINT uCallbackMessage
;
206 #if _WIN32_IE >= 0x0500
211 _ANONYMOUS_UNION
union {
215 CHAR szInfoTitle
[64];
220 #if _WIN32_IE >= 0x600
223 } NOTIFYICONDATAA
,*PNOTIFYICONDATAA
;
225 typedef struct _NOTIFYICONDATAW
{
230 UINT uCallbackMessage
;
232 #if _WIN32_IE >= 0x0500
237 _ANONYMOUS_UNION
union {
241 WCHAR szInfoTitle
[64];
246 #if _WIN32_IE >= 0x600
249 } NOTIFYICONDATAW
,*PNOTIFYICONDATAW
;
251 #define NOTIFYICONDATAA_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
252 #define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
253 #define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
254 #define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
257 typedef struct _DRAGINFOA
{
263 } DRAGINFOA
,*LPDRAGINFOA
;
264 typedef struct _DRAGINFOW
{
270 } DRAGINFOW
,*LPDRAGINFOW
;
273 typedef struct _SHELLEXECUTEINFOA
{
289 } SHELLEXECUTEINFOA
,*LPSHELLEXECUTEINFOA
;
290 typedef struct _SHELLEXECUTEINFOW
{
296 LPCWSTR lpParameters
;
306 } SHELLEXECUTEINFOW
,*LPSHELLEXECUTEINFOW
;
307 typedef struct _SHFILEOPSTRUCTA
{
313 BOOL fAnyOperationsAborted
;
315 LPCSTR lpszProgressTitle
;
316 } SHFILEOPSTRUCTA
,*LPSHFILEOPSTRUCTA
;
317 typedef struct _SHFILEOPSTRUCTW
{
323 BOOL fAnyOperationsAborted
;
325 LPCWSTR lpszProgressTitle
;
326 } SHFILEOPSTRUCTW
,*LPSHFILEOPSTRUCTW
;
327 typedef struct _SHFILEINFOA
{
331 CHAR szDisplayName
[MAX_PATH
];
334 typedef struct _SHFILEINFOW
{
338 WCHAR szDisplayName
[MAX_PATH
];
339 WCHAR szTypeName
[80];
341 typedef struct _SHQUERYRBINFO
{
345 } SHQUERYRBINFO
, *LPSHQUERYRBINFO
;
346 typedef struct _SHNAMEMAPPINGA
{
351 } SHNAMEMAPPINGA
, *LPSHNAMEMAPPINGA
;
352 typedef struct _SHNAMEMAPPINGW
{
357 } SHNAMEMAPPINGW
, *LPSHNAMEMAPPINGW
;
359 #define SHERB_NOCONFIRMATION 0x1
360 #define SHERB_NOPROGRESSUI 0x2
361 #define SHERB_NOSOUND 0x4
363 /******************************************
367 #define SHGNLI_PIDL 0x01
368 #define SHGNLI_PREFIXNAME 0x02
369 #define SHGNLI_NOUNIQUE 0x04
370 #define SHGNLI_NOLNK 0x08
372 LPWSTR
* WINAPI
CommandLineToArgvW(_In_ LPCWSTR
, _Out_
int*);
373 void WINAPI
DragAcceptFiles(_In_ HWND
, _In_ BOOL
);
374 void WINAPI
DragFinish(_In_ HDROP
);
376 _Success_(return != 0)
382 _Out_writes_opt_(cch
) LPSTR lpszFile
,
385 _Success_(return != 0)
391 _Out_writes_opt_(cch
) LPWSTR lpszFile
,
394 BOOL WINAPI
DragQueryPoint(_In_ HDROP
, _Out_ LPPOINT
);
398 ExtractAssociatedIconA(
399 _Reserved_ HINSTANCE hInst
,
400 _Inout_updates_(128) LPSTR pszIconPath
,
401 _Inout_ WORD
*piIcon
);
405 ExtractAssociatedIconW(
406 _Reserved_ HINSTANCE hInst
,
407 _Inout_updates_(128) LPWSTR pszIconPath
,
408 _Inout_ WORD
*piIcon
);
413 _Reserved_ HINSTANCE hInst
,
414 _In_ LPCSTR pszExeFileName
,
420 _Reserved_ HINSTANCE hInst
,
421 _In_ LPCWSTR pszExeFileName
,
427 _In_ LPCSTR lpszFile
,
429 _Out_writes_opt_(nIcons
) HICON
*phiconLarge
,
430 _Out_writes_opt_(nIcons
) HICON
*phiconSmall
,
436 _In_ LPCWSTR lpszFile
,
438 _Out_writes_opt_(nIcons
) HICON
*phiconLarge
,
439 _Out_writes_opt_(nIcons
) HICON
*phiconSmall
,
442 _Success_(return > 32)
447 _In_opt_ LPCSTR lpDirectory
,
448 _Out_writes_(MAX_PATH
) LPSTR lpResult
);
450 _Success_(return > 32)
455 _In_opt_ LPCWSTR lpDirectory
,
456 _Out_writes_(MAX_PATH
) LPWSTR lpResult
);
458 UINT_PTR WINAPI
SHAppBarMessage(_In_ DWORD
, _Inout_ PAPPBARDATA
);
459 BOOL WINAPI
Shell_NotifyIconA(_In_ DWORD
, _In_ PNOTIFYICONDATAA
);
460 BOOL WINAPI
Shell_NotifyIconW(_In_ DWORD
, _In_ PNOTIFYICONDATAW
);
467 _In_opt_ LPCSTR szOtherStuff
,
468 _In_opt_ HICON hIcon
);
475 _In_opt_ LPCWSTR szOtherStuff
,
476 _In_opt_ HICON hIcon
);
480 _In_opt_ HINSTANCE hAppInst
,
483 _In_opt_ LPCSTR lpcTitle
,
489 _In_opt_ HINSTANCE hAppInst
,
491 _In_ LPCWSTR lpcText
,
492 _In_opt_ LPCWSTR lpcTitle
,
500 _In_opt_ LPCSTR lpOperation
,
502 _In_opt_ LPCSTR lpParameters
,
503 _In_opt_ LPCSTR lpDirectory
,
510 _In_opt_ LPCWSTR lpOperation
,
512 _In_opt_ LPCWSTR lpParameters
,
513 _In_opt_ LPCWSTR lpDirectory
,
516 BOOL WINAPI
ShellExecuteExA(_Inout_ LPSHELLEXECUTEINFOA
);
517 BOOL WINAPI
ShellExecuteExW(_Inout_ LPSHELLEXECUTEINFOW
);
518 int WINAPI
SHFileOperationA(_Inout_ LPSHFILEOPSTRUCTA
);
519 int WINAPI
SHFileOperationW(_Inout_ LPSHFILEOPSTRUCTW
);
520 void WINAPI
SHFreeNameMappings(_In_opt_ HANDLE
);
526 DWORD dwFileAttributes
,
527 _Inout_updates_bytes_opt_(cbFileInfo
) SHFILEINFOA
*psfi
,
534 _In_ LPCWSTR pszPath
,
535 DWORD dwFileAttributes
,
536 _Inout_updates_bytes_opt_(cbFileInfo
) SHFILEINFOW
*psfi
,
540 _Success_(return != 0)
544 _In_ LPCSTR pszLinkTo
,
546 _Out_writes_(MAX_PATH
) LPSTR pszName
,
547 _Out_ BOOL
*pfMustCopy
,
550 _Success_(return != 0)
554 _In_ LPCWSTR pszLinkTo
,
556 _Out_writes_(MAX_PATH
) LPWSTR pszName
,
557 _Out_ BOOL
*pfMustCopy
,
563 _In_opt_ LPCSTR pszRootPath
,
564 _Inout_ LPSHQUERYRBINFO pSHQueryRBInfo
);
569 _In_opt_ LPCWSTR pszRootPath
,
570 _Inout_ LPSHQUERYRBINFO pSHQueryRBInfo
);
576 _In_opt_ LPCSTR pszRootPath
,
583 _In_opt_ LPCWSTR pszRootPath
,
586 BOOL WINAPI
SHCreateProcessAsUserW(_Inout_ PSHCREATEPROCESSINFOW
);
591 _Inout_updates_(cchSrc
) LPSTR pszSrc
,
597 _Inout_updates_(cchSrc
) LPWSTR pszSrc
,
601 #define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAW_V1_SIZE
602 #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE
603 typedef NOTIFYICONDATAW NOTIFYICONDATA
,*PNOTIFYICONDATA
;
604 typedef DRAGINFOW DRAGINFO
,*LPDRAGINFO
;
605 typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO
,*LPSHELLEXECUTEINFO
;
606 typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT
,*LPSHFILEOPSTRUCT
;
607 typedef SHFILEINFOW SHFILEINFO
;
608 typedef SHNAMEMAPPINGW SHNAMEMAPPING
;
609 typedef LPSHNAMEMAPPINGW LPSHNAMEMAPPING
;
610 #define DragQueryFile DragQueryFileW
611 #define ExtractAssociatedIcon ExtractAssociatedIconW
612 #define ExtractIcon ExtractIconW
613 #define ExtractIconEx ExtractIconExW
614 #define FindExecutable FindExecutableW
615 #define Shell_NotifyIcon Shell_NotifyIconW
616 #define ShellAbout ShellAboutW
617 #define ShellExecute ShellExecuteW
618 #define ShellExecuteEx ShellExecuteExW
619 #define ShellMessageBox ShellMessageBoxW
620 #define SHFileOperation SHFileOperationW
621 #define SHGetFileInfo SHGetFileInfoW
622 #define SHQueryRecycleBin SHQueryRecycleBinW
623 #define SHEmptyRecycleBin SHEmptyRecycleBinW
624 #define SHGetNewLinkInfo SHGetNewLinkInfoW
625 #define DoEnvironmentSubst DoEnvironmentSubstW
628 #define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAA_V1_SIZE
629 #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAA_V2_SIZE
630 typedef NOTIFYICONDATAA NOTIFYICONDATA
,*PNOTIFYICONDATA
;
631 typedef DRAGINFOA DRAGINFO
,*LPDRAGINFO
;
632 typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO
,*LPSHELLEXECUTEINFO
;
633 typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT
,*LPSHFILEOPSTRUCT
;
634 typedef SHFILEINFOA SHFILEINFO
;
635 typedef SHNAMEMAPPINGA SHNAMEMAPPING
;
636 typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING
;
637 #define DragQueryFile DragQueryFileA
638 #define ExtractAssociatedIcon ExtractAssociatedIconA
639 #define ExtractIcon ExtractIconA
640 #define ExtractIconEx ExtractIconExA
641 #define FindExecutable FindExecutableA
642 #define Shell_NotifyIcon Shell_NotifyIconA
643 #define ShellAbout ShellAboutA
644 #define ShellExecute ShellExecuteA
645 #define ShellExecuteEx ShellExecuteExA
646 #define ShellMessageBox ShellMessageBoxA
647 #define SHFileOperation SHFileOperationA
648 #define SHGetFileInfo SHGetFileInfoA
649 #define SHQueryRecycleBin SHQueryRecycleBinA
650 #define SHEmptyRecycleBin SHEmptyRecycleBinA
651 #define SHGetNewLinkInfo SHGetNewLinkInfoA
652 #define DoEnvironmentSubst DoEnvironmentSubstA