Twój podstawowy przegląd procesu znajduje się w this MSDN article. Główne części są na dole listy:
ProgID (zasadniczo, klucz rejestru typ pliku) jest to, co zawiera ważnych właściwości typów plików, takich jak ikony, opis i elementy menu kontekstowego, w tym aplikacji używanej po dwukrotnym kliknięciu pliku. Wiele rozszerzeń może mieć ten sam typ pliku. Że mapowanie odbywa się w następnym etapie:
- Zarejestruj rozszerzenie nazwy pliku dla typu pliku
Tutaj ustawić wartość rejestru dla rozszerzenia, ustawienie tego rozszerzenia jest typ pliku do ProgID ciebie utworzone w poprzednim kroku.
Minimalna ilość pracy wymaganej do otwarcia pliku przez aplikację polega na ustawieniu/utworzeniu dwóch kluczy rejestru. W tym przykładzie plik .reg
utworzę typ pliku (blergcorp.blergapp.v1
) i skojarzę z nim rozszerzenie pliku (.blerg
).
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command]
@="c:\path\to\app.exe \"%1\""
[HKEY_CURRENT_USER\Software\Classes\.blerg]
@="blergcorp.blergapp.v1"
Teraz prawdopodobnie chcesz to zrobić programowo. Aby być całkowicie koszernym, możesz sprawdzić istnienie tych kluczy i odpowiednio zmienić swoje zachowanie programowe, szczególnie jeśli chodzi o kontrolę nad popularnym rozszerzeniem pliku. Jednak cel można osiągnąć, ustawiając te dwa klucze za pomocą funkcji SetValue.
Nie jestem pewien dokładnej składni C++, ale w C# składnia wygląda tak:
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command", null, @"c:\path\to\app.exe \"%1\"");
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.blerg", null, "blergcorp.blergapp.v1");
Oczywiście można ręcznie otworzyć każdy klawisz sub, ręcznie utworzyć ProgID i przedłużenie podklucz, i następnie ustaw wartość klucza, ale miłą rzeczą w funkcji SetValue
jest to, że jeśli klucze lub wartości nie istnieją, zostaną automatycznie utworzone. Bardzo przydatny.
Teraz szybkie słowo o tym, którego ula użyć. Wiele przykładów skojarzeń plików w Internecie, w tym w MSDN, pokazuje, że klucze te są ustawione na HKEY_CLASSES_ROOT
. Nie polecam tego robić. Ta gałąź jest połączonym, wirtualnym widokiem HKEY_LOCAL_MACHINE\Software\Classes
(ustawienia domyślne systemu) i HKEY_CURRENT_USER\Software\Classes
(ustawienia dla każdego użytkownika) i zapisywane w dowolnym podkluczu w ulu są przekierowywane na ten sam klucz w HKEY_LOCAL_MACHINE\Software\Classes
. Teraz nie ma bezpośredniego problemu z tym, ale możesz napotkać ten problem: Jeśli napiszesz do HKCR (przekierowanego do HKLM), a użytkownik określił te same klucze o różnych wartościach w HKCU, wartości HKCU będą miały pierwszeństwo. Dlatego twoje zapisy się powiodą, ale nie zobaczysz żadnych zmian, ponieważ ustawienia HKEY_CURRENT_USER
mają pierwszeństwo przed ustawieniami HKEY_LOCAL_MACHINE
.
Dlatego należy wziąć to pod uwagę przy projektowaniu aplikacji. Teraz, po drugiej stronie, możesz napisać tylko do HKEY_CURRENT_USER
, co pokazują moje przykłady tutaj. Jednak ustawienie powiązania plików zostanie załadowane tylko dla bieżącego użytkownika, a jeśli aplikacja została zainstalowana dla wszystkich użytkowników, aplikacja nie uruchomi się, gdy ten inny użytkownik otworzy plik w systemie Windows.
To powinno być porządnym podkładem do tego, co chcesz zrobić. Dla dalszego czytania Proponuję
I zobacz także moją podobną odpowiedź na podobne pytanie:
Aby edytować klucz (domyślny), należy użyć: @ = "c: \\ ścieżka \\ do \\ app.exe \ "% 1 \" " Uwaga: doble" \\ " – Fraga
Uważam, że dodanie tych elementów rejestru w kodzie zastąpi wszystkie istniejące z innych aplikacji. Lubię kopać moje kopie bez zastępowania istniejących. -the pozycje używają dodatkowych kluczy, takich jak "OpenWithList". Czy muszę je ręcznie tworzyć, jeśli istnieje istniejący klucz, czy jest prostsza metoda? A może lepiej zapytam o to w moim własnym pytaniu SO? –
Odpowiadając na moje własne pytanie: wymyśliłem to. Jeśli potrzebujesz odpowiedzi, skieruj mnie do odpowiedniego pytania SO, a ja go wypełnię. –