====== ProgID (Programmatic Identifier) ====== **ProgID** (zkratka pro *Programmatic Identifier*) je textový řetězec používaný v operačním systému **Microsoft Windows** k jednoznačné identifikaci **COM tříd** (Component Object Model) a **typů souborů** v registru systému. ProgID slouží jako člověkem čitelné jméno, které je snáze použitelné než binární identifikátor **CLSID**. ===== Co je ProgID? ===== Každá COM třída má: * **CLSID** – globálně jedinečný identifikátor (GUID) ve formátu `{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}` * **ProgID** – lidsky čitelné jméno, např. `Excel.Application`, `Word.Document.12`, `Scripting.FileSystemObject` ProgID je uložen v registru Windows pod klíčem: HKEY_CLASSES_ROOT\ ===== Struktura ProgID ===== Formát ProgID obvykle následuje tento vzor: .[.Verze] Příklady: * `Word.Document.8` – dokument pro Word 97–2003 * `Excel.Application` – aktuální verze Excelu (bez specifikace verze) * `Outlook.Application.16` – Outlook verze 16 (součást Office 2016+) Verze je volitelná. Pokud není uvedena, použije se nejnovější registrovaná verze daného ProgID. ===== Vztah mezi ProgID, CLSID a registrem ===== V registru Windows je každý ProgID propojen se svým CLSID: HKEY_CLASSES_ROOT\Excel.Application (Default) = "Microsoft Excel Application" CLSID = "{00024500-0000-0000-C000-000000000046}" Zároveň pod klíčem CLSID najdeme odkaz zpět na ProgID: HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046} (Default) = "Microsoft Excel Application" ProgID = "Excel.Application" Toto dvojité mapování umožňuje systému rychle převádět mezi čitelným jménem a interním identifikátorem. ===== Použití ProgID ===== ProgID je běžně používán v různých technologiích: * **Skriptování (VBScript, PowerShell, JScript):** var excel = new ActiveXObject("Excel.Application"); * **Windows API** – funkce jako `CLSIDFromProgID` * **Registrační asociace souborů** – např. `.docx` → `Word.Document.12` * **Kancelářské automatizace** – ovládání Wordu, Excelu apod. z externích aplikací ===== Příklad v PowerShellu ===== $word = New-Object -ComObject "Word.Application" $word.Visible = $true $doc = $word.Documents.Add() Tento kód vytvoří novou instanci Microsoft Wordu pomocí ProgID `Word.Application`. ===== Důležité poznámky ===== * ProgID **není** globálně unikátní – jiný vývojář může zaregistrovat stejný ProgID. Proto spolehlivějším identifikátorem zůstává **CLSID**. * ProgID může být registrován jak v **HKEY_LOCAL_MACHINE\Software\Classes**, tak v **HKEY_CURRENT_USER\Software\Classes**, což umožňuje uživatelské přepsání systémových nastavení. * Moderní aplikace a rozhraní (např. .NET Core, UWP) se postupně od COM a ProgID vzdalují ve prospěch bezpečnějších a platformově neutrálních technologií. ===== Související pojmy ===== * [[HKCR|HKEY_CLASSES_ROOT (HKCR)]] * **CLSID** – Class Identifier (GUID) * **COM** – Component Object Model * **ActiveX** * **File association** – Asociace souborových přípon ===== Reference ===== * [https://learn.microsoft.com/en-us/windows/win32/com/-programmatic-identifiers|Microsoft Learn: Programmatic Identifiers] * [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/automat/clsid-key-hklm|CLSID and ProgID in the Registry]