winapi_ui_automation/um/
shlobj.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6use ctypes::{c_int, c_void};
7use shared::guiddef::REFIID;
8use shared::minwindef::{BOOL, DWORD, UINT};
9use shared::windef::HWND;
10use um::minwinbase::SECURITY_ATTRIBUTES;
11use um::shtypes::{PCIDLIST_ABSOLUTE, PCUITEMID_CHILD_ARRAY, PIDLIST_ABSOLUTE, REFKNOWNFOLDERID};
12use um::winnt::{HANDLE, HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PWSTR};
13pub const IDO_SHGIOI_SHARE: c_int = 0x0FFFFFFF;
14pub const IDO_SHGIOI_LINK: c_int = 0x0FFFFFFE;
15// Yes, these values are supposed to be 9 digits
16pub const IDO_SHGIOI_SLOWFILE: c_int = 0x0FFFFFFFD;
17pub const IDO_SHGIOI_DEFAULT: c_int = 0x0FFFFFFFC;
18extern "system" {
19    pub fn SHGetIconOverlayIndexA(
20        pszIconPath: LPCSTR,
21        iIconIndex: c_int,
22    ) -> c_int;
23    pub fn SHGetIconOverlayIndexW(
24        pszIconPath: LPCWSTR,
25        iIconIndex: c_int,
26    ) -> c_int;
27}
28pub const GPFIDL_DEFAULT: GPFIDL_FLAGS = 0x0000;
29pub const GPFIDL_ALTNAME: GPFIDL_FLAGS = 0x0001;
30pub const GPFIDL_UNCPRINTER: GPFIDL_FLAGS = 0x0002;
31pub type GPFIDL_FLAGS = c_int;
32extern "system" {
33    pub fn SHGetPathFromIDListEx(
34        pidl: PCIDLIST_ABSOLUTE,
35        pszPath: PWSTR,
36        cchPath: DWORD,
37        uOpts: GPFIDL_FLAGS,
38    ) -> BOOL;
39    pub fn SHGetPathFromIDListA(
40        pidl: PCIDLIST_ABSOLUTE,
41        pszPath: LPSTR,
42    ) -> BOOL;
43    pub fn SHGetPathFromIDListW(
44        pidl: PCIDLIST_ABSOLUTE,
45        pszPath: LPWSTR,
46    ) -> BOOL;
47    pub fn SHCreateDirectory(
48        hwnd: HWND,
49        pszPath: PCWSTR,
50    ) -> c_int;
51    pub fn SHCreateDirectoryExA(
52        hwnd: HWND,
53        pszPath: LPCSTR,
54        psa: *const SECURITY_ATTRIBUTES,
55    ) -> c_int;
56    pub fn SHCreateDirectoryExW(
57        hwnd: HWND,
58        pszPath: LPCWSTR,
59        psa: *const SECURITY_ATTRIBUTES,
60    ) -> c_int;
61}
62pub const OFASI_EDIT: DWORD = 0x0001;
63pub const OFASI_OPENDESKTOP: DWORD = 0x0002;
64extern "system" {
65    pub fn SHOpenFolderAndSelectItems(
66        pidlFolder: PCIDLIST_ABSOLUTE,
67        cidl: UINT,
68        apidl: PCUITEMID_CHILD_ARRAY,
69        dwFlags: DWORD,
70    ) -> HRESULT;
71    //pub fn SHCreateShellItem(
72    //    pidlParent: PCIDLIST_ABSOLUTE,
73    //    psfParent: *mut IShellFolder,
74    //    pidl: PCUITEMID_CHILD,
75    //    ppsi: *mut *mut IShellItem,
76    //) -> HRESULT;
77}
78pub const CSIDL_DESKTOP: c_int = 0x0000;
79pub const CSIDL_INTERNET: c_int = 0x0001;
80pub const CSIDL_PROGRAMS: c_int = 0x0002;
81pub const CSIDL_CONTROLS: c_int = 0x0003;
82pub const CSIDL_PRINTERS: c_int = 0x0004;
83pub const CSIDL_PERSONAL: c_int = 0x0005;
84pub const CSIDL_FAVORITES: c_int = 0x0006;
85pub const CSIDL_STARTUP: c_int = 0x0007;
86pub const CSIDL_RECENT: c_int = 0x0008;
87pub const CSIDL_SENDTO: c_int = 0x0009;
88pub const CSIDL_BITBUCKET: c_int = 0x000a;
89pub const CSIDL_STARTMENU: c_int = 0x000b;
90pub const CSIDL_MYDOCUMENTS: c_int = CSIDL_PERSONAL;
91pub const CSIDL_MYMUSIC: c_int = 0x000d;
92pub const CSIDL_MYVIDEO: c_int = 0x000e;
93pub const CSIDL_DESKTOPDIRECTORY: c_int = 0x0010;
94pub const CSIDL_DRIVES: c_int = 0x0011;
95pub const CSIDL_NETWORK: c_int = 0x0012;
96pub const CSIDL_NETHOOD: c_int = 0x0013;
97pub const CSIDL_FONTS: c_int = 0x0014;
98pub const CSIDL_TEMPLATES: c_int = 0x0015;
99pub const CSIDL_COMMON_STARTMENU: c_int = 0x0016;
100pub const CSIDL_COMMON_PROGRAMS: c_int = 0x0017;
101pub const CSIDL_COMMON_STARTUP: c_int = 0x0018;
102pub const CSIDL_COMMON_DESKTOPDIRECTORY: c_int = 0x0019;
103pub const CSIDL_APPDATA: c_int = 0x001a;
104pub const CSIDL_PRINTHOOD: c_int = 0x001b;
105pub const CSIDL_LOCAL_APPDATA: c_int = 0x001c;
106pub const CSIDL_ALTSTARTUP: c_int = 0x001d;
107pub const CSIDL_COMMON_ALTSTARTUP: c_int = 0x001e;
108pub const CSIDL_COMMON_FAVORITES: c_int = 0x001f;
109pub const CSIDL_INTERNET_CACHE: c_int = 0x0020;
110pub const CSIDL_COOKIES: c_int = 0x0021;
111pub const CSIDL_HISTORY: c_int = 0x0022;
112pub const CSIDL_COMMON_APPDATA: c_int = 0x0023;
113pub const CSIDL_WINDOWS: c_int = 0x0024;
114pub const CSIDL_SYSTEM: c_int = 0x0025;
115pub const CSIDL_PROGRAM_FILES: c_int = 0x0026;
116pub const CSIDL_MYPICTURES: c_int = 0x0027;
117pub const CSIDL_PROFILE: c_int = 0x0028;
118pub const CSIDL_SYSTEMX86: c_int = 0x0029;
119pub const CSIDL_PROGRAM_FILESX86: c_int = 0x002a;
120pub const CSIDL_PROGRAM_FILES_COMMON: c_int = 0x002b;
121pub const CSIDL_PROGRAM_FILES_COMMONX86: c_int = 0x002c;
122pub const CSIDL_COMMON_TEMPLATES: c_int = 0x002d;
123pub const CSIDL_COMMON_DOCUMENTS: c_int = 0x002e;
124pub const CSIDL_COMMON_ADMINTOOLS: c_int = 0x002f;
125pub const CSIDL_ADMINTOOLS: c_int = 0x0030;
126pub const CSIDL_CONNECTIONS: c_int = 0x0031;
127pub const CSIDL_COMMON_MUSIC: c_int = 0x0035;
128pub const CSIDL_COMMON_PICTURES: c_int = 0x0036;
129pub const CSIDL_COMMON_VIDEO: c_int = 0x0037;
130pub const CSIDL_RESOURCES: c_int = 0x0038;
131pub const CSIDL_RESOURCES_LOCALIZED: c_int = 0x0039;
132pub const CSIDL_COMMON_OEM_LINKS: c_int = 0x003a;
133pub const CSIDL_CDBURN_AREA: c_int = 0x003b;
134pub const CSIDL_COMPUTERSNEARME: c_int = 0x003d;
135pub const CSIDL_FLAG_CREATE: c_int = 0x8000;
136pub const CSIDL_FLAG_DONT_VERIFY: c_int = 0x4000;
137pub const CSIDL_FLAG_DONT_UNEXPAND: c_int = 0x2000;
138pub const CSIDL_FLAG_NO_ALIAS: c_int = 0x1000;
139pub const CSIDL_FLAG_PER_USER_INIT: c_int = 0x0800;
140pub const CSIDL_FLAG_MASK: c_int = 0xff00;
141extern "system" {
142    pub fn SHGetSpecialFolderLocation(
143        hwnd: HWND,
144        csidl: c_int,
145        ppidl: *mut PIDLIST_ABSOLUTE,
146    ) -> HRESULT;
147    pub fn SHCloneSpecialIDList(
148        hwnd: HWND,
149        csidl: c_int,
150        fCreate: BOOL,
151    ) -> PIDLIST_ABSOLUTE;
152    pub fn SHGetSpecialFolderPathA(
153        hwnd: HWND,
154        pszPath: LPSTR,
155        csidl: c_int,
156        fCreate: BOOL,
157    ) -> BOOL;
158    pub fn SHGetSpecialFolderPathW(
159        hwnd: HWND,
160        pszPath: LPWSTR,
161        csidl: c_int,
162        fCreate: BOOL,
163    ) -> BOOL;
164    pub fn SHFlushSFCache();
165}
166ENUM!{enum SHGFP_TYPE {
167    SHGFP_TYPE_CURRENT = 0,
168    SHGFP_TYPE_DEFAULT = 1,
169}}
170extern "system" {
171    pub fn SHGetFolderPathA(
172        hwnd: HWND,
173        csidl: c_int,
174        hToken: HANDLE,
175        dwFlags: DWORD,
176        pszPath: LPSTR,
177    ) -> HRESULT;
178    pub fn SHGetFolderPathW(
179        hwnd: HWND,
180        csidl: c_int,
181        hToken: HANDLE,
182        dwFlags: DWORD,
183        pszPath: LPWSTR,
184    ) -> HRESULT;
185    pub fn SHGetFolderLocation(
186        hwnd: HWND,
187        csidl: c_int,
188        hToken: HANDLE,
189        dwFlags: DWORD,
190        ppidl: *mut PIDLIST_ABSOLUTE,
191    ) -> HRESULT;
192    pub fn SHSetFolderPathA(
193        csidl: c_int,
194        hToken: HANDLE,
195        dwFlags: DWORD,
196        pszPath: LPCSTR,
197    ) -> HRESULT;
198    pub fn SHSetFolderPathW(
199        csidl: c_int,
200        hToken: HANDLE,
201        dwFlags: DWORD,
202        pszPath: LPCWSTR,
203    ) -> HRESULT;
204    pub fn SHGetFolderPathAndSubDirA(
205        hwnd: HWND,
206        csidl: c_int,
207        hToken: HANDLE,
208        dwFlags: DWORD,
209        pszSubDir: LPCSTR,
210        pszPath: LPSTR,
211    ) -> HRESULT;
212    pub fn SHGetFolderPathAndSubDirW(
213        hwnd: HWND,
214        csidl: c_int,
215        hToken: HANDLE,
216        dwFlags: DWORD,
217        pszSubDir: LPCWSTR,
218        pszPath: LPWSTR,
219    ) -> HRESULT;
220}
221ENUM!{enum KNOWN_FOLDER_FLAG {
222    KF_FLAG_DEFAULT = 0x00000000,
223    KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000,
224    KF_FLAG_CREATE = 0x00008000,
225    KF_FLAG_DONT_VERIFY = 0x00004000,
226    KF_FLAG_DONT_UNEXPAND = 0x00002000,
227    KF_FLAG_NO_ALIAS = 0x00001000,
228    KF_FLAG_INIT = 0x00000800,
229    KF_FLAG_DEFAULT_PATH = 0x00000400,
230    KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200,
231    KF_FLAG_SIMPLE_IDLIST = 0x00000100,
232    KF_FLAG_ALIAS_ONLY = 0x80000000,
233}}
234extern "system" {
235    pub fn SHGetKnownFolderIDList(
236        rfid: REFKNOWNFOLDERID,
237        dwFlags: DWORD,
238        hToken: HANDLE,
239        ppidl: *mut PIDLIST_ABSOLUTE,
240    ) -> HRESULT;
241    pub fn SHSetKnownFolderPath(
242        rfid: REFKNOWNFOLDERID,
243        dwFlags: DWORD,
244        hToken: HANDLE,
245        pszPath: PCWSTR,
246    ) -> HRESULT;
247    pub fn SHGetKnownFolderPath(
248        rfid: REFKNOWNFOLDERID,
249        dwFlags: DWORD,
250        hToken: HANDLE,
251        pszPath: *mut PWSTR,
252    ) -> HRESULT;
253    pub fn SHGetKnownFolderItem(
254        rfid: REFKNOWNFOLDERID,
255        flags: KNOWN_FOLDER_FLAG,
256        hToken: HANDLE,
257        riid: REFIID,
258        ppv: *mut *mut c_void,
259    ) -> HRESULT;
260}