Windows XP Home Edition (SP1 適用済み) を使用しています。
Windows XP では、「マイミュージック」や「マイビデオ」フォルダを開くと、ウィンドウの左側に「ミュージックのタスク」や「ビデオのタスク」というのが表示されますよね。C ドライブのルートディレクトリや "C:\Windows" フォルダを開いたときには、「システムのタスク」が表示されてフォルダを非表示にしたりできるようです。
ところが私のパソコンでは、いつの間にか、"C:\Program Files" を開くと「画像のタスク」が、"C:\Windows" を開くと「ミュージックのタスク」が表示されるようになってしまいました。
C ドライブのルートディレクトリや、"C:\Windows\System32" を開いたときは、正しく「システムのタスク」が表示されています。
Windows での作業に支障をきたしているわけではないのですが、結構気になるので原因や解決法などわかる方はお教えください。
>そのスクリプトもお教えいただければと……
拡張子はvbsです。
うまくいかないときは補足ください。
set WshShell = WScript.CreateObject("WScript.Shell")
set objArgs = WScript.Arguments
WScript.Echo "タスク名を変更したいフォルダを1つだけ開いてください"
dim StatusChk(1000)
dim flag,key1,key2
Dim Input
Dim FldrTyp(12)
FldrTyp(1)="Documents"
FldrTyp(2)="Pictures"
FldrTyp(3)="PhotoAlbum"
FldrTyp(4)="Music"
FldrTyp(5)="MusicArtist"
FldrTyp(6)="MusicAlbum"
FldrTyp(7)="Videos"
FldrTyp(8)="MyDocuments"
FldrTyp(9)="MyPictures"
FldrTyp(10)="MyMusic"
FldrTyp(11)="CommonDocuments"
FldrTyp(12)=""
Dim FldrName(12)
FldrName(1)="ファイルとフォルダのタスク"
FldrName(2)="画像のタスク"
FldrName(3)="画像のタスク(フォトアルバム)"
FldrName(4)="ミュージックのタスク"
FldrName(5)="ミュージックのタスク(アーティスト)"
FldrName(6)="ミュージックのタスク(アルバム)"
FldrName(7)="ビデオのタスク"
FldrName(8)="マイドキュメント"
FldrName(9)="マイピクチャ"
FldrName(10)="マイミュージック"
FldrName(11)="共有ドキュメント"
FldrName(12)="タスク名の削除"
key1="HKCU\Software\Microsoft\Windows\ShellNoRoam\Bags\"
key2="\Shell\Status"
flag=0
set Shell = CreateObject("Shell.Application")
set WindowsShell = Shell.Windows
pCnt = WindowsShell.Count
FldrPath =""
ItmNo = chckfldr()
WindowsShell.item( ItmNo ).Quit
Set obj = WshShell.Exec("explorer " & FldrPath )
do while pCnt <> WindowsShell.Count
WScript.Sleep 100
loop
ItmNo = chckfldr()
do while WindowsShell.item(ItmNo).Busy
WScript.Sleep 100
loop
'キーのBagsキーからステータスバーの状態を取得します。
On Error Resume Next
for i=1 to 1000
StatusChk(i) = WshShell.RegRead(key1 + Cstr(i) + key2)
if Err.Number<>0 then
StatusChk(i) = 0
Err.Clear
end if
next
WshShell.AppActivate obj.ProcessID
WScript.Sleep 100
WshShell.sendkeys "%vb"
WindowsShell.item(ItmNo).Navigate "shell:DriveFolder"
WScript.Sleep 1000
for i=1 to 1000
if StatusChk(i) <> WshShell.RegRead(key1 + Cstr(i) + key2) then
if Err.Number=0 then
flag=1
Exit For
end if
Err.Clear
end if
next
WshShell.AppActivate obj.ProcessID
WshShell.sendkeys "%vb"
WshShell.sendkeys "%{left}"
On Error GoTo 0
if flag=1 then
fname = WshShell.RegRead(key1 + Cstr(i) + "\Shell\FolderType")
if fname="" then
fname = "ありません"
else
fname = fname + " です"
end if
stra = ""
for j=1 to 12
stra = stra & Cstr(j) & " : " & FldrName(j) & vbCr
next
Input = InputBox(_
FldrPath +vbCr+ " の現在のタスクは " & fname +vbCr+vbCr+_
"下記の数字から選択してください。"+vbCr+_
"システムのタスクの場合は 12 を選択してください"+vbCr+_
stra,"数値を入力してください",1)
if Input>0 and Input<12 then
WshShell.RegWrite key1 + Cstr(i) + "\Shell\FolderType",FldrTyp(Input),"REG_SZ"
WScript.Echo(FldrName(Input)+" に変更しました。")
Elseif Input = 12 then
WshShell.RegWrite key1 + Cstr(i) + "\Shell\FolderType","","REG_SZ"
BtnCode = WshShell.Popup("削除しました。",2,"Windows Script Host",16)
else
BtnCode = WshShell.Popup("変更をキャンセルしました",2,"Windows Script Host",16)
end if
else
BtnCode = WshShell.Popup("変更を確認できませんでした",2,"Windows Script Host",16)
end if
function chckfldr()
for i=0 to pCnt-1
if TypeName(WindowsShell.item(i))<>"Nothing" then
FldrPath = WindowsShell.item(i).LocationURL
chckfldr = i
exit for
end if
next
end function
お礼
おぉぉぉ! 直った! まさかこんな方法で直るとは…… 私にとっては盲点でした。 一回もこの機能を使ったことが無かったもので、思いつきませんでした。教えてくださってありがとうございます。 ついでに、といってはなんですが…… > スクリプトを自作して > 異常になったフォルダだけ直しています。 気になるのでよろしければそのスクリプトもお教えいただければと……