Jak dodać element menu kontekstowego do Eksploratora Windows dla folderów [zamknięte]

100

Dowiedziałem się, jak dodawać elementy menu kontekstowego prawego przycisku myszy do plików w Eksploratorze Windows, dodając klucze do rejestru. Oznacza to, że mogę kliknąć prawym przyciskiem myszy plik w Eksploratorze i uruchomić niestandardową aplikację dla tego pliku.

Chciałbym zrobić to samo dla folderu, ale nie znalazłem na to (jeszcze) sposobu. Widzę artykuły na temat tworzenia / pisania niestandardowych programów obsługi menu kontekstowego, ale wolałbym tam nie iść.

Znalazłem tutaj artykuł na temat dodawania kaskadowych elementów menu kontekstowego do Pulpitu i do „Komputera” w Eksploratorze, ale to nie działa dla żadnego folderu.

Chciałbym móc dodać moją niestandardową aplikację do menu kontekstowego i umożliwić jej działanie zarówno na plikach, jak i folderach. Czy można to zrobić bez pisania programu obsługi menu kontekstowego?


Rozwiązanie znalazłem w poniższym artykule, w którym opisano, jak to zrobić za pośrednictwem rejestru plików, a także folderów:

Poniższe dwa artykuły zawierają dodatkowe informacje i opcje:

Rozmach
źródło
1
To pytanie jest otwarte od 6 lat ?! Kto zamknął to sześć dni temu?
Andrew,
JEDYNĄ rzeczą, której nie lubię w StackOverflow, są zamykające pytania klaunów lub oznaczające pytania jako niezwiązane z tematem.
Michael

Odpowiedzi:

209

W edytorze rejestracji ( regedit.exe) znajdź:

  • Menu kontekstowe do kliknięcia prawym przyciskiem myszy na folderach w lewym panelu Eksploratora Windows lub na tle katalogu w prawym panelu:

    1. HKEY_CLASSES_ROOT\Directory\Background\shell jeśli jesteś administratorem
    2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell jeśli jesteś zwykłym użytkownikiem
  • Menu kontekstowe do kliknięcia prawym przyciskiem folderów w prawym panelu Eksploratora Windows:

    1. HKEY_CLASSES_ROOT\Directory\shell jeśli jesteś administratorem
    2. HKEY_CURRENT_USER\Software\Classes\directory\shell jeśli jesteś zwykłym użytkownikiem
  • Menu kontekstowe dla dowolnego pliku:

    1. HKEY_CLASSES_ROOT\*\shell jeśli jesteś administratorem
    2. HKEY_CURRENT_USER\Software\Classes\*\shell jeśli jesteś zwykłym użytkownikiem

We wszystkich przypadkach:

  1. dodaj nowy klucz pod shell, nadając mu nazwę tak, jak chcesz nazwać element menu kontekstowego
  2. dodaj nowy klucz do tego klucza, o nazwie command(nazwa obowiązkowa)
  3. edytuj defaultwłaściwość w, commandaby myprogrampath\path\path\executable.exe %1przekazać ścieżkę do pliku i nazwę wybranego pliku do programu niestandardowego

Więcej dostosowań:

  • Dodaj ikonę : dodaj wartość ciągu o nazwie icondla klucza utworzonego w kroku 1 z wartością pasującą do ścieżki zasobu ikony. Możesz również podać argumenty w postaci liczb całkowitych, aby określić, której ikony użyć. Przykład:%SystemRoot%\System32\shell32.dll,3
  • Wyświetlaj tylko poExtended naciśnięciu klawisza Shift : dodaje pustą wartość ciągu o nazwie odpowiadającej kluczowi utworzonemu w kroku 1
  • Dostosuj etykietę pozycji menu : zmień wartość domyślnej wartości klucza utworzonego w kroku 1
  • Zmień lokalizację pozycja menu : dodaj wartość ciągu o nazwie Positionjednego z: Top,Bottom
Jumpjack
źródło
2
HKEY_CLASSES_ROOT\Directory\Background\shellmoże wpływać tylko na kliknięcie prawym przyciskiem myszy w tle katalogu
Amos
21
Powinno być "%1"na wypadek, gdyby ścieżka miała spacje.
Blrp
3
natychmiast. Nie ma nawet potrzeby otwierania nowego okna eksploratora: nowe ustawienia są ładowane po kliknięciu prawym przyciskiem myszy.
Jumpjack
1
wydaje się, że zmienne środowiskowe nie działają Command, prawda?
Jack Lu
14
Odnośnie mojego poprzedniego komentarza: Problem może być ustalona poprzez zastąpienie %1przez %V.
Michael Herrmann
10

Wróciłem i odpowiedziałem na to również w innym temacie, ponieważ nie wydaje się, aby w tym pytaniu było zbyt wiele.

Odkryłem, że najprostszym sposobem jest dodanie wartości ciągu do klucza o nazwie „AppliesTo” i ustawienie jego wartości na „under: {path}”

W moim przykładzie chcę, aby wyglądał tylko na dysku T, więc moja wartość ciągu to „AppliesTo”: „under: T:”.

W C # można to łatwo osiągnąć, wykonując następujące czynności:

RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");

RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");
subNewkey.Close();

newkey.Close();
_key.Close();
Bobby Byrnes
źródło
2
Dziękujemy za dostarczenie przykładowego kodu do zrobienia tego w C #. To niewielka pomoc dla każdego, kto chce to zrobić szybko z poziomu aplikacji.
Ayo I
2
Niestety, wydaje się, że wartość „AppliesTo” nie ma żadnego wpływu na wpis „Katalog \ Tło”. Czy ktoś wie, jak podobne ograniczenia można osiągnąć, klikając prawym przyciskiem myszy tło folderu?
cl0rkster
6

Znalazłem czystsze, łatwiejsze i szybsze rozwiązanie: utwórz plik tekstowy, wypełnij go tymi treściami, zaktualizuj go do swoich potrzeb, zapisz z sufiksem .reg i uruchom go (nie potrzebuje uprawnień administratora, ponieważ uzyskuje dostęp do części rejestru użytkownika ):

Windows Registry Editor Version 5.00

; Setup context menu item for click on right panel:
[HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; HKEY_CURRENT_USER\Software\Classes\directory\Background\shell\MenuItemNameBackground]
;"position"="Bottom"

; -------------------------------------------------------------------------------------

; Setup context menu item for click on folders tree item:
[HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; [HKEY_CURRENT_USER\Software\Classes\directory\shell\MenuItemNamePanel]
;"position"="Top"

W ten sposób możesz również mieć kopię zapasową konfiguracji: po prostu zapisz plik .reg w bezpiecznym miejscu. Jeśli ręcznie edytujesz rejestr po uruchomieniu pliku, kliknij prawym przyciskiem myszy i wybierz opcję „Eksportuj”.

Uważaj na podwójne cofnięcia w ścieżce: \\

Jumpjack
źródło
1

Jedyne dobre rozwiązanie, które naprawdę działa, to: /superuser/1097054/shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other

Dodaj klucze w HKEY_CLASSES_ROOT \ SystemFileAssociations \ your.extension \ shell \ command. Zmodyfikuj ostatni klucz za pomocą polecenia, które chcesz wykonać.

Dla mnie było to:

"C:\Program Files (x86)\GPSBabel\gpsbabel.exe" -r -i gpx -f "%1" -x simplify,count=1000 -o gpx -F "%1.gpx"

Jeśli wyeksportuję to, otrzymam plik .reg:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.gpx\shell\Simplify gpx\command]
@="\"C:\\Program Files (x86)\\GPSBabel\\gpsbabel.exe\" -r -i gpx -f \"%1\" -x simplify,count=1000 -o gpx -F \"%1.gpx\""
Dorian Grv
źródło
1

Otwórz wiersz polecenia [uruchom jako administrator] i wykonaj to polecenie

reg add "HKEY_CLASSES_ROOT\Directory\shell\Refi2\command" /d "powershell.exe -noexit -command Set-Location -literalPath '%V'"
  • -d: wartość do wykonania [nazwa aplikacji exe].
  • -v: tworzy nowy podklucz wewnątrz klawisza polecenia.
  • -f: wymuszenie zastąpienia klucza, jeśli już istnieje.
  • powershell.exe -noexit -command Set-Location -literalPath '% V' zamiast tego możesz określić ścieżkę do swojego exe .

Aby uzyskać więcej informacji na temat większej liczby funkcji uruchom: -

reg add /?
Sahil Shikalgar
źródło