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 を調べてみた

以下は手を動かしてみたい私の自己満足。

利用できそうな機能の 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 コマンドの使い方について勉強になった