# WinCom – Total Commander WFX plugin

[English](README.en.md) | **Slovensky**

![ikona](res/preview.png)

**WinCom** je súborový systémový plugin (WFX) pre Total Commander, ktorý v paneli zobrazí
vnútorné nastavenia Windows ako virtuálne adresáre a umožňuje ich upravovať bežnými
operáciami Total Commandera (F3, F5, F6, F7, F8, Enter, Alt+Enter, príkazový riadok).

| Priečinok       | Čo obsahuje                                                                        | Inšpirácia |
|-----------------|-------------------------------------------------------------------------------------|------------|
| `Services`      | Windows služby – stav, typ spustenia, spustiť / zastaviť / reštartovať / pozastaviť | [Services2](https://totalcmd.net/plugring/Services2.html) |
| `Startups`      | Programy spúšťané pri štarte – zapnúť / vypnúť, upraviť, zmazať, pridať             | [Startups](https://totalcmd.net/plugring/Startups.html) |
| `Registry`      | Register – prehliadanie, zmena, mazanie, pridávanie, export / import `.reg`         | [Registry](http://www.totalcmd.net/plugring/registry.html) |
| `Environment`   | Premenné prostredia `User` a `System` – zmena, mazanie, pridávanie                  | |
| `Logs`          | Windows Event Log (System, Application, Security, ...) – prehliadanie a export      | Event Viewer |

Podporované je 32-bitové (`.wfx`) aj 64-bitové (`.wfx64`) prostredie Total Commandera.

## Inštalácia

1. Stiahnite `dist/WinCom-<verzia>.zip`.
2. V Total Commanderi dvakrát kliknite na ZIP (alebo ho otvorte a stlačte Enter) – plugin sa nainštaluje
   automaticky (obsahuje `pluginst.inf`).
3. Plugin sa zobrazí v **Sieťové prostredie** (`Net` → *Súborový systém*) ako `WinCom`.

Ručne: skopírujte `WinCom.wfx` / `WinCom.wfx64` do adresára pluginu a pridajte ho cez
*Konfigurácia → Nastavenia → Pluginy → Súborové systémové pluginy (WFX)*.

> **Zmeny v `HKLM`, v systémových premenných a v službách vyžadujú práva správcu** – spustite
> Total Commander „ako správca“. Bez toho zobrazí plugin chybové hlásenie so systémovým popisom chyby.

## Ovládanie

### Všeobecne

| Klávesa        | Akcia                                                                       |
|----------------|-----------------------------------------------------------------------------|
| **Enter**      | otvorí editačný formulár položky (služba, startup, hodnota v registri, premenná) |
| **Alt+Enter**  | Registry: export kľúča/hodnoty do `.reg`; inde to isté ako Enter            |
| **F7**         | pridanie novej položky (otvorí sa formulár, zadaný názov je predvyplnený)   |
| **F8 / Delete**| zmazanie položky (služba, startup, hodnota, kľúč, premenná)                 |
| **F6**         | premenovanie (Registry – kľúče a hodnoty, Environment)                      |
| **F3**         | zobrazí textový popis položky / `.reg` zápis hodnoty                        |
| **F5**         | skopírovanie na disk (hodnota → `.reg`, premenná → textový súbor)           |

Stĺpce **Status / Type / Value / Info** sú dostupné ako vlastné stĺpce pluginu
(*Vlastné stĺpce* → `WinCom.Status` atď.), predvolený pohľad ich ponúka automaticky.

### Services

Enter zobrazí formulár so zobrazovaným názvom, cestou k súboru, typom spustenia
(*Automatic / Automatic (delayed) / Manual / Disabled*) a tlačidlami
**Spustiť / Zastaviť / Reštartovať / Pozastaviť / Pokračovať**. Pri zastavení sa najprv zastavia
závislé služby. F7 vytvorí novú službu, F8 službu odstráni.

Príkazy v príkazovom riadku panela (pole nad panelmi):

```
start <názov>      stop <názov>      restart <názov>
pause <názov>      continue <názov>
auto <názov>       delayed <názov>   manual <názov>   disabled <názov>
```

### Startups

Zdroje: `HKCU\...\Run`, `HKLM\...\Run`, `HKLM\...\Run` (32-bit pohľad), `RunOnce` (HKCU/HKLM),
Startup priečinok používateľa a spoločný Startup priečinok. Zapnutie/vypnutie používa rovnaký
mechanizmus ako Správca úloh (`StartupApproved`), takže sa záznam nemaže a dá sa kedykoľvek vrátiť.
Vypnuté položky majú v názve príponu `(disabled)`.

Príkazy: `enable <názov>`, `disable <názov>` (názov s `[umiestnením]` alebo bez neho).

### Registry

Koreňové kľúče sú adresáre, podkľúče sú podadresáre a hodnoty súbory s príponou podľa typu a `.reg` na konci:
`.sz.reg`, `.expand.reg`, `.dword.reg`, `.qword.reg`, `.multi.reg`, `.bin.reg`, `.none.reg` (predvolená hodnota kľúča je `(Default).sz.reg`).
Pripona `.reg` zabezpečí, že skopírovaná hodnota je rovno importovateľný súbor `.reg`.
Zobrazuje sa vždy natívny (64-bitový) pohľad registra.

* **Enter** na hodnote – formulár (názov, typ, údaje). DWORD/QWORD zadávajte desiatkovo alebo ako `0x…`,
  binárne údaje ako hexadecimálne bajty (`01 ff 0a`), MULTI_SZ po jednom reťazci na riadok.
* **F7** – nový podkľúč alebo hodnota (typ sa vyberie vo formulári, prípona v názve typ predvyberie).
* **F8** – zmazanie hodnoty / kľúča (rekurzívne), **F6** – premenovanie.
* **Všetko do jedného `.reg`** – v každom kľúči je na začiatku zoznamu virtuálny súbor `(this key).reg`.
  Jeho skopírovanie (F5) uloží celý kľúč vrátane všetkých podkľúčov a hodnôt do **jedného** súboru `.reg`
  (kým F5 na označenom priečinku skopíruje hodnoty po jednej do stromu súborov).
* **Export** – Alt+Enter na kľúči alebo hodnote (uloží `.reg`), F5 hodnoty na disk (formát `.reg`), alebo
  príkaz `export [súbor.reg]` v príkazovom riadku (exportuje aktuálny kľúč vrátane podkľúčov).
* **Import** – F5 súboru `.reg` z lokálneho panela do panela WinCom, alebo príkaz `import <súbor.reg>`
  (používa `reg.exe import`).

### Environment

`User` = `HKCU\Environment`, `System` = `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment`.
Formulár umožňuje zmeniť názov a hodnotu, zapnúť „Rozbaliteľná“ (`REG_EXPAND_SZ`, napr. `%USERPROFILE%`) a
režim „Zoznam“, v ktorom sa hodnoty oddelené `;` (napr. `Path`) zobrazia po jednej na riadok.
Po každej zmene sa systému oznámi zmena prostredia (`WM_SETTINGCHANGE`). F7 vo vnútri `Environment` ponúkne
výber rozsahu; textový súbor skopírovaný do `User`/`System` vytvorí premennú s jeho obsahom.

### Logs

Strom je podobný Event Vieweru: `Windows Logs` (Application, Security, Setup, System, Forwarded Events) a
`Applications and Services Logs`, kde sú logy zoskupené do priečinkov (napr. `Microsoft\Windows\PowerShell\Operational`).
Log je priečinok s udalosťami – súbory s názvom `2026-10-03 11.29.16 [Error] Zdroj (ID) #záznam.txt`, od najnovších;
stĺpce Status/Type/Value/Info obsahujú úroveň, zdroj, prvý riadok správy a ID.
Zobrazujú sa len zapnuté logy typu Admin/Operational (Analytic a Debug sa vynechávajú ako v Event Vieweri).

* **Enter** na udalosti – okno so správou, **F3 / F5** – text udalosti vrátane XML.
* V každom logu sú virtuálne súbory `(this log).evtx` (celý log do `.evtx`) a `(this log).txt`
  (zobrazené udalosti do jedného textu) – skopírujte ich F5.
* Príkazy: `clear` (vymaže aktuálny log po potvrdení), `export [súbor.evtx]`, `max <n>` (počet zobrazených
  udalostí, predvolene 300), `level all|error|warning` (filter úrovne).
* Jednotlivé udalosti sa mazať nedajú (Windows to neumožňuje). Log `Security` vyžaduje správcu.

## Nastavenia (WinCom.ini)

Nastavenia sa ukladajú do `WinCom.ini` **vedľa pluginu** (`WinCom.wfx` / `WinCom.wfx64`); ak sa tam nedá zapisovať
(napr. Program Files), použije sa `%APPDATA%\WinCom\WinCom.ini`. Súbor sa vytvorí pri prvom spustení s komentármi pri
každej voľbe a po úprave sa načíta pri obnovení panela (Ctrl+R).

Nastaviť ich môžete tromi spôsobmi:

* dialógom – **Alt+Enter** na priečinku pluginu (alebo v koreni pluginu) alebo príkaz `settings` v príkazovom riadku;
* priamou úpravou súboru – príkaz `config` ho otvorí v Notepade, `reload` ho znova načíta;
* príkazmi `max <n>` a `level all|error|warning` v oblasti Logs (uložia sa do súboru).

| Sekcia | Voľba | Význam |
|--------|-------|--------|
| `[Logs]` | `MaxEvents` | max počet zobrazených udalostí (predvolene 300) |
| | `Level` | `all` / `error` / `warning` |
| | `EventIds` | zoznam ID oddelený `;`, `-` na začiatku = vynechať (`7036;7040;-4624`) |
| | `Providers` | zdroje udalostí, rovnaká syntax (`Service Control Manager;-Microsoft-Windows-Kernel-General`) |
| | `MaxAgeDays` | len udalosti mladšie ako N dní (0 = bez obmedzenia) |
| | `ExcludeChannels` | masky kanálov, ktoré sa skryjú (`Microsoft-Windows-*;OAlerts`) |
| | `ShowAnalytic`, `ShowDisabled` | zobraziť aj Analytic/Debug a vypnuté logy |
| | `FormatMessages` | formátovať správu do stĺpca Value (`0` = rýchlejšie) |
| `[Services]` | `ShowDrivers`, `State` | zahrnúť ovládače; filter `all` / `running` / `stopped` |
| `[Startups]` | `ShowRunOnce`, `ShowFolders` | ktoré zdroje zobraziť |
| `[Registry]` | `ShowThisKeyFile`, `AppendRegExtension` | súbor `(this key).reg`; pripona `.reg` pri hodnotách |
| `[Environment]` | `SplitLists` | zoznamy oddelené `;` po jednom na riadok |

## Zostavenie zo zdrojov

Vyžaduje Visual Studio / Build Tools s C++ nástrojmi (MSVC) a Git.

```powershell
build.bat
```

Skript zostaví `WinCom.wfx` (x86) aj `WinCom.wfx64` (x64) a zabalí ich do `dist/WinCom-1.0.0.<N>.zip`,
kde **N je počet git commitov** (ak sú necommitnuté zmeny, počíta sa aj commit, ktorý sa chystá).
Verzia sa zapíše aj do verzie súboru DLL. Ikonu možno znovu vygenerovať cez `tools/make-icon.ps1`.
Jednoduchý test bez Total Commandera: `tests/harness.cpp` (načíta DLL a vypíše obsah oblasti).

## Štruktúra projektu

```
src/main.cpp          export WFX funkcií (FsInit, FsFindFirst, FsExecuteFile, ...) a smerovanie ciest
src/services.cpp      oblasť Services
src/startups.cpp      oblasť Startups
src/registry.cpp      oblasť Registry
src/environment.cpp   oblasť Environment
src/logs.cpp          oblasť Logs (Event Log cez wevtapi)
src/config.*          WinCom.ini a dialóg nastavení
src/reg.*             spoločné funkcie pre register a export .reg
src/form.*            jednoduchý modálny formulár použitý vo všetkých editoroch
src/WinCom.rc/.def    zdroje (ikona, verzia) a zoznam exportov
build.bat             spustí tools/build.ps1 (zostavenie + zip do dist/)
tools/build.ps1       zostavenie a balenie
```

## Známe obmedzenia

* Plugin sa nedá povýšiť sám – operácie vyžadujúce práva správcu zlyhajú, ak TC beží bez nich.
* Zoznam *Startups* nezahŕňa naplánované úlohy ani `Winlogon\Shell/Userinit`.
* Predvolený stĺpcový pohľad pluginu závisí od verzie Total Commandera; ak sa nezobrazí, nastavte
  vlastné stĺpce `WinCom.Status`, `WinCom.Type`, `WinCom.Value`, `WinCom.Info` ručne.
* Presun/kopírovanie medzi rôznymi kľúčmi registra v rámci pluginu nie je podporované (použite export/import `.reg`).
