X-Git-Url: http://git.jankratochvil.net/?p=reactos.git;a=blobdiff_plain;f=subsys%2Fsystem%2Fexplorer%2Futility%2Fshelltests.cpp;fp=subsys%2Fsystem%2Fexplorer%2Futility%2Fshelltests.cpp;h=6cb9aad8915d9841fb973034c246c167bbcc6f1d;hp=0000000000000000000000000000000000000000;hb=a3df8bf1429570e0bd6c6428f6ed80073578cf4b;hpb=7c0db166f81fbe8c8b913d7f26048e337d383605 diff --git a/subsys/system/explorer/utility/shelltests.cpp b/subsys/system/explorer/utility/shelltests.cpp new file mode 100644 index 0000000..6cb9aad --- /dev/null +++ b/subsys/system/explorer/utility/shelltests.cpp @@ -0,0 +1,140 @@ +/* + * Copyright 2003 Martin Fuchs + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + + // + // shelltests.cpp + // + // Examples for usage of shellclasses.cpp, shellclasses.h + // + // Martin Fuchs, 20.07.2003 + // + + +//#define WIN32_LEAN_AND_MEAN +//#define WIN32_EXTRA_LEAN +//#include + +#include "utility.h" // for String +#include "shellclasses.h" + + +static void dump_shell_namespace(ShellFolder& folder) +{ + ShellItemEnumerator enumerator(folder, SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN|SHCONTF_SHAREABLE|SHCONTF_STORAGE); + + LPITEMIDLIST pidl; + HRESULT hr = S_OK; + + do { + ULONG cnt = 0; + + HRESULT hr = enumerator->Next(1, &pidl, &cnt); + + if (!SUCCEEDED(hr)) + break; + + if (hr == S_FALSE) // no more entries? + break; + + if (pidl) { + ULONG attribs = -1; + + HRESULT hr = folder->GetAttributesOf(1, (LPCITEMIDLIST*)&pidl, &attribs); + + if (SUCCEEDED(hr)) { + if (attribs == -1) + attribs = 0; + + const String& name = folder.get_name(pidl); + + if (attribs & (SFGAO_FOLDER|SFGAO_HASSUBFOLDER)) + cout << "folder: "; + else + cout << "file: "; + + cout << "\"" << name << "\"\n attribs=" << hex << attribs << endl; + } + } + } while(SUCCEEDED(hr)); +} + + +int main() +{ + // initialize COM + ComInit usingCOM; + + + HWND hwnd = 0; + + + try { + + // example for retrieval of special folder paths + + SpecialFolderFSPath programs(CSIDL_PROGRAM_FILES, hwnd); + SpecialFolderFSPath autostart(CSIDL_STARTUP, hwnd); + + cout << "program files path = " << (LPCTSTR)programs << endl; + cout << "autostart folder path = " << (LPCTSTR)autostart << endl; + + cout << endl; + + + // example for enumerating shell namespace objects + + cout << "Desktop:\n"; + dump_shell_namespace(Desktop()); + cout << endl; + + cout << "C:\\\n"; + dump_shell_namespace(ShellPath("C:\\").get_folder()); + cout << endl; + + + // example for calling a browser dialog for the whole desktop + + FolderBrowser desktop_browser(hwnd, + BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_NEWDIALOGSTYLE, + TEXT("Please select the path:")); + + if (desktop_browser.IsOK()) + MessageBox(hwnd, desktop_browser, TEXT("Your selected path"), MB_OK); + + + // example for calling a rooted browser dialog + + ShellPath browseRoot("C:\\"); + FolderBrowser rooted_browser(hwnd, + BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_VALIDATE, + TEXT("Please select the path:"), + browseRoot); + + if (rooted_browser.IsOK()) + MessageBox(hwnd, rooted_browser, TEXT("Your selected path"), MB_OK); + + } catch(COMException& e) { + + //HandleException(e, hwnd); + cerr << e.ErrorMessage() << endl; + + } + + return 0; +}