【元記事をASCII.jpで読む】

 7月8日にPowerToys Release v0.92.1(https://github.com/microsoft/PowerToys/releases/tag/v0.92.1)が公開され、これまで問題だった、エクスプローラーのプレビューハンドラのエラーが解決されている。この問題を筆者は2023年頃に気がついた。実際、同じ頃にバグ報告がなされたが、2025年まで解決できなかった。

実際のところ何が問題だったのか?

 現象としては、PowerToysをユーザーごとのインストールとした場合、プレビューハンドラがエラーとなり、テキスト系ファイルのプレビューがエラーとなってしまう。その中に「.txt」の拡張子を持つテキストファイルが含まれる。PowerToysを導入すると、テキストファイルのプレビューがエラーになったように見える。

 初回のインストール時に全ユーザー向け(システムインストール)を選択すればいいのだが、WingetやMicrosoftストア経由でのインストールでは、必ずユーザーごとのインストールになってしまう。以後は、PowerToysが自動アップデートするため、システム/ユーザーインストールの種別が変わることはない。

 GitHubからシステムインストール用のパッケージを直接ダウンロードすれば、ずっとシステムインストールのままで、テキストファイルのプレビューハンドラがエラーになることはない。

 問題が起きるのは、PowerToysの「File Explorter add-on」にある、「ソースコードファイル(モナコ)」である。

 これをユーザーごとにインストールしたPowerToysでオンにしたときに、テキストファイルのプレビューがエラーとなる。対策として、この項目もオフにすることで、とりあえずテキストファイルのプレビューはWindowsの標準状態に戻る。

そもそもプレビューハンドラとは?

 簡単に言ってプレビューハンドラは、Explorerがファイルウィンドウ内でファイルの中身をプレビューペインに表示するためのもの。プレビューハンドラに関しては、詳しくは過去記事(「エクスプローラーのプレビューウィンドウについて解説する」)を参照してほしい。

 レジストリを設定することで、ファイル形式(拡張子)ごとにプレビューハンドラを定義できる。具体的には、以下のキーのデフォルトプロパティ値がプレビューハンドラである。

\HKEY_CLASSES_ROOT\<拡張子>\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}

 テキストファイルであれば、以下のPowerShellコマンドでプレビューハンドラを調べることができる。

Get-Item "Registry::\HKEY_CLASSES_ROOT\.txt\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}"

 プレビューハンドラは、「\HKEY_CLASSES_ROOT\CLSID」以下で定義されている。上記のコマンドの結果である「{D8034CFA-F34B-41FE-AD45-62FCBB52A6DA}」を使い、以下のコマンドで表示させることができる。

Get-Item -Path "Registry::\HKEY_CLASSES_ROOT\CLSID\{D8034CFA-F34B-41FE-AD45-62FCBB52A6DA}

問題の出たモナコとは一体何?

 問題の出たプレビューハンドラは、モナコMonaco)と呼ばれている。これは、マイクロソフトが開発したブラウザ上で動作するオンラインエディタmonaco-editor」(https://github.com/microsoft/monaco-editor)の文法ハイライト機能を利用したものだ。

 Microsoft製の文法ハイライトには、Visual StudioやVS Codeのものがあるようだが、機能を取り出してプレビューハンドラとして使うのには、モナコのものが適していたようだ。

 このモナコが対応するソースコードファイルに関する情報は、GitHubのPowerToysのリポジトリ(https://github.com/microsoft/PowerToys/tree/v0.92.1)にある。このリポジトリの「src/Monaco/monaco_languages.json」(https://github.com/microsoft/PowerToys/blob/v0.92.1/src/Monaco/monaco_languages.json)にJSON形式で言語を表すキーワード拡張子などの情報が記述されている。

 前記のGitHubのウェブページにあるコピーアイコン(矩形が2つ重なったもの)をクリックする。これでクリップボードにコードが入るので、適当なエディタコピーして作業するか、あるいはその隣のダウンロードアイコンでファイルを入手して処理する。

 ファイルをダウンロードする場合の手順は、ブラウザを使って以下のURL(https://github.com/microsoft/PowerToys/blob/v0.92.1/src/Monaco/monaco_languages.json)からファイルをダウンロードし、PowerShell

$x=Get-Content <ダウンロードフォルダ>\monaco_languages.json | ConvertFrom-Json
$x.list | ConvertTo-Csv | Out-File Monaco-Ext.csv

とする。CSV形式などで保存しておくとExcelから読み込みが可能になる。

 これまで、テキストファイルのエラーにはモヤモヤしたものを感じていたが、ようやくスッキリとした。

WindowsのPowerToysにおけるプレビューハンドラのバグがようやく取れた