web-dev-qa-db-ja.com

registry / desktop.iniで子フォルダーのタイプを設定します

Winaero Tweakerで自動フォルダータイプ検出を無効にしましたが、それはすべてのフォルダーをGeneralアイテムに設定するだけです(HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\ShellNotSpecified)に設定します。これにより、Windowsがカスタムフォルダータイプを保存できなくなります。

他のすべてのフォルダーをNotSpecifiedとして設定することにより、Windows自体が設定または変更できないようにしながら、フォルダーの種類(音楽、画像など、子を含む)を適切なファイルの種類に設定する方法はありますか?

スクリプト出力:

{5C4F28B5-F869-4E84-8E60-F11DB97C5CC7} Generic
{7D49D726-3C21-4F05-99AA-FDC2C9474656} Documents
{B3690E58-E961-423B-B687-386EBFD83239} Pictures
{94D6DDCC-4A68-4175-A374-BD584A510B78} Music
{5FA96407-7E77-483C-AC93-691D05850DE8} Videos
{885A186E-A440-4ADA-812B-DB871B942259} Downloads
{C4D98F09-6124-4FE0-9942-826416082DA9} UsersLibraries
{FBB3477E-C9E4-4B3B-A2BA-D3F5D3CD46F9} Documents.Library
{0B2BAAEB-0042-4DCA-AA4D-3EE8648D03E5} Pictures.Library
{3F2A72A7-99FA-4DDB-A5A8-C604EDF61D6B} Music.Library
{5F4EAB9A-6833-4F61-899D-31CF46979D49} Generic.Library
{631958A6-AD0F-4035-A745-28AC066DC6ED} Videos.Library
{3F98A740-839C-4AF7-8C36-5BADFB33D5FD} Documents.LibraryFolder
{24CCB8A6-C45A-477D-B940-3382B9225668} HomeFolder
1
user430836

はい、これはレジストリを介して行うことができます。ほとんどのファイルフォルダのCustomizeタブはPropertiesダイアログにあり、 default/sniffedFolderTypeを指定/上書きできます。タイプセレクタの下に、次のラベルが付いたチェックボックスがあります:Also apply this template to all subfolders

enter image description here

このオプションをオンにすると、選択したFolderTypeが既存のサブフォルダーと新しいサブフォルダーの両方に適用されます。基になるメソッドは、Inheritという名前のフォルダーのBag(保存されたビュー)のサブキーを作成することです。このキーには、単一のREG_SZFolderTypeが含まれ、FolderType

enter image description here

フォルダに保存されたビューがない場合(新しく作成された、または表示されなかった場合)、Explorerは、フォルダの親とその祖先の保存されたビューをクエリします。継承が指定されたかどうかを確認します。 見つかった場合、この値はcontent-sniffingよりも優先されます。

そして、これが気の利いた部分です!

UIにはドライブの継承を指定するオプションはありませんが、This PC、およびrooted/virtaul DesktopInheritサブキーを相続人Bagに追加すると、ほぼすべてのサブフォルダーに影響します。ルート化されたデスクトップは、DesktopExplorerアドレスバー。

enter image description here

Bagを見つけるには、NodeSlotBagMRUの値を確認します。

enter image description here

そのため、バッグ#3のInheritサブキーを作成します。

enter image description here

これにより、Generic(NotSpecifed)FolderTypeが、別のタイプが指定されていないフォルダーに適用されます。 This PCの下のさまざまなフォルダーは、関連するタイプを指定し、継承を設定して、このグローバルなデフォルトを上書きできます。


コードのトラブルシューティング

保存されたビューの数を取得します。 5000に達した場合、それが限界であり、奇妙なことになります--- BagMRUとバッグは削除する必要があります

((gp "HKCU:\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU").Nodeslots).count

FolderTypesApply to Foldersを介して設定したカスタムテンプレートを持っているもの:

$Defaults = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Defaults'
$FT       = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes'
(gi $defaults).Property |
 Select @{N = 'ID'; E = {$_}},
        @{N = 'Name'; E = {(gp "$FT\$_").CanonicalName}}

これにより、1つ以上の保存済みビューに現在適用されているFolderTypesがリストされます。 Musicテンプレートを使用しているフォルダーがあるかどうかを知りたいです。

$source = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\'
$Lookup = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes'
gci $source -recurse | ? PSChildName -like '{*}' |
    select -Expand PSChildName -Unique | ForEach{ 
        [PSCustomObject]@{
            'ID' = $_
            'Name' = (gp "$Lookup\$_").CanonicalName
        }
}

Musicテンプレートを使用しているバッグを調べてみましょう:

$BagMRU = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU'
$Bags   = 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags'
gci $bags -recurse |
 ? PSChildName -like '{94D6DDCC-4A68-4175-A374-BD584A510B78}' | ForEach{
    $Bag = $_.Name.Split('\')[-3]
    gci $BagMRU -recurse | ? { $_.GetValue('NodeSlot') -like $Bag } | ForEach{
        [PSCustomObject]@{
           'Bag'     = $Bag
           'MRUPath' = ($_.PSPath -split 'BagMRU')[-1]
        }
    }
}
2
Keith Miller