著作一覧 |
そういえば特殊なフォルダはScripting Runtimeの何かを使えば取れたなぁとMSDN見ながら試してみると、Program Filesが無いことに気付く。
#!/usr/local/bin/ruby -Ks require 'win32ole' ws = WIN32OLE.new('WScript.Shell') %w|AllUsersDesktop AllUsersStartMenu AllUsersPrograms AllUsersStartup Desktop Favorites Fonts MyDocuments NetHood PrintHood Programs Recent SendTo StartMenu Startup Templates|.each do |nm| puts "#{nm}=#{ws.specialFolders(nm)}" end fs = WIN32OLE.new('Scripting.FileSystemObject') %w|WindowsFolder SystemFolder TemporaryFoler|.each_with_index do |nm, i| pn = fs.getSpecialFolder(i) puts "#{nm}=#{pn.path}" end
testユーザが実行するとこんな感じ。
AllUsersDesktop=C:\Users\Public\Desktop AllUsersStartMenu=C:\ProgramData\Microsoft\Windows\Start Menu AllUsersPrograms=C:\ProgramData\Microsoft\Windows\Start Menu\Programs AllUsersStartup=C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup Desktop=C:\Users\test\Desktop Favorites=C:\Users\test\Favorites Fonts=C:\Windows\Fonts MyDocuments=C:\Users\test\Documents NetHood=C:\Users\test\AppData\Roaming\Microsoft\Windows\Network Shortcuts PrintHood=C:\Users\test\AppData\Roaming\Microsoft\Windows\Printer Shortcuts Programs=C:\Users\test\AppData\Roaming\Microsoft\Windows\Start Menu\Programs Recent=C:\Users\test\AppData\Roaming\Microsoft\Windows\Recent SendTo=C:\Users\test\AppData\Roaming\Microsoft\Windows\SendTo StartMenu=C:\Users\test\AppData\Roaming\Microsoft\Windows\Start Menu Startup=C:\Users\test\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup Templates=C:\Users\test\AppData\Roaming\Microsoft\Windows\Templates WindowsFolder=C:\Windows SystemFolder=C:\Windows\System32 TemporaryFoler=C:\Users\test\AppData\Local\TempProgram FilesはSHGetKnownFolderPathを使うしかないみたいだな。
ジェズイットを見習え |