本ページには広告が含まれています。
目次
WshShellオブジェクトが持つ特別なフォルダへのパスを取得します。引数を省略した場合、すべての特別なフォルダを格納したWshCollectionコレクションを返します。
- 構文
- WshCollection = WshShell.SpecialFolders.[_Default]( objWshSpecialFolders )
- 既定プロパティ
- WshShell.SpecialFolders
- 引数
- objWshSpecialFolders (Integer,String)省略可
- 取得するフォルダの名前もしくは値
- 戻り値
- 引数あり
- 特別なフォルダのパス文字列
- 引数なし
- WshShell.SpecialFolders プロパティ
SpecialFolderの定数一覧
| 文字列 | 値 | 内容 |
|---|---|---|
| AllUsersDesktop | 0 | すべてのユーザーに共通のデスクトップ |
| AllUsersStartMenu | 1 | すべてのユーザーに共通のスタートメニュー |
| AllUsersPrograms | 2 | すべてのユーザーに共通のプログラムメニュー |
| AllUsersStartup | 3 | すべてのユーザーに共通のスタートアップ |
| Desktop | 4 | ログインユーザーのデスクトップ |
| AppData | 5 | ログインユーザーのアプリ用データ |
| PrintHood | 6 | ログインユーザーのプリンタ |
| Templates | 7 | ログインユーザーの新規作成のテンプレート |
| Fonts | 8 | フォント |
| NetHood | 9 | ログインユーザーのネットワーク |
| Desktop | 10 | ログインユーザーのデスクトップ |
| StartMenu | 11 | ログインユーザーのスタートメニュー |
| SendTo | 12 | ログインユーザーの送る |
| Recent | 13 | ログインユーザーの最近使ったファイル |
| Startup | 14 | ログインユーザーのスタートアップ |
| Favorites | 15 | ログインユーザーのお気に入り |
| MyDocuments | 16 | ログインユーザーのマイドキュメント |
| Programs | 17 | ログインユーザーのプログラムメニュー |
他の定数と被らないようにとりあえずSpecialFolderの定数だから接頭辞sfを付与。
CONST sfAllUsersDesktop = 0
CONST sfAllUsersStartMenu = 1
CONST sfAllUsersPrograms = 2
CONST sfAllUsersStartup = 3
CONST sfDesktop = 4
CONST sfAppData = 5
CONST sfPrintHood = 6
CONST sfTemplates = 7
CONST sfFonts = 8
CONST sfNetHood = 9
CONST sfDesktop = 10
CONST sfStartMenu = 11
CONST sfSendTo = 12
CONST sfRecent = 13
CONST sfStartup = 14
CONST sfFavorites = 15
CONST sfMyDocuments = 16
CONST sfPrograms = 17使い方
デスクトップのパスを取得
SpecialFoldersの引数は文字列・値どちらでもパスを取得することができるので、以下はいずれもログインユーザーのデスクトップのパスを返します。
CONST sfDesktop = 4
PRINT WshShell.SpecialFolders(4)
PRINT WshShell.SpecialFolders("Desktop")
PRINT WshShell.SpecialFolders(sfDesktop)- 結果
D:\Desktop D:\Desktop D:\Desktop
エクスプローラで開く
エクスプローラでデスクトップを開きます。
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
Shell.Explore(WshShell.SpecialFolders("Desktop"))すへての特別なフォルダを取得
引数を省略した場合、すべての特別なフォルダを格納したWshCollectionコレクション(配列)を返すのでFOR-IN-NEXTですべてのパスを取得します。
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
FOR item IN WshShell.SpecialFolders()
PRINT item
NEXT- 結果
C:\Users\Public\Desktop C:\ProgramData\Microsoft\Windows\Start Menu C:\ProgramData\Microsoft\Windows\Start Menu\Programs C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp D:\Desktop C:\Users\akita\AppData\Roaming C:\Users\akita\AppData\Roaming\Microsoft\Windows\Printer Shortcuts C:\Users\akita\AppData\Roaming\Microsoft\Windows\Templates C:\Windows\Fonts C:\Users\akita\AppData\Roaming\Microsoft\Windows\Network Shortcuts D:\Desktop C:\Users\akita\AppData\Roaming\Microsoft\Windows\Start Menu C:\Users\akita\AppData\Roaming\Microsoft\Windows\SendTo C:\Users\akita\AppData\Roaming\Microsoft\Windows\Recent C:\Users\akita\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup C:\Users\akita\Favorites D:\Documents C:\Users\akita\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
プログラム実行例
特殊フォルダのパスを取得
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
FOR i = 0 TO 17
PRINT i + "," + WshShell.SpecialFolders(i)
NEXT結果
0,C:\Users\Public\Desktop
1,C:\ProgramData\Microsoft\Windows\Start Menu
2,C:\ProgramData\Microsoft\Windows\Start Menu\Programs
3,C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
4,C:\Users\username\Desktop
5,C:\Users\username\AppData\Roaming
6,C:\Users\username\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
7,C:\Users\username\AppData\Roaming\Microsoft\Windows\Templates
8,C:\Windows\Fonts
9,C:\Users\username\AppData\Roaming\Microsoft\Windows\Network Shortcuts
10,C:\Users\username\Desktop
11,C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu
12,C:\Users\username\AppData\Roaming\Microsoft\Windows\SendTo
13,C:\Users\username\AppData\Roaming\Microsoft\Windows\Recent
14,C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
15,C:\Users\username\Favorites
16,C:\Users\username\Documents
17,C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs使用関数
UWSC.INIよりUWSCを再生するホットキーを取得
Roamingフォルダ(C:\Users\username\AppData\Roaming\)のUWSCフォルダにあるUWSC.INIを読み込み、UWSCを停止するホットキーを取得します。
DIM modifers[] = "CTRL", "WIN", "ALT", "SHIFT+CTRL", "SHIFT+ALT", "CTRL+ALT"
DIM keys[] = "SPACE", "F1", "F2", "F3", "F4", "F9", "F10", "F11", "F12", "↑", _
"↓", "→", "←", "Q", "W", "E", "R", "A", "S", "D", _
"F", "End", "Home", "F5", "F6", "F7", "F8", "T", "Y", "U", _
"I", "O", "P", "G", "H", "J", "K", "L", "Z", "X", _
"C", "V", "B", "N", "M", "1", "2", "3", "4", "5", _
"6", "7", "8", "9"
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
DIM str = READINI("SET", "PlayHotKey", WshShell.ExpandEnvironmentStrings("%AppData%\UWSC\UWSC.INI"))
DIM nums = SPLIT(str, ",")
PRINT modifers[nums[1]] + "+" + keys[nums[0]]
//////////////////////////////////////////////////
// 【引数】
// section : セクション
// key : キー(Delete関数は省略可)
// value : 値
// path : INIファイルのパス
// default : セクションとキーが存在しなかった場合に返す値
// 【戻り値】
//
//////////////////////////////////////////////////
MODULE INI
DEF_DLL GetPrivateProfileStringW(wstring,wstring,wstring,var pwchar,dword,wstring):dword:kernel32
DEF_DLL WritePrivateProfileStringW(wstring,wstring,wstring,wstring):bool:kernel32
FUNCTION Read(section = NULL, key = NULL, path = NULL, default = EMPTY)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB path = NULL THEN
path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
ELSE
path = FSO.GetAbsolutePathName(path)
ENDIF
DIM n = 1024
DIM buffer = FORMAT(CHR(0), n)
IFB GetPrivateProfileStringW(section, key, default, buffer, n, path) = 0 THEN
RESULT = default
ELSE
RESULT = SLICE(SPLIT(buffer, CHR(0), TRUE))
IF section <> NULL AND key <> NULL THEN RESULT = RESULT[0]
ENDIF
FEND
FUNCTION Write(section, key, value, path = NULL)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB path = NULL THEN
path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
ELSE
path = FSO.GetAbsolutePathName(path)
ENDIF
RESULT = WritePrivateProfileStringW(section, key, value, path)
FEND
PROCEDURE Delete(section, key = NULL, path = NULL)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB path = NULL THEN
path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI")
ELSE
path = FSO.GetAbsolutePathName(path)
ENDIF
PRINT WritePrivateProfileStringW(section, key, NULL, path)
FEND
FUNCTION escape(value)
DIM esc = ";#=:"
FOR i = 1 TO LENGTH(esc)
DIM s = COPY(esc, i, 1)
value = REPLACE(value, s, "\" + s)
NEXT
RESULT = value
FEND
FUNCTION unescape(value)
DIM esc = ";#=:"
FOR i = 1 TO LENGTH(esc)
DIM s = COPY(esc, i, 1)
value = REPLACE(value, "\" + s, s)
NEXT
RESULT = value
FEND
ENDMODULE結果
ALT+F1使用関数
