Pokaż wyniki 1 do 3 z 3

Temat: Edytujemy menu kontekstowe Windows

  1. #1
    Zarejestrowany
    Jul 2008
    Postów
    96

    Domyślnie Edytujemy menu kontekstowe Windows

    Witam. Przedstawię prosty skrypt oraz krótki opis, dla początkujących użytkowników, w jaki sposób możemy dowolnie rozbudować menu kontekstowe Windows (a ściślej to które rozwija nam się po naciśnięciu prawym klawiszem myszy na dowolny katalog).

    Dlaczego skrypt vbs? Celem jest to, aby z tego skryptu mógł skorzystać każdy, nie zależnie od poziomu zaawansowania, nie będzie nam więc potrzebny żadny interpretator, a tym bardziej kompilator - wszystko to zapewni nam sam system. Jedyne czego potrzebujemy to systemowy notatnik i kilka chwil wolnego czasu. W ten prosty sposób rozbudujemy swoje menu o dowolną pozycję, bez potrzeby instalowania jakichkolwiek aplikacji. Poniżej zamieszczam skrypt (trochę na szybko pisany - ale działa ) I za chwilę wyjaśnię co i jak.

    Kod:
    Option Explicit
    'CME by Deelait
    On error resume next
    	Dim q
    	Dim d
    	Dim key
     	Dim ex
     	Dim t 
    	Dim ctr
    	ctr = - 1
    	msgbox "Witaj w programie CME. Skrypt pozwoli Ci na nie ograniczony " & chr(34) & "upgrade" & chr(34) & " menu kontekstowego Windows. Powodzenia! ",vbExclamation,"CME"
    	ex = msgbox("Usunąć menu dodane przez WinAmp?",64+vbyesno,"CME")
    		If ex = vbyes then 
    			Dim winAmp
    			Set winAmp = CreateObject("WScript.Shell")
    			winAmp.RegDelete "HKEY_CLASSES_ROOT\Directory\shell\Winamp.Bookmark\command\"
    			winAmp.RegDelete "HKEY_CLASSES_ROOT\Directory\shell\Winamp.Bookmark\"
    			winAmp.RegDelete "HKEY_CLASSES_ROOT\Directory\shell\Winamp.Enqueue\command\"
    			winAmp.RegDelete "HKEY_CLASSES_ROOT\Directory\shell\Winamp.Enqueue\"
    			winAmp.RegDelete "HKEY_CLASSES_ROOT\Directory\shell\Winamp.Play\command\"
    			winAmp.RegDelete "HKEY_CLASSES_ROOT\Directory\shell\Winamp.Play\"
    		end if
    	memoryUP
    	q(ctr) = msgbox("Dodać pozycję" & chr(34) & " Uruchom panel sterowania" & chr(34) & " ?",64+vbyesno,"CME")
    		If q(ctr) = vbyes then 
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","Uruchom panel sterowania")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_00\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_00\command\", "rundll32.exe shell32.dll,Control_RunDLLAsUser"
    			memoryUP
    		end if
    	q(ctr) = msgbox("Dodać pozycję" & chr(34) & " Otwórz w nowym oknie" & chr(34) & " ?",64+vbyesno,"CME")
    		If q(ctr) = vbyes then 
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","Otwórz w nowym oknie")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_01\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_01\command\", "Explorer %1"
    			memoryUP
    		end if
    	q(ctr) = msgbox("Dodać pozycję" & chr(34) & " Opcje folderów" & chr(34) & " ?",64+vbyesno,"CME")
    
    		If q(ctr) = vbyes then 
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","Opcje folderów")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_02\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_02\command\", "rundll32.exe shell32.dll,Options_RunDLL 0"
    			memoryUP
    		end if
    	q(ctr) = msgbox("Dodać pozycję" & chr(34) & " Eksploruj CD-ROM" & chr(34) & " ?",64+vbyesno,"CME")
    		If q(ctr) = vbyes then 
    			t =  InputBox("Podaj literę dysku dla CD-ROM","CME","F")
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","Eksploruj CD-ROM")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_03\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_03\command\", "Explorer.exe /e,"+ t + ":"
    			memoryUP		
    		end if
    	q(ctr) = msgbox("Dodać pozycję" & chr(34) & " Wyloguj" & chr(34) & " ?",64+vbyesno,"CME")
    		If q(ctr) = vbyes then 
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","Wyloguj")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_04\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_04\command\", "shutdown /l" 
    			memoryUP
    		end if
    	q(ctr) = msgbox("Dodać pozycję" & chr(34) & " Wyłącz komputer" & chr(34) & " ?",64+vbyesno,"CME")
    		If q(ctr) = vbyes then 
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","Wyłącz komputer")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_05\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_05\command\", "shutdown -s -t 1" 'gdzie 1 to czas (w sek.) do wyłączenia komputera
    			memoryUP
    		end if
    	q(ctr) = msgbox("Dodać pozycję" & chr(34) & " Uruchom w oknie MS - DOS" & chr(34) & " ?",64+vbyesno,"CME")
    		If q(ctr) = vbyes then 
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","Uruchom w oknie MS-DOS")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_05\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_05\command\", "cmd.exe /k pushd %1"
    			memoryUP
    		end if
    	ex = vbYes
    	Do While ex = vbYES
    	ex = msgbox("Koniec propozycji :-) Czy chcesz utworzyć własną pozycję?",64+vbyesno,"CME")
    		If ex = vbyes then 
    			d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","")
    			Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_0" & ctr &"\", d(ctr)
    			d(ctr) = InputBox("Edytuj polecenie nowej pozycji","CME","")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_0" & ctr &"\command\", d(ctr)
    			memoryUP
    		end if
    	loop
    	msgbox "Utworzono " & ctr & " nowych pozycji!",64,"CME"
    	msgbox "Program CME nic więcej nie zaoferuje :-( Przynajmniej na razie.",64,"CME"
    
    Private sub MemoryUP
     	ctr=ctr + 1
    	reDim q(ctr)
    	reDim d(ctr)
     	reDim key(ctr)
    end sub
    Jeżeli nie chcesz - nie musisz wiedzieć o co biega, wystarczy że przekleisz powyższy skrypt do notatnika i zapiszesz z rozszerzeniem vbs. Teraz wystarczy już uruchomić skrypt i odpowiadać na pytania prostego kreatora. Co możemy zrobić?
    A no, usunąć menu dodane przez WinAmpa (tak wielu osobom to przeszkadza), dodać jedną z 6 proponowanych pozycji
    (Uruchom panel sterowania, Otwórz w nowym oknie, Opcje folderów, Eksploruj CD-ROM, Wyloguj, Wyłącz komputer oraz
    Uruchom w oknie MS-DOS) a także dodać dowolną ilość własnych pozycji i poleceń.

    Całe działanie skryptu opiera się na edytowaniu kluczy rejestru, który to właśnie przechowuje informacji odpowiadające
    budowie menu (dla bardziej zainteresowanych - możemy edytować / usunąć polecenia otwórz, czy wyszukaj, a nawet dodać
    specjalne menu tylko i wyłącznie dyskom w oknie Mojego komputera).

    Jak budować własne polecenia? Mogą to być dowolne polecenia powłoki czyli np "shutdown -s -t 1" które spowoduje wyłączenie
    komptera, chcąc go zrestartować musielibyśmy wpisać "shutdown -r -t 1". Jak łatwo się domyśleć, mając możliwość
    przypisania danej pozycji w menu dowolnego polecenia powłoki, możemy zrobić praktycznie wszystko. Chcesz jednym kliknięciem
    wyłączyć firewall? Nic prostszego, wystarczy znać odpowiednie polecenia.

    Ostatnie pytanie CME, daje właśnie możliwość dodania dowolnej pozycji, najpierw zostaniemy poproszeni o podanie etykiety (czyli
    napisu który będzie widoczny w menu) wpisujemy dla przykładu "Wyłącz Firewall". Kolejnym krokiem będzie podanie polecenia, w tym przypadku
    będzie to "netsh firewall set opmode mode = DISABLE". Klikamy okej, kończymy działanie skryptu i możemy oglądać efekty. Proste?
    Jeżeli nie mieliśmy styczności z wierszem poleceń, możemy stworzyć pozycję menu której zadaniem będzie jedynie uruchomienie dowolnej aplikacji. Wystarczy w poleceniu podać pełną ściężkę dostępu do aplikacji wraz z nazwą pliku wykonalnego. Jeżeli program znajduje się w katalogu Windows, wystarczy podać samą nazwę pliku np msinfo32.exe (informacje o systemie) czy też calc.exe (kalkulator).

    trochę się spieszę więc CDN...

    Oki, oprócz poleceń powłoki oraz uruchamiania aplikacji (pamiętajmy że aplikacje możemy uruchamiać z parametrami - ale o tym może później), mamy możliwość skorzystania z rundll32.exe (dla zainteresowanych). Program ten umożliwia wykonanie dowolnej funkcji systemowych bibliotek (dll). Nie będę się rozpisywał na ten temat, listę gotowych poleceń (np. odświeżenie pulpitu, uruchomienie dowolnego cpl, zamiania klawiszy myszy itd) znajdziemy w sieci.

    Mam nadzieję że komuś się to przyda, skrypt jest absolutnie bezpieczny, nic nie zepsujemy, jeżeli ktoś jednak się obawia i chciałby wrócić do punktu wyjścia, należy wcześniej zrobić kopię zapasową rejestru (uruchom -> regedit -> plik -> eksportuj)


    Lecimy dalej. Jezeli ktos chce rozbudowac sobie skrypt, wystarczy sekwencyjnie wkleić ten fragment

    Kod:
    q(ctr) = msgbox("Dodać pozycję" & chr(34) & " etykieta" & chr(34) & " ?",64+vbyesno,"CME")
    	If q(ctr) = vbyes then 
    		d(ctr) = InputBox("Edytuj etykietę nowej pozycji","CME","proponowana etykieta")
    		Set key(ctr) = CreateObject("WScript.Shell")
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_0" & ctr &"\", d(ctr)
    			key(ctr).RegWrite "HKEY_CLASSES_ROOT\Folder\shell\menu_0" & ctr & "\command\", "polecenie"
    		memoryUP
    	end if
    Coś ekstra? Możemy również ustawić aby dana pozycja była rozwijana w menu dysków, a nie folderów. Wystarczy zamienić domyślny klucz

    HKEY_CLASSES_ROOT\Folder\shell
    na
    HKEY_CLASSES_ROOT\Drive\shell

    cdn...
    Ostatnio edytowane przez ⌂⌂⌂ : 11-13-2008 - 22:38
    delete (z ang. skasuj) - w programowaniu obiektowym operator niszczący obiekty utworzone za pomocą operatora new (bądź dowolny obiekt, którego adres można pobrać).

  2. #2
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Sprytne ⌂⌂⌂, jak częściej siedziałem na windzie to ręcznie tam grzebałem.
    ***********
    * markossx *
    ***********

  3. #3
    Zarejestrowany
    Oct 2008
    Skąd
    W Sieci !!!
    Postów
    282

    Domyślnie

    Ciekawe...Ja grzebłem raz i wiecej sie nie włączył dlatego sie opanowalem i nie grzebie dalej jak w folderze moj komputer...LoL
    "Wszystkie komputery PC są kompatybilne, ale niektóre są kompatybilniejsze od innych... Twój jest zawsze mniej kompatybilny..."

Podobne wątki

  1. menu kontekstowe
    By GSG-9 in forum Windows
    Odpowiedzi: 3
    Autor: 07-12-2008, 12:46
  2. Windows XP
    By Melon in forum Newbie - dla początkujących!
    Odpowiedzi: 4
    Autor: 04-08-2008, 23:36
  3. Odpowiedzi: 4
    Autor: 12-17-2007, 20:05
  4. Odpowiedzi: 3
    Autor: 09-09-2007, 14:39
  5. dodawanie skrótu do menu kontekstowego
    By pierzu in forum Windows
    Odpowiedzi: 0
    Autor: 02-09-2007, 12:38

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj