| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | /******************************************************************************* copyright: Copyright (c) 2007 the Tango team. All rights reserved license: BSD style: $(LICENSE) version: Initial release: July 2007 author: Cyborg16, Sean Kelly *******************************************************************************/ module tango.sys.win32.SpecialPath; private import tango.text.convert.Utf; private import tango.sys.Common; private import tango.sys.win32.CodePage; private import tango.stdc.stringz; pragma(lib, "shell32.lib"); version(Win32SansUnicode) extern(Windows) int SHGetSpecialFolderPathA(HWND, LPCSTR, int, BOOL); else extern(Windows) int SHGetSpecialFolderPathW(HWND, LPCWSTR, int, BOOL); enum { CSIDL_DESKTOP = 0, CSIDL_INTERNET, CSIDL_PROGRAMS, CSIDL_CONTROLS, CSIDL_PRINTERS, CSIDL_PERSONAL, CSIDL_FAVORITES, CSIDL_STARTUP, CSIDL_RECENT, CSIDL_SENDTO, CSIDL_BITBUCKET, CSIDL_STARTMENU, // = 11 CSIDL_DESKTOPDIRECTORY = 16, CSIDL_DRIVES, CSIDL_NETWORK, CSIDL_NETHOOD, CSIDL_FONTS, CSIDL_TEMPLATES, CSIDL_COMMON_STARTMENU, CSIDL_COMMON_PROGRAMS, CSIDL_COMMON_STARTUP, CSIDL_COMMON_DESKTOPDIRECTORY, CSIDL_APPDATA, CSIDL_PRINTHOOD, CSIDL_LOCAL_APPDATA, CSIDL_ALTSTARTUP, CSIDL_COMMON_ALTSTARTUP, CSIDL_COMMON_FAVORITES, CSIDL_INTERNET_CACHE, CSIDL_COOKIES, CSIDL_HISTORY, CSIDL_COMMON_APPDATA, CSIDL_WINDOWS, CSIDL_SYSTEM, CSIDL_PROGRAM_FILES, CSIDL_MYPICTURES, CSIDL_PROFILE, CSIDL_SYSTEMX86, CSIDL_PROGRAM_FILESX86, CSIDL_PROGRAM_FILES_COMMON, CSIDL_PROGRAM_FILES_COMMONX86, CSIDL_COMMON_TEMPLATES, CSIDL_COMMON_DOCUMENTS, CSIDL_COMMON_ADMINTOOLS, CSIDL_ADMINTOOLS, CSIDL_CONNECTIONS, // =49 CSIDL_COMMON_MUSIC = 53, CSIDL_COMMON_PICTURES, CSIDL_COMMON_VIDEO, CSIDL_RESOURCES, CSIDL_RESOURCES_LOCALIZED, CSIDL_COMMON_OEM_LINKS, CSIDL_CDBURN_AREA, // = 59 CSIDL_COMPUTERSNEARME = 61, CSIDL_FLAG_DONT_VERIFY = 0x4000, CSIDL_FLAG_CREATE = 0x8000, CSIDL_FLAG_MASK = 0xFF00 } /** * Get a special path (on Windows). * * Params: * csidl = Enum of path to get * * Throws: * * * Returns: * A string containing the path */ char[] getSpecialPath( int csidl ) { version( Win32SansUnicode ) { char* spath = (new char[MAX_PATH]).ptr; scope(exit) delete spath; if( !SHGetSpecialFolderPathA( null, spath, csidl, true ) ) throw new Exception( "getSpecialPath :: " ~ SysError.lastMsg.idup ); char[] dpath = new char[MAX_PATH]; return CodePage.from(fromStringz(spath), dpath); } else { wchar* spath = (new wchar[MAX_PATH]).ptr; scope(exit) delete spath; if( !SHGetSpecialFolderPathW( null, spath, csidl, true ) ) throw new Exception( "getSpecialPath :: " ~ SysError.lastMsg.idup ); return toString(fromString16z(spath)); } } |