
[Tutorial]Windows Shell Integration
I. In primul rand haideti sa vedem cum se face manual, iar apoi sa trecem la o implementare in c#.
Start->Run->regeditApoi dati browse pe
HKEY_CLASSES_ROOT. Dupa cum se observa primele subkey din
HKEY_CLASSES_ROOT incep cu
. (punct), asta inseamna ca ele sunt extensii.
Acum haideti sa ne cream propria extensie, sa zicem
.hpd . Pt a face acest lucru click dreapta pe
HKEY_CLASSES_ROOT si new key, setati numele .hpd si gata.

Acum fiecare keye are un registru
(Default) inca de la creare. Acum click dreapta pe
(Default) si alegeti
Modify..., acum in fieldul
Value Data scrieti un string ( reprezinta numele clasei, eu am ales "Tutorial" ).
Dupa toate astea de extensia
.hpd este "responsabila" clasa care ati trecuto la
(Default).
II. Crearea clasei: Click dreapta pe
HKEY_CLASSES_ROOT -> New -> Key. Aceast key pe care tocmai l-ati creat trebue sa aiba acelasi nume cu stringul pus la
(Default) in cadrul extensiei
.hpd (in cazul meu "Tutorial").
a. Setarea unei icoane pt extensia creata.
Click dreapta pe clasa ( in cazul meu "Tutorial") New->Key si setati numele "DefaultIcon", apoi dublu click pe registrul (Default) si la "Value Data" setati pathul catre o icoana (scris in ghilimele).
b. Open
Acum vom seta pathul catre un executabil care va rula atunci cand se deschide fisierul cu extensia .hpd (Deobicei acelui executabil i se trimte parametrul "%1" care returneaza calea fisierului curent, spre exemplu daca dati dublu click pe d:/lol.hpd si se trimite argumentul "%1" catre programul principal acel argument va returna "d:/lol.hpd". Un exemplu mai concret ar fi acela al fisierelor .txt, in momentul cand se face dublu click pe un .txt se porneste notepadul care deschide si afiseaza fisierul a carui cale a fost returnata de "%1").
Creati urmatoarele Key:
- HKEY_CLASSES_ROOT\Tutorial\shell
- HKEY_CLASSES_ROOT\Tutorial\shell\open
- HKEY_CLASSES_ROOT\Tutorial\shell\open\command
Acum modificati valuarea (Default) a SubKey-ului "HKEY_CLASSES_ROOT\Tutorial\shell\open\command" astfel incat in fieldul "Value Data" sa introduceti pathul si argumentele care doriti. Spre exemplu eu am ales celebrul "cmd.exe".

Dupa ce ati facut toate cele de mai sus creati un fisier .hpd (deobicei cu notepad, save as: nume.hpd) si dati dublu click pe el. Veti observa ca se deschide cmd-ul avand pathul setat catre directorul unde se afla fisierul .hpd.
Acum sa incepem cu implementarea in c#:
public void SetReg()
{
RegistryKey rkey = Registry.ClassesRoot.CreateSubKey(".hpd");
rkey.SetValue("", "Tutorial");
rkey = Registry.ClassesRoot.CreateSubKey("Tutorial\\DefaultIcon");
rkey.SetValue("", "c:\\icoana.ico");
rkey = Registry.ClassesRoot.CreateSubKey("Tutorial\\shell\\open\\command");
rkey.SetValue("", "cmd.exe"");
}
Primul parametru al functiei SetValue reprezinta numele registrului din subkey-ul curent iar al 2-lea parametru reprezinta valoarea pe care o va lua registrul din parametrul 1. Pt a modifica acel registru (Default) trebuie sa specificam ca numele acestuia este un string gol adica "".
Astept feedback si daca nu ati inteles ceva spuneti si va ajut cu mare placere