This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / subsys / system / explorer / utility / shelltests.cpp
1 /*
2  * Copyright 2003 Martin Fuchs
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19
20  // 
21  // shelltests.cpp
22  //
23  // Examples for usage of shellclasses.cpp, shellclasses.h
24  //
25  // Martin Fuchs, 20.07.2003
26  //
27
28
29 //#define WIN32_LEAN_AND_MEAN
30 //#define WIN32_EXTRA_LEAN
31 //#include <windows.h>
32
33 #include "utility.h" // for String
34 #include "shellclasses.h"
35
36
37 static void dump_shell_namespace(ShellFolder& folder)
38 {
39         ShellItemEnumerator enumerator(folder, SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN|SHCONTF_SHAREABLE|SHCONTF_STORAGE);
40
41         LPITEMIDLIST pidl;
42         HRESULT hr = S_OK;
43
44         do {
45                 ULONG cnt = 0;
46
47                 HRESULT hr = enumerator->Next(1, &pidl, &cnt);
48
49                 if (!SUCCEEDED(hr))
50                         break;
51
52                 if (hr == S_FALSE)      // no more entries?
53                         break;
54
55                  if (pidl) {
56                         ULONG attribs = -1;
57
58                         HRESULT hr = folder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidl, &attribs);
59
60                         if (SUCCEEDED(hr)) {
61                                 if (attribs == -1)
62                                         attribs = 0;
63
64                                 const String& name = folder.get_name(pidl);
65
66                                 if (attribs & (SFGAO_FOLDER|SFGAO_HASSUBFOLDER))
67                                         cout << "folder: ";
68                                  else
69                                         cout << "file: ";
70
71                                 cout << "\"" << name << "\"\n attribs=" << hex << attribs << endl;
72                         }
73                 }
74         } while(SUCCEEDED(hr));
75 }
76
77
78 int main()
79 {
80          // initialize COM
81         ComInit usingCOM;
82
83
84         HWND hwnd = 0;
85
86
87         try {
88
89                  // example for retrieval of special folder paths
90
91                 SpecialFolderFSPath programs(CSIDL_PROGRAM_FILES, hwnd);
92                 SpecialFolderFSPath autostart(CSIDL_STARTUP, hwnd);
93
94                 cout << "program files path = " << (LPCTSTR)programs << endl;
95                 cout << "autostart folder path = " << (LPCTSTR)autostart << endl;
96
97                 cout << endl;
98
99
100                  // example for enumerating shell namespace objects
101
102                 cout << "Desktop:\n";
103                 dump_shell_namespace(Desktop());
104                 cout << endl;
105
106                 cout << "C:\\\n";
107                 dump_shell_namespace(ShellPath("C:\\").get_folder());
108                 cout << endl;
109
110
111                  // example for calling a browser dialog for the whole desktop
112
113                 FolderBrowser desktop_browser(hwnd,
114                                                                           BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_NEWDIALOGSTYLE,
115                                                                           TEXT("Please select the path:"));
116
117                 if (desktop_browser.IsOK())
118                         MessageBox(hwnd, desktop_browser, TEXT("Your selected path"), MB_OK);
119
120
121                  // example for calling a rooted browser dialog
122
123                 ShellPath browseRoot("C:\\");
124                 FolderBrowser rooted_browser(hwnd,
125                                                                          BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_VALIDATE,
126                                                                          TEXT("Please select the path:"),
127                                                                          browseRoot);
128
129                 if (rooted_browser.IsOK())
130                         MessageBox(hwnd, rooted_browser, TEXT("Your selected path"), MB_OK);
131
132         } catch(COMException& e) {
133
134                 //HandleException(e, hwnd);
135                 cerr << e.ErrorMessage() << endl;
136
137         }
138
139         return 0;
140 }