explorer shell:::{CLSID} に関する覚え書き
CLSID を指定して Windows の機能を呼び出すための覚え書き。
CLSID とは
Windows 内のアプリやら機能やらが持つ一意の識別子。もっというと COM コンポーネント(Windowsの機能を再利用できるようにした部品)に付く GUID。
たとえば「ファイル名を指定して実行」とか「コントロールパネルの各項目」などに CLSID が割り当てられている。
CLSID 情報はレジストリの HKEY_CLASSES_ROOT\CLSID
キー配下に記録されている。
CLSID を指定して Windows の機能を呼び出す
explorer shell:::{CLSID}
というコマンドラインを実行すると、CLSID が指す機能を呼び出せる。
たとえば「ファイル名を指定して実行」の CLSID は {2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
なので、以下コマンドラインを叩くと、「ファイル名を指定して実行」を開ける。
explorer Shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
他にどんな機能を呼び出せる?
既に調べてくれてる方がいらっしゃるので参考にする。
- 特殊フォルダやプログラムのCLSID一覧とShellコマンド一覧 | 初心者備忘録
- CLSID Key (GUID) Shortcuts List for Windows 10 | Windows 10 Tutorials
見た感じコントロールパネルやタスクバーから辿れる機能は大体呼び出せるみたい。
使えそうな CLSID を調べてみた
以下は手を動かしてみたい私の自己満足。
利用できそうな機能の CLSID を自力で抽出してみた。成果物は GitHub に置いた。端的に結果だけ見たいなら こっち。
どうやって抽出したか
reg コマンドにて HKEY_CLASSES_ROOT\CLSID
配下を上手く抽出して、必要なら Grep なり何なりで加工していくスタイルで頑張ってみた。
最初に実行したのは以下。
$ reg query "HKEY_CLASSES_ROOT\CLSID" /f "InfoTip" /s
つまり 「InfoTip」というエントリを持つキーのみ を対象にしている。それ以外の 9 割以上はよくわからないコンポーネントや外部アプリの CLSID なので用はない(もっというと用がありそうなキーに共通するのが InfoTip キーの有無っぽかったので今回こうした)。
続いて、得られたキー名の一覧を作って、今度は以下コマンド、というかバッチファイルで「各キー名に対する詳細情報(各エントリ)」をゲットした。
@echo off setlocal set BASEDIR=%~dp0 set SAVEPATH=%BASEDIR%3_queries.txt del %SAVEPATH% rem ★得られたキー名の一覧は 2_keyonly.txt に rem ★一行一キーで保存しているものとする. for /F "usebackq" %%i in (`type 2_keyonly.txt`) do ( reg query %%i /f "*" /d >> %SAVEPATH% )
あとは Grep とか使って加工しておしまい。
各エントリについて
今回、用があったのは以下二つ。
- (既定): 機能名
- InfoTip: 実際に呼び出されるプログラムパス(DLLに引数を渡しているケースが多い)
例を一つ挙げる。
{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0} キー名 エントリ種類 値 (既定) REG_SZ Run... InfoTip REG_SZ @explorer.exe,-7003
これは
- CLSID は
{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
- これが表す機能名は「Run...」である
- ファイル名を指定して実行のこと
- なぜ末尾にピリオドが三つ付いてるのかは不明
- 日本語Windows でもこの値
- これを呼び出した時に実質呼ばれるのは @explorer.exe,-7003 である
- explorer に埋め込まれてる 7003 番目の機能を呼び出す、みたいな指定
感想
- reg query コマンドの使い方について勉強になった