カテゴリ:デジタル覚え書き > Windowsとか »

拡張子で(擬似)ソート、アイコン変更

SVGファイルを色々作ってたんだけど、規定のプログラムがIEになってたの。
普段Chromeを使ってるので、いちいち別のウィンドウが立ち上がるのがうざくて、規定のプログラムをChromeにした。
そしたらファイルの種類とかがSVGのくせに「Chrome Document」になっちゃって、SVGファイルとhtmlファイルが混ざって表示されるようになっちゃった。
エクスプローラの並べ替えに「拡張子」って項目ないし。
今回も試行錯誤とかただの錯誤とかしましたよ。

結果としてはまあ、こうできたのです。
2018-10-11-01.jpg


CAUTION!
今回はレジストリをいじりまくります。
悪くするとWindows自体が起動しなくなる恐れがあるです。
自己責任でお願いします。
やるとしたらちゃんとバックアップはとりましょう。




  1. エクスプローラ拡張ソフトでなんとかならないものか

  2. 拡張子関連の、なんか仕組み的な

  3. SVGがどうなってたか

  4. 謎の拡張子「.yutori」を作って実験

    1. 規定のプログラムを変える

    2. 拡張子についての設定をする

    3. 「.yutori」用の「ProgId」を登録、アイコンも変更する



  5. もうちょっと説明

    1. PerceivedType

    2. REG_SZとかREG_BINARYとか

    3. DefaultIcon



  6. アイコンファイルを作る

  7. レジストリを編集できないとき


エクスプローラ拡張ソフトでなんとかならないものか


「エクスプローラ 拡張子 並べ替え」とかでぐぐってもなかなかヒットしないのね……。
ようやく見つけたこれとか→「シェル拡張型タグエディタ mp3infp (MP3インフピー)
よく出てくるこれとか→「Windows Explorer filename extension column
動かないの……。
Windows7には対応してないんですかね……。

「ファイルの種類」を変えられれば何とかなるんじゃないかと思って見つけたのがこれで→「FileTypesMan v1.83 - File Types Manager for Windows
このツールで見る「説明」って項目が、エクスプローラの「種類」のとこに表示されてるやつで、なんか、変えられはするんだけど、SVGの方変えるとhtmlの方も変わっちゃうの。

はー……甘くない……。

拡張子関連の、なんか仕組み的な


そのー……こちらの記事を読んでいただければ多分大体分かるんです。
レジストリの直接編集によるファイルの拡張子と関連づけ - Glamenv-Septzen.net
でもね、丸投げって言うのもあれなので……。

レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Classes」って言うキーに、色んな拡張子がサブキーとして入ってる。
それぞれの拡張子のキーには「Content Type」とか「PerceivedType」とかの値と、「OpenWithProgIds」とか「PersistentHandler」とかのサブキーが入ってたりする。

「Content Type」はなんか、「text/plain」とか「image/png」とかのMIMEタイプって言うんですかね、これがどんなファイルなのかを説明するためのなんかです。

「PerceivedType」は、拡張子をなんかのグループに属させる的な。
例えば「.html」には「text」ってデータが設定されてるんだけど(今の私の環境では)、これはどこを参照してるかって言うと、「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\text」キー。
ここに、このグループに入ってる拡張子のファイルをWindowsがどう処理するか、って感じのデータが入ってる。

「PersistentHandler」はエクスプローラとかでファイルを検索するときに関係するキーだそうです。
「.html」には(やっぱり今の私の環境では)「既定」に「{eec97550-47a9-11cf-b952-00aa0051fe20}」ってデータが入ってて、この名前を持つキーを検索すると「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{eec97550-47a9-11cf-b952-00aa0051fe20}」が引っかかって、「既定」に「HTML File persistent handler」ってデータが入ってる。
なんか、ハンドラーがこれだとhtmlファイルの……なんだ、「textContent」っぽいところだけ検索対象になるみたい。
「Plain Text persistent handler」ってハンドラーもあって、これだとファイルの内容まで検索対象にしてくれるそうですよ。

今回関係あるのは「OpenWithProgIds」です。
どのプログラムで開くよ? って情報が入ったキー。
もしかしたら「UserChoice」ってキーもあるかもしれない。
こっちはファイルを右クリックして「プログラムから開く」→「既定のプログラムの選択」で指定したやつ……のはず。

SVGがどうなってたか


これはね……正直、細かいところは変えちゃったんでわかんないです。
けど、「OpenWithProgIds」とか「UserChoice」の中に、htmlファイルを開くのと同じ「ProgId」が使われてたんだと思います。
「ProgId」はアプリケーションを識別するための名前? 変数みたいなもんかなぁ。
例えば、私の今の環境では「.html」の「OpenWithProgIds」に「ChromeHTML」って値が入ってて、これは「HKEY_LOCAL_MACHINE\SOFTWARE\Classes」にある「ChromeHTML」ってキーを参照してる。
で、SVGにも「OpenWithProgIds」に「ChromeHTML」って値が入ってたからhtmlファイルと混ざっちゃってたの。

謎の拡張子「.yutori」を作って実験


規定のプログラムを変える



「YUTORI ファイル」の「既定のプログラム」をChromeにする


2018-10-11-02.jpg
まず適当にテキストファイルを作って保存。
右の窓はプレビューウィンドウです。
今テキストデータだって分かってるから、エクスプローラが中身を表示してくれてます。



2018-10-11-03.jpg
拡張子を謎の「.yutori」に変える。



2018-10-11-04.jpg
謎なのでプレビューは表示されないし、ダブルクリックで開こうとするとこうなる。
なので「インストールされたプログラムの一覧からプログラムを選択する」を選択して「OK」。



2018-10-11-05.jpg
Chromeになっちゃってたのを再現したいので、「Google Chrome」を選んで「この種類のファイルを開くときは、選択したプログラムをいつも使う」を選択して「OK」。



2018-10-11-06.jpg
すると今のファイルがChromeで開く。こうなればもう次から、ダブルクリックすればChromeが立ち上がって内容を表示してくれる。



2018-10-11-07.jpg
ファイルのアイコンが、紙にChromeのマーク、に変わってる。




んー、再現し切れてない。
ちょっと、Chromeのレジストリの設定を参考に、もうちょっと近づけてみます。

拡張子についての設定をする



「YUTORIファイル」を「Chrome Document」にする


2018-10-11-08.jpg
まず「HKEY_CLASSES_ROOT\.html」を参考にします。「.html」キーに設定されてる値と



2018-10-11-09.jpg
「OpenWithProgIds」サブキーに設定されてる値を真似。



2018-10-11-10.jpg
「Content Type」は「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type」にあるので、そこの「text/html」サブキーを真似。



2018-10-11-11.jpg
「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type\text/html」にある「CLSID」のデータ、「{25336920-03F9-11CF-8FD0-00AA00686F13}」ってなんじゃろなと思って検索してみたら、「既定」のデータに「HTML Document」ってあって、ここにも「ProgId」とかが設定されてる。なんか辞書引いてるみたいだね。あっち飛ばされこっち飛ばされ。



2018-10-11-12.jpg
「.yutori」は「HKEY_CURRENT_USER\Software\Classes」に登録されてました。



2018-10-11-13.jpg
「.yutori」を右クリックして「新規」→「文字列値」とか



2018-10-11-14.jpg
「新規」→「キー」とかで



2018-10-11-15.jpg
値とデータをこんな感じに



2018-10-11-16.jpg
作成した「OpenWithProgIds」サブキーの値をこんな感じに設定。



2018-10-11-17.jpg
「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type」に「yutori/text」サブキーを作って、値をこんな風に設定。「Encoding」は「新規」→「バイナリ値」で作るんだけど、このデータが何を意味してるのかわかんない。「text/html」は「08 00 00 00」で「text/plain」は「07 00 00 00」なの。



2018-10-11-18.jpg
まあそんな感じで再現完了。こんな風に混ざっちゃって、目的の拡張子を見つけるのがかったるい。




「.yutori」用の「ProgId」を登録、アイコンも変更する


じゃあ混ざっちゃったのを解除する。

「.yutori」の設定をしなおす


2018-10-11-19.jpg
まず「.yutori」キー自体の値とデータをこんな風に設定。



2018-10-11-22.jpg
新しいProgIdを作る。「HKEY_LOCAL_MACHINE\SOFTWARE\Classes」に、新規キーを作成。



2018-10-11-23.jpg
キーの名前を「Yutori.Document」にして、「既定」のデータを「Yutori's Document」に設定、さらに「shell」サブキー、そこからさらに「open」サブキー、その中に「command」サブキーを作る。この「既定」に設定したデータがエクスプローラの「種類」のとこに表示される。



2018-10-11-24.jpg
「command」キーの「既定」のデータに、デフォルトのプログラムにしたいプログラムのパスを入れて、「(半角スペース)"%1"」って付け足す。「%1」はプログラムに渡される第1引数かな。ダブルクリックしたならそのファイルのことだね。前に書いたバッチファイルの記事のに似てるかも。同じ? 起動オプションも指定できるぽい。



2018-10-11-25.jpg
「Yutori.Document」の下に作った「DefaultIcon」キーの「既定」のデータにアイコンファイルのパスを設定。



2018-10-11-26.jpg
「HKEY_CURRENT_USER\Software\Classes\.yutori」に戻って「OpenWithProgIds」キーの値をこんな感じに設定。今作った「Yutori.Document」ってProgIdを値として設定する。



2018-10-11-27.jpg
無事に区別できるようになった。プレビューウィンドウにちゃんと表示されてるのは、「.yutori」の「PerceivedType」に「text」を指定してるから。




もうちょっと説明


もうね、調べては試し調べては試しして何とかここまで出来た、ってくらいのレベルだからね。
せっかく調べたことを忘れないように、って言うか、忘れてもまた確認できるようにの覚え書き。

PerceivedType


さっき書いたように、複数の拡張子をまとめて、同じ処理を行えるようにするための値……かな。
「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations」キーに色々入ってる。
「text」なら、「DefaultIcon」に(今の私の環境では)「%SystemRoot%\system32\imageres.dll,-102」が入ってたりとか。

で、「text」の「ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}」キーの「既定」のデータに「{1531d583-8375-4d3f-b5fb-d23bbd169f22}」って入ってて、これは「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}」を参照してる。
このキーを見てみると「Windows TXT Previewer」って書いてある。


REG_SZとかREG_BINARYとか


「値の型」って言うらしいんだけど。
値を新規作成するときに選ぶ「文字列値」とか「バイナリ値」とか「DWORD値」とかのことだね。
新しくキーを作ると自動的に「(既定)」って値が作られて、普通に作ると値の型が「REG_SZ(文字列値)」になるみたい。
今回はこれで問題なかった(多分)んだけど、例えばさっき見た「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\text\DefaultIcon」の既定の値は「%SystemRoot%\system32\imageres.dll,-102」だったけど、これは「環境変数」を含んだデータだからただの文字列値じゃないんだって。
そういうときは「(既定)」の型が「REG_EXPAND_SZ(展開可能な文字列値)」じゃないとダメらしくて、「(既定)」の値の型は後から変えられないから、キーを作るときに違う方法を使わないといけないんだって。
私が調べて見つかったのはここ→レジストリキーのデフォルト値をREG_EXPAND_SZで作成する (PowerShell プログラミング)
なんかもう……「PowerShell」って何ですか……?
必要に駆られたら調べよう。そうしよう。

DefaultIcon


なんかこのキーね、あっちこっちにあるんですよ。
どこに指定したらいいのか、複数指定されてたらどれが優先されるのか、よくわからないです……。
多分、「HKEY_LOCAL_MACHINE\SOFTWARE\Classes」とかに入ってる拡張子のキーの既定のデータで示された先に設定されてるDefaultIconが強そう……だと今思ってる。
「.js」ファイルなら「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.js」キーを見ると「(既定)」のデータが「JSFile」ってなってる。
なので「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\JSFile」キーを見に行くと、「DefaultIcon」キーの「(既定)」のデータが「C:\Windows\System32\WScript.exe,3」ってなってて、さっきみたいに中身を見てみるとこんなの入ってた。
2018-10-12-35_111359.jpg
「WScript.exe,3」の「3」はこの中の4番目……うん、1から数えるなら4番目だよね。それ。
あれ? さっきテキストファイルのときは102で102番目だったよな……。あれ?
ああ分かったぞ。
さっきのは「102番目」じゃなくて「名前」が「102」だったんだ。
数え間違えてた。
「ファイル名」の後に「,」がきて、その後にすぐ数字なら「0」から数えた番号で、「-」がついたらその後の数字はアイコンの「名前」なんだ。
さっきの画像間違いだったな……。まあいっか。

アイコンファイルを作る


そんな説明することもないかもしれないけど……。
png画像とか用意して、いつだったか紹介したサービス「ファビコン作成 favicon.ico 無料で半透過マルチアイコンが作れます」の仲間の「マルチアイコン作成。無料で透過マルチアイコンが作れます。」で生成すればいいんだけど。
サイズとかどうなってんのかな~って思って調べてみたの。
そしたらこういうページが見つかった。→「アイコン」(リンク切れ。探しても見つかりませんでした(´・ω・`))
どうでもいいけどページタイトルが分かりにくいよ……。
「Windows デベロッパー センター」でいいんですか?
Windowsのアイコンを作るときの……なんだ、あ、ガイドライン。それが書いてあるページです。
で、サイズはアプリケーション アイコンおよびコントロール パネルのアイテム: 16 × 16、32 × 32、48 × 48、256 × 256 でフル セットとなります。(コードで 32 ~ 256 に拡大縮小します)。.ico ファイル形式である必要があります。クラシック モードの場合、フル セットは 16 × 16、24 × 24、32 × 32、48 × 48 および 64 × 64 になります。だそうです。
ああ、マルチアイコンなんだ、って思って。
さっき、dllファイルとかでアイコン指定したいなって書いたけど、こういうとこ見て作んないとダメなのかな~。
別に自分が使うだけならどうでもいいか。分かれば。

レジストリを編集できないとき


なんかね、こういうウィンドウが出て、編集できないことがあるんです。
を編集できません。値の内容を書き込み中に、エラーが発生しました。

「を編集できません。値の内容を書き込み中に、エラーが発生しました。」
これはどうやら「アクセス制御」というもののせいらしいんだけど。
今操作してる人が、編集しようとか閲覧しようとした対象についてどんな権限を持ってるかってことみたい。
これは、編集しようとしたキーを右クリックして、「アクセス許可」を選んで設定を変えないといけない。
2018-10-11-29.jpg

「~のアクセス許可」ってウィンドウが出たら、下の方にある「詳細設定」ボタンをクリック。
2018-10-11-30.jpg

「アクセス許可エントリ」の中にある、えー……操作する人? 的な? そこから多分、今自分が属してるところを探して編集するんだけど。
「このオブジェクトの親からの継承可能なアクセス許可を含める」にチェックが入ってると微妙に編集できなかったりするのでここを外す。
2018-10-11-31.jpg

これって言うのは、今編集しようとしてる対象から見て上の階層にあるやつの設定を引き継ぐかどうかってこと。
ヘルプから引用すると[このオブジェクトの親からの継承可能なアクセス許可を含める] チェック ボックスをオフにすると、そのファイルまたはフォルダーは、親オブジェクトからアクセス許可エントリを継承しなくなります。
言ってること一緒か……。
このチェック外すとなんか警告のウィンドウが出るけど、OKして大丈夫だと思う。
そもそもレジストリいじってる時点で大丈夫か? って感じではあるんだけど。

で、今私は多分「Administrators(このコンピューターの管理者)」なのでそこを編集する。
「許可」の「フルコントロール」にチェック入れるとその下の項目全てにチェックが入る。
「適用先」はなんとなく、狭くした方がいいかなって思って「このキーのみ」にしてみた。
2018-10-11-32.jpg

さっき継承のチェック外したから「継承元」は「<継承無し>」になってるし、「アクセス許可」は微妙にカスタマイズされてるから「特殊」になってる。
2018-10-11-33.jpg

この「特殊」が初め何だかわかんなかったんだよね。
「特別な許可」みたいな意味だと思ってたんだけど、違った。
読み取り系の項目だけにチェックが入ってれば「読み取り」になるし、フルコントロールにして適用先も限定しなければ「フルコントロール」になる。
「子オブジェクトのアクセス許可すべてを、このオブジェクトからの継承可能なアクセス許可で置き換える」のチェックはさっきのと逆、みたいな感じ。
さっきはこの対象が親の設定を引き継ぐかどうかのチェックだったけど、これはこの対象の子供に設定を引き継がせるかどうかのチェック。なはず。
また引用すると[子オブジェクトのアクセス許可すべてを、このオブジェクトからの継承可能なアクセス許可で置き換える] チェック ボックスをオンにすると、すべてのサブフォルダーとファイルのすべてのアクセス許可エントリは、親オブジェクトから継承可能なアクセス許可エントリにリセットされます。です。
「リセット」なので、子供の設定をなんか自分で変えてたとしたら、今編集してる設定に子供の設定が置き換わるってこと。
「継承」させるんだから当然か。

で、OKすると多分また「いいの!?」みたいなウィンドウが出るかもしれないけど、もういいんでそのままOK。

はー……。
SVGファイルとhtmlファイルが混ざっちゃうのが不便でずっと気がかりだったんだ。
変更できてよかった。
と同時に、また知りたいことが増えたというね。
ほんとにキリがないわ。

ジャンル : コンピュータ
テーマ : Windows

コメントの投稿

非公開コメント

ステータス
細野ゆとり
あそびにん
せいべつおんな
レベル
ちから
すばやさ
こうげき力
しゅび力
EX
最新記事
カテゴリー
月別アーカイブ
全記事表示リンク

全ての記事を表示する

おえかき
ブログ内ページランキング
twitter
その他SNS
検索フォーム
オンラインカウンター
現在の閲覧者数:
カレンダー
01 | 2020/02 | 03
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
リンク
カウンター
RSSリンクの表示
QRコード
QR