Hi all, In lieu of Timothy''s pure Ruby junction code, and Zach''s VC++ 6 issues, I decided to just rewrite the dang thing in pure Ruby using Win32API. That will solve''s Zach''s problem and make it easier to add Timothy''s code, which I plan to add (slightly modified) to the 0.2.0 release. The code is below. One thing I have a question about is how to handle the situation where SHGetFolderPath is not found. I just wrapped it in a begin/rescue clause. Does that seem a reasonable approach? Regards, Dan PS - There are a few extra constants to boot (I dug them out of the header files). require "Win32API" module Win32 # SHGetFolderPath may not be defined # If not, use SHGetSpecialFolderPath instead begin SHGetFolderPath Win32API.new("shell32","SHGetFolderPath","LLLLP","L") rescue RuntimeError SHGetSpecialFolderPath Win32API.new("shell32","SHGetSpecialFolderPath", "LPLL","L") end CSIDL_DESKTOP = 0x0000 # <desktop> CSIDL_INTERNET = 0x0001 # Internet Explorer (icon on desktop) CSIDL_PROGRAMS = 0x0002 # Start Menu\Programs CSIDL_CONTROLS = 0x0003 # My Computer\Control Panel CSIDL_PRINTERS = 0x0004 # My Computer\Printers CSIDL_PERSONAL = 0x0005 # My Documents CSIDL_FAVORITES = 0x0006 # <user name>\Favorites CSIDL_STARTUP = 0x0007 # Start Menu\Programs\Startup CSIDL_RECENT = 0x0008 # <user name>\Recent CSIDL_SENDTO = 0x0009 # <user name>\SendTo CSIDL_BITBUCKET = 0x000a # <desktop>\Recycle Bin CSIDL_STARTMENU = 0x000b # <user name>\Start Menu CSIDL_MYDOCUMENTS = 0x000c # logical "My Documents" desktop icon CSIDL_MYMUSIC = 0x000d # "My Music" folder CSIDL_MYVIDEO = 0x000e # "My Videos" folder CSIDL_DESKTOPDIRECTORY = 0x0010 # <user name>\Desktop CSIDL_DRIVES = 0x0011 # My Computer CSIDL_NETWORK = 0x0012 # Network Neighborhood (My Network Places) CSIDL_NETHOOD = 0x0013 # <user name>\nethood CSIDL_FONTS = 0x0014 # windows\fonts CSIDL_TEMPLATES = 0x0015 CSIDL_COMMON_STARTMENU = 0x0016 # All Users\Start Menu CSIDL_COMMON_PROGRAMS = 0X0017 # All Users\Start Menu\Programs CSIDL_COMMON_STARTUP = 0x0018 # All Users\Startup CSIDL_COMMON_FAVORITES = 0x001f CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019 # All Users\Desktop CSIDL_APPDATA = 0x001a # <user name>\Application Data CSIDL_PRINTHOOD = 0x001b # <user name>\PrintHood CSIDL_LOCAL_APPDATA = 0x001c # <user name>\Local Settings\Application Data CSIDL_ALTSTARTUP = 0x001d # non localized startup CSIDL_COMMON_ALTSTARTUP = 0x001e # non localized common startup CSIDL_INTERNET_CACHE = 0x0020 CSIDL_COOKIES = 0x0021 CSIDL_HISTORY = 0x0022 CSIDL_COMMON_APPDATA = 0x0023 # All Users\Application Data CSIDL_WINDOWS = 0x0024 # GetWindowsDirectory() CSIDL_SYSTEM = 0x0025 # GetSystemDirectory() CSIDL_PROGRAM_FILES = 0x0026 # C:\Program Files CSIDL_MYPICTURES = 0x0027 # C:\Program Files\My Pictures CSIDL_PROFILE = 0x0028 # USERPROFILE CSIDL_SYSTEMX86 = 0x0029 # x86 system directory on RISC CSIDL_PROGRAM_FILESX86 = 0x002a # x86 C:\Program Files on RISC CSIDL_PROGRAM_FILES_COMMON = 0x002b # C:\Program Files\Common CSIDL_PROGRAM_FILES_COMMONX86 = 0x002c # x86 Program Files\Common on RISC CSIDL_COMMON_TEMPLATES = 0x002d # All Users\Templates CSIDL_COMMON_DOCUMENTS = 0x002e # All Users\Documents CSIDL_CONNECTIONS = 0x0031 # Network and Dial-up Connections CSIDL_COMMON_MUSIC = 0x0035 # All Users\My Music CSIDL_COMMON_PICTURES = 0x0036 # All Users\My Pictures CSIDL_COMMON_VIDEO = 0x0037 # All Users\My Video CSIDL_RESOURCES = 0x0038 # Resource Direcotry CSIDL_RESOURCES_LOCALIZED = 0x0039 # Localized Resource Direcotry CSIDL_COMMON_OEM_LINKS = 0x003a # Links to All Users OEM specific apps # USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning CSIDL_CDBURN_AREA = 0x003b # All Users\Start Menu\Programs\Administrative Tools CSIDL_COMMON_ADMINTOOLS = 0x002f # <user name>\Start Menu\Programs\Administrative Tools CSIDL_ADMINTOOLS = 0x0030 def cget(const) path = " " * 255 if SHGetFolderPath result = SHGetFolderPath.call(0, const, 0, 1, path) else result = SHGetSpecialFolderPath.call(0, path, const, 0) end if result != 0 path = nil else path.gsub!(/\000/, '''') path.strip! end path end module_function :cget end class Dir include Win32 undef_method :cget # Not meant to be public DESKTOP = Win32.cget(CSIDL_DESKTOP) INTERNET = Win32.cget(CSIDL_INTERNET) PROGRAMS = Win32.cget(CSIDL_PROGRAMS) CONTROLS = Win32.cget(CSIDL_CONTROLS) PRINTERS = Win32.cget(CSIDL_PRINTERS) PERSONAL = Win32.cget(CSIDL_PERSONAL) FAVORITES = Win32.cget(CSIDL_FAVORITES) STARTUP = Win32.cget(CSIDL_STARTUP) RECENT = Win32.cget(CSIDL_RECENT) SENDTO = Win32.cget(CSIDL_SENDTO) BITBUCKET = Win32.cget(CSIDL_BITBUCKET) STARTMENU = Win32.cget(CSIDL_STARTMENU) MYDOCUMENTS = Win32.cget(CSIDL_MYDOCUMENTS) MYMUSIC = Win32.cget(CSIDL_MYMUSIC) MYVIDEO = Win32.cget(CSIDL_MYVIDEO) DESKTOPDIRECTORY = Win32.cget(CSIDL_DESKTOPDIRECTORY) DRIVES = Win32.cget(CSIDL_DRIVES) NETWORK = Win32.cget(CSIDL_NETWORK) NETHOOD = Win32.cget(CSIDL_NETHOOD) FONTS = Win32.cget(CSIDL_FONTS) TEMPLATES = Win32.cget(CSIDL_TEMPLATES) COMMON_STARTMENU = Win32.cget(CSIDL_COMMON_STARTMENU) COMMON_PROGRAMS = Win32.cget(CSIDL_COMMON_PROGRAMS) COMMON_STARTUP = Win32.cget(CSIDL_COMMON_STARTUP) COMMON_FAVORITES = Win32.cget(CSIDL_COMMON_FAVORITES) COMMON_DESKTOPDIRECTORY = Win32.cget(CSIDL_COMMON_DESKTOPDIRECTORY) APPDATA = Win32.cget(CSIDL_APPDATA) PRINTHOOD = Win32.cget(CSIDL_PRINTHOOD) LOCAL_APPDATA = Win32.cget(CSIDL_LOCAL_APPDATA) ALTSTARTUP = Win32.cget(CSIDL_ALTSTARTUP) COMMON_ALTSTARTUP = Win32.cget(CSIDL_COMMON_ALTSTARTUP) INTERNET_CACHE = Win32.cget(CSIDL_INTERNET_CACHE) COOKIES = Win32.cget(CSIDL_COOKIES) HISTORY = Win32.cget(CSIDL_HISTORY) COMMON_APPDATA = Win32.cget(CSIDL_COMMON_APPDATA) WINDOWS = Win32.cget(CSIDL_WINDOWS) SYSTEM = Win32.cget(CSIDL_SYSTEM) PROGRAM_FILES = Win32.cget(CSIDL_PROGRAM_FILES) MYPICTURES = Win32.cget(CSIDL_MYPICTURES) PROFILE = Win32.cget(CSIDL_PROFILE) SYSTEMX86 = Win32.cget(CSIDL_SYSTEMX86) PROGRAM_FILESX86 = Win32.cget(CSIDL_PROGRAM_FILESX86) PROGRAM_FILES_COMMON = Win32.cget(CSIDL_PROGRAM_FILES_COMMON) PROGRAM_FILES_COMMONX86 = Win32.cget(CSIDL_PROGRAM_FILES_COMMONX86) COMMON_TEMPLATES = Win32.cget(CSIDL_COMMON_TEMPLATES) COMMON_DOCUMENTS = Win32.cget(CSIDL_COMMON_DOCUMENTS) CONNECTIONS = Win32.cget(CSIDL_CONNECTIONS) COMMON_MUSIC = Win32.cget(CSIDL_COMMON_MUSIC) COMMON_PICTURES = Win32.cget(CSIDL_COMMON_PICTURES) COMMON_VIDEO = Win32.cget(CSIDL_COMMON_VIDEO) RESOURCES = Win32.cget(CSIDL_RESOURCES) RESOURCES_LOCALIZED = Win32.cget(CSIDL_RESOURCES_LOCALIZED) COMMON_OEM_LINKS = Win32.cget(CSIDL_COMMON_OEM_LINKS) # USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning CDBURN_AREA = Win32.cget(CSIDL_CDBURN_AREA) # All Users\Start Menu\Programs\Administrative Tools COMMON_ADMINTOOLS = Win32.cget(CSIDL_COMMON_ADMINTOOLS) # <user name>\Start Menu\Programs\Administrative Tools ADMINTOOLS = Win32.cget(CSIDL_ADMINTOOLS) end