potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

OLEScriptキーを持つCLSIDキーエントリの一覧

Windows 10環境のOLEScriptキーを持つCLSIDキーエントリの一覧です。

CLSID 表示名 ProgID InProcServer32
{cc5bbec3-db4a-4bed-828d-08d78ee3e1ed} JScript Compact Profile (ECMA 327) JScript.Compact %WINDIR%\System32\jscript.dll
{16d51579-a30b-4c8b-a276-0ff4dc41e755} JScript Language JScript %WINDIR%\System32\jscript9.dll
{f414c260-6ac0-11cf-b6d1-00aa00bbbb58} JScript Language JScript %WINDIR%\System32\jscript.dll
{f414c261-6ac0-11cf-b6d1-00aa00bbbb58} JScript Language Authoring JScript Author %WINDIR%\System32\jscript.dll
{f414c262-6ac0-11cf-b6d1-00aa00bbbb58} JScript Language Encoding JScript.Encode %WINDIR%\System32\jscript.dll
{B54F3741-5B07-11cf-A4B0-00AA004A55E8} VB Script Language VBScript %WINDIR%\System32\vbscript.dll
{B54F3742-5B07-11cf-A4B0-00AA004A55E8} VB Script Language Authoring VBScript Author %WINDIR%\System32\vbscript.dll
{B54F3743-5B07-11cf-A4B0-00AA004A55E8} VBScript Language Encoding VBScript.Encode %WINDIR%\System32\vbscript.dll
{3F4DACA4-160D-11D2-A8E9-00104B365C9F} VBScript Regular Expression VBScript.RegExp %WINDIR%\System32\vbscript.dll
{989D1DC0-B162-11D1-B6EC-D27DDCF9A923} XML Script Engine XML %WINDIR%\System32\msxml3.dll

取得用のソースコードです。

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Microsoft.Win32;

class Program
{
    static void Main()
    {
        using var hkcr = RegistryKey.OpenBaseKey(
            RegistryHive.ClassesRoot, RegistryView.Registry64);
        using var clsidKey = hkcr.OpenSubKey("CLSID");

        var oleScriptCLSIDs = GetCLSIDKeyNamesWithSubKey(clsidKey, "OLEScript", StringComparer.OrdinalIgnoreCase);
        var oleScriptInfos = oleScriptCLSIDs
            .Select(clsid =>
            {
                using var key = clsidKey.OpenSubKey(clsid);
                using var progIdKey = key.OpenSubKey("ProgID");
                using var inProcServer32Key = key.OpenSubKey("InProcServer32");
                var displayName = (string)key.GetValue(null, null);
                var progId = (string)progIdKey?.GetValue(null, null);
                var inProcserver32 = (string)inProcServer32Key?.GetValue(null, null);
                return (CLSID: clsid, DisplayName: displayName, ProgID: progId, InProcServer32: inProcserver32);
            })
            .ToImmutableArray();

        foreach (var oleScriptInfo in oleScriptInfos.OrderBy(info => info.DisplayName))
        {
            var info = oleScriptInfo;
            info.InProcServer32 = info.InProcServer32?.Replace(
                Environment.GetEnvironmentVariable("WINDIR"), "%WINDIR%",
                StringComparison.OrdinalIgnoreCase);
            Console.WriteLine($"|{info.CLSID}|{info.DisplayName}|{info.ProgID}|{info.InProcServer32}|");
        }
    }

    static ImmutableArray<string> GetCLSIDKeyNamesWithSubKey(
        RegistryKey clsidKey,
        string subKeyName,
        IEqualityComparer<string> comparer)
    {
        var names = new List<string>();
        foreach (var keyName in clsidKey.GetSubKeyNames())
        {
            using var key = clsidKey.OpenSubKey(keyName);
            if (key.GetSubKeyNames().Contains(subKeyName, comparer))
            {
                names.Add(keyName);
            }
        }
        return names.ToImmutableArray();
    }
}