サムネイル表示で Windows ファイル フィルタリングを使用する方法

サムネイル表示で Windows ファイル フィルタリングを使用する方法

フォルダーを詳細モードで表示し、列ヘッダーを見ると、すべてのプロパティ (名前、サイズ、アルバム、アーティストなど) の横に矢印が表示されます。その矢印をクリックすると、そのプロパティで使用可能なすべてのタグをリストしたメニューが表示され、その列でフィルターするタグを選択できます。その後、別の列で同じ操作を行って、ファイルをさらにフィルターできます。

以下はファイル フィルターのスクリーンショットです。

ファイルフィルター

たとえばサムネイル ビューなどの他のフォルダー ビューでもこの機能を使用できるようにしたいのですが、これを実現するための適切なアプローチがわかりません。これらのメニューのショートカットや、すべてのビューで詳細列ヘッダーを常に表示するためのレジストリ調整があるのではないかと考えましたが、その方法がわかりません。

詳細ビューでフィルタリングした後、フォルダビューを他のものに変更しても、フィルタはそのまま残るので、する他のビューでも機能しますが、フィルターを使用するたびに詳細モードに切り替えてからサムネイルに切り替える必要があるため、この手順をスキップしたい

答え1

注: 以下は私のラップトップで動作しています:

エディション Windows 10 Home
バージョン 22H2
インストール日 ‎8/‎10/‎2020
OS ビルド 19045.2486
エクスペリエンス Windows Feature Experience Pack 120.2212.4190.0

サポートされなくなった機能はいつでも変更される可能性があります。私はまだ Windows 11 に移行していないので、その点についてはわかりません。


の1つの構成要素冒険者ビュー設定はフラグのセットです。フォルダーフラグ通常、列ヘッダーの表示を抑制するフラグは次のとおりです。

FWF_NOHEADERINALLVIEWS
値: 0x01000000
Windows Vista 以降。詳細表示モードでは列ヘッダーのみを表示します。

しかし、ファイルテンプレートでフラグがクリアされていても、冒険者フォルダを表示するときにこれを上書きし、ヘッダーはDetailsビューにのみ表示されます。しかし、パワーシェル、フラグはクリアできますアクティブ 冒険者ウィンドウが表示され、ヘッダーが表示されます。

ここに画像の説明を入力してください

これパワーシェルコードはすべての列ヘッダーをオンにします冒険者コマンド実行時に開いているウィンドウ:

@((New-Object -Com shell.application).Windows()).ForEach({
    $_.Document.FolderFlags = ($_.Document.FolderFlags -band 0xfeffffff)
    $_.Refresh()
})

上記のコードはコピーして、パワーシェルコンソールウィンドウに表示され、実行可能性を素早くテストするために実行されましたが、日常的に使用するには最適な方法ではありません。ディレクトリの背景メニューを使用するのが最も理にかなっています。そのためには、コードのコマンドライン バージョンが必要です。

Runダイアログまたはショートカットのターゲットとして適したコマンド ライン(したがってコンテキスト メニュー コマンドとしても適したコマンド ライン) は次のようになります。

PowerShell -NoProfile -ExecutionPolicy Bypass -Command '& {@((New-Object -Com shell.application).Windows()).ForEach({$_.Document.FolderFlags = ($_.Document.FolderFlags -band 0xfeffffff');$_.Refresh()})}'

しかし、青い光の一瞬のフラッシュがイライラさせるパワーシェルコマンドを実行するとcosoleがcmd.exe呼び出されます。これを回避するには、パワーシェル最小化。起動中パワーシェルからのコマンドはcmd.exe、特殊文字や引用符に関する問題を引き起こしますが、これは参照.bat.ps1ファイルで解決されることが多いのですが、Base64でエンコードされたバージョンのコマンドでPowerShellパラメータを使用することで、レジストリコマンドを自己完結型に保つことができます-EncodedCommand。次のコードはブロックとしてコピーして、パワーシェルcosole を実行してコンテキスト メニュー エントリを作成します。

$PSCommand      = '@((New-Object -Com shell.application).Windows()).ForEach({ $_.Document.FolderFlags = ($_.Document.FolderFlags -band 0xfeffffff); $_.Refresh()})'
$CommandBytes   = [System.Text.Encoding]::Unicode.GetBytes($PSCommand)
$encodedCommand = [Convert]::ToBase64String($CommandBytes)

$CommandLine    = 'cmd.exe /c start /min "" PowerShell -NoProfile -ExecutionPolicy Bypass -EncodedCommand ' + $EncodedCommand

$RegKey         = 'HKCU:\SOFTWARE\Classes\Directory\Background\Shell\ShowColumnHeaders'

[PSCustomObject]@{
    '(Default)' = 'Show Column Headers'
   'Position' = 'Top'
} | Set-ItemProperty -Path (mkdir $RegKey -Force).PSPath

New-Item -Path $RegKey -Name Command -Value $CommandLine | out-null

必要に応じて、.regファイルをマージしてメニュー エントリを作成することもできます。これは、上記のコードによって作成された reisgtry キーのエクスポートです。ファイルとして保存し.reg、マージしてコンテキスト メニュー エントリを作成します。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\Shell\ShowColumnHeaders]
@="Show Column Headers"
"Position"="Top"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\Shell\ShowColumnHeaders\Command]
@="cmd.exe /c start /min \"\" PowerShell -NoProfile -ExecutionPolicy Bypass -EncodedCommand QAAoACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AQwBvAG0AIABzAGgAZQBsAGwALgBhAHAAcABsAGkAYwBhAHQAaQBvAG4AKQAuAFcAaQBuAGQAbwB3AHMAKAApACkALgBGAG8AcgBFAGEAYwBoACgAewAgACQAXwAuAEQAbwBjAHUAbQBlAG4AdAAuAEYAbwBsAGQAZQByAEYAbABhAGcAcwAgAD0AIAAoACQAXwAuAEQAbwBjAHUAbQBlAG4AdAAuAEYAbwBsAGQAZQByAEYAbABhAGcAcwAgAC0AYgBhAG4AZAAgADAAeABmAGUAZgBmAGYAZgBmAGYAKQA7ACAAJABfAC4AUgBlAGYAcgBlAHMAaAAoACkAfQApAA=="

上記の2つの方法のいずれかを使用してレジストリキーを作成した後、バックグラウンドコンテキストメニューの上部に新しい項目が表示されます。冒険者ウィンドウズ:

ここに画像の説明を入力してください

実行後:

ここに画像の説明を入力してください

同じように冒険者テンプレート設定を上書きすると、現在のフォルダのサブフォルダに移動してもヘッダーが消えます。これを回避する方法はわかりません。コマンドを再度実行するだけです。

関連情報