| 著作一覧 |
そういえば特殊なフォルダは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を使うしかないみたいだな。
ジェズイットを見習え |