Ikonka w "Mój komputer"

0

Witam! Mam następujący problem: potrzebuję sposobu na dodanie swojego katalogu do folderu "Mój komputer".Czy ktoś ma może jakiś pomysł jak to zrobić? :)

0

Zadanie jest banalnie proste. Trzeba w rejestrze dodać odpowiednie wpisy. Jako, że kwestia nie dotyczy bezpośrednio PASCAL/DELPHI, pokażę to na przykładzie pliku *.REG z Windows XP (działa też na starszych), który nie służy do niczego innego, jak dodawania wpisów w rejestrze.

====================================================

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Explorer\MyComputer\NameSpace\{645FF040-5081-101B-9F08-00AA002F954A}]
@="Folder specjalny"

[HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954A}]
@="Folder Specjalny - tekst tylko dla opisu"
"InfoTip"=hex(2):49,00,6e,00,66,00,6f,00,54,00,69,00,70,00,20,00,66,00,6f,00,\
  6c,00,64,00,65,00,72,00,75,00,00,00
"SortOrderIndex"=dword:00000060
"IntroText"=hex(2):49,00,6e,00,74,00,72,00,6f,00,54,00,65,00,78,00,74,00,20,00,\
  66,00,6f,00,6c,00,64,00,65,00,72,00,75,00,00,00
"LocalizedString"="Folder specjalny"

[HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954A}\DefaultIcon]
@=hex(2):65,00,78,00,70,00,6c,00,6f,00,72,00,65,00,72,00,2e,00,65,00,78,00,65,\
  00,2c,00,30,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954A}\Shell]
@=""

[HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954A}\Shell\Open]
@="Otwórz mój folder"

[HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954A}\Shell\Open\Command]
@="explorer.exe c:\\"

[HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954A}\ShellFolder]
"Attributes"=hex:40,00,00,02
"CallForAttributes"=dword:00000040

====================================================

Po pierwsze musisz wygenerować sobie GUID (Globally Unique IDentifier). W oknie kodu Delphi robi to skrót [CTRL]+[SHIFT]+[G]. Tym numerem zastąp w powyższym pliku wszystkie fragmenty "{645FF040-5081-101B-9F08-00AA002F954A}". To będzie twój światowo-niepowtarzalny numer identyfikacyjny folderu specjalnego.

Oto plik *.REG. Możesz powyższy tekst przekleić do pliku REG i uruchomić. Stworzy Ci to Folder Specjalny w oknie Mój komputer. Po jego naciśnięciu uruchomi się katalog C:.

A teraz przejdźmy do tego, czym co jest [polecam najpierw uruchomić powyższy wpis, a potem przeglądać zawartość rejestru (program REGEDIT), gdyż niektóre dane są zapisane w Unicode (znaki wielobajtowe)].

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Explorer\MyComputer\NameSpace{645FF040-5081-101B-9F08-00AA002F954A}]
@="Folder specjalny"

To dodaje do Mój komputer nową ikonę folderu specjalnego, którego numer GUID jest taki, jak podano. Ta akcja już dodaje ikonę do okna, co prawda ikona ta nic nie robi. Nazwa nie jest tu niezbędna, potrzebny tylko klucz rejestru.

[HKEY_CLASSES_ROOT\CLSID{645FF040-5081-101B-9F08-00AA002F954A}]
@="Folder Specjalny - tekst tylko dla opisu"
"InfoTip"=hex(2):49,00,6e,00,66,00,6f,00,54,00,69,00,70,00,20,00,66,00,6f,00,
6c,00,64,00,65,00,72,00,75,00,00,00
"SortOrderIndex"=dword:00000060 "IntroText"=hex(2):49,00,6e,00,74,00,72,00,6f,00,54,00,65,00,78,00,74,00,20,00,
66,00,6f,00,6c,00,64,00,65,00,72,00,75,00,00,00
"LocalizedString"="Folder specjalny"

Powyższe wpisy definiują twój folder specjalny. Pierwsza linia tworzy klucz dla twego folderu. Druga identyfikuje wpis w rejestrze - nie jest niezbędna, jednak dla porządku warto ją dawać.

InfoTip (w unicode) to chmurka podpowiedzi po najechaniu na twój folder.
SortOrderIndex to kolejność układania w Mój komputer, bo nie będzie to układane literami dysków (bo tu nie ma o tym mowy).
IntroText (w unicode) to opis wydziany w oknie Mój komputer
LocalizedString to nazwa dla tego folderu (dopiero ten wpis definiuje nazwę)

[HKEY_CLASSES_ROOT\CLSID{645FF040-5081-101B-9F08-00AA002F954A}\DefaultIcon]
@=hex(2):65,00,78,00,70,00,6c,00,6f,00,72,00,65,00,72,00,2e,00,65,00,78,00,65,
00,2c,00,30,00,00,00

(Unicode) To definiuję ikonę dla twojego folderu [może być wyrażone np.: w postaci explorer.exe,7 (siódma ikona w pliku exe) lub po prostu c:\ikona.ico]

[HKEY_CLASSES_ROOT\CLSID{645FF040-5081-101B-9F08-00AA002F954A}
Shell]
@=""

To katalog, gdzie będziemy opisywali akcje dostępne na twoim folderze (widoczne w menu podręcznym, gdy folder jest zaznaczony)

[HKEY_CLASSES_ROOT\CLSID{645FF040-5081-101B-9F08-00AA002F954A}
Shell\Open]
@="Otwórz mój folder"

Dla przykładu zdefiniujemy jedną akcję (więc przy okazji będzie ona domyślną. Jeśli w nazwie klucza wyraz "Open" zastąpisz innym wyrazem, na przykład "Akcja_1", możesz definiować dodatkowe akcje. Ta będzie miała widoczny tekst: "Otwórz mój folder".

[HKEY_CLASSES_ROOT\CLSID{645FF040-5081-101B-9F08-00AA002F954A}
Shell\Open\Command]
@="explorer.exe c:\"

Co się ma dziać po wybraniu akcji "Open"? Na przykład uruchomienie explorer.exe z parametrem - otwartym katalogiem (jeśli w ścieżce występują spacje, to ścieżka folderu musi byc dodatkowo brana w cudzysłowy). Można tu uruchomić dowolny inny program.

[HKEY_CLASSES_ROOT\CLSID{645FF040-5081-101B-9F08-00AA002F954A}\ShellFolder]
"Attributes"=hex:40,00,00,02
"CallForAttributes"=dword:00000040

To opis stanu folderu (polecam pozostawić niezmienione lub poeksperymentowac z wartościami). Opis stanów dostepny jest choćby na stronie http://perso.wanadoo.fr/tmcd2/HKCR.htm#Attributes [niektóre stany od Win2k/XP sa nieaktualne].

I tyle - mało roboty, duży opis.

Pozdrawiam.

0
Szczawik napisał(a)

Po pierwsze musisz wygenerować sobie GUID (Globally Unique IDentifier). W oknie kodu Delphi robi to skrót [CTRL]+[SHIFT]+[G]. Tym numerem zastąp w powyższym pliku wszystkie fragmenty "{645FF040-5081-101B-9F08-00AA002F954A}". To będzie twój światowo-niepowtarzalny numer identyfikacyjny folderu specjalnego.

A jaką mam pewność, że nie ma takiego drugiego numeru na świecie?

0

Bo po to skonstruowano taki GUID :) Jest on generowany na podstawie kilku czynników, w tym aktualnego czasu, strefy czasowej, numeru karty sieciowej (choć nie jest konieczna), kilku zmiennych systemowych oraz cząstek liczby losowej. Tak na prawde GUID nie jest wyłącznie dużą zmienną losową, ale efektem działania dosyć skomplikowanego algorytmu.

Na jakimś serwisie internetowym widziałem wyliczenie, że gdyby każdy człowiek na świecie co minutę generował sobie jeden numer, to zaczęły może by się powtarzać bodajże po kilkuset tysiącach lat. Pamiętajmy, że jest tu 2^128 kombinacji, przy czym pewne są zastrzeżone dla członków komitetu, który opracował ten algorytm (w tym Microsoftu), tych nie da się wygenerować - tak stworzono algorytm.

Abstrachując od szacunków - to na prawdę jest numer unikatowy globalnie, przy założeniu, że ktoś inny nie powieli go (na przykład kopiując powyższy przykład) lub nie wpisze sobie go ręcznie. Numery te należy generować! Można pobrać darmowy generator Microsoftu lub korzystać z zaimplementowanych w różne środowiska programistyczne (w tym Delphi). Algorytm jest ten sam.

0

Szczawnik - to sie na artykuł nadaje :)

0

no niezle !!
[browar]
tylko teraz sie zastanawiam czy tak samo mozna dodac ikone jakiegos programu do okna moj komputer czy tylko katalogi
czy ktos wie?

0

Jasne, że możesz dowolny program uruchomić. Nawet ten katalog jest otwierany przez otwarcie programu Explorer.exe z parametrem - ścieżka:
EXPLORER.EXE c:\

Możesz to zamienić na przykład uruchomieniem powiedzmy notatnika:
NOTEPAD.EXE

Może to być cokolwiek innego, nawet nazwa pliku *.bmp, ale musimy ją poprzedzić nazwą programu, który ma to otworzyć. Jeśli nie podamy pliku wykonywalnego, system wyświetli podczas otwierania niemiły komunikat.

Polecam tez posługiwanie się całymi ściezkami do plików wykonywalnych oraz zmiennymi środowiska, np.: %SystemRoot% (katalog Windows, nie koniecznie będzie to c:\Windows, bo ktoś mógł zainstalować gdzieś indziej swój system). Poprawnym więc będzie wyrażenie:
%SystemRoot%\EXPLORER.EXE c:\

Ważne jest to, że nie można dać nazwy dowolnego pliku, a jedynie jakiś wykonywalny. Jeśli chcemy otworzyć inny format pliku, to musimy podać ścieżkę do programu, który go otworzy.

Jeśli komuś nie działa plik REG, to zadbajcie o to, by cała nazwa klucza (ograniczona nawiasami [ oraz ] ) znajdowała się w jednej linii - uroki zawijania wierszy na forum :).

0

Dzięki za pomoc!. :)

0

Szczawik: Na prawdę to się nadaje na przynajmniej wskazówkę w FAQ. Artykuł może niekoniecznie, ale rozbudowana wskazówka zdecydowanie. A jest to przydatna rzecz i szkoda, by Twoja praca zaginęła gdzieś w szybko rozrastającym się forum Delphi :]

0
Szczawik napisał(a)

Jasne, że możesz dowolny program uruchomić. Nawet ten katalog jest otwierany przez otwarcie programu Explorer.exe z parametrem - ścieżka:
EXPLORER.EXE c:\

a jak zrobić żeby folder się nie otwierał w nowym oknie

1 użytkowników online, w tym zalogowanych: 0, gości: 1