[Win, C++] Własne rozszerzenie pliku.pdf
(
925 KB
)
Pobierz
[Win, C++] Własne rozszerzenie pliku
Win,C++Własnerozszerzenie pliku
WieleaplikacjiktórepoiadająwłaneroereniaplikówmająciekawąunkcjonalnodOtóżgdy
kliknieidwukrotnienaplikodanymroereniutootwieranyjetonwokrelonejaplikacji
Prykładowoplik
*.txt
jest odczytywany przez notatnik. Jak oiągnądcotakiego?prawajet
stosunkowo prosta :)
Jaktosiędzieje?
PrecieżniewłącyplikudanymiPMuibydwywołanaaplikacjaktórajetpoinormowanao
otwieranymplikuJakytempotpujewprypadkupróbyotwarciaplikudanymi?prawdza
rejestr
Tamąapianeinormacjeoroereniachoraotymjakpotpowadwprypadkach
próbyotwarcia
Poranawizytęwrejestrze:)
RejetrjettonajwikymietnikwWindowie– głoąłowaprecytanekiedypreemniew
Internecie. MimotojettotakżebardociekawemiejceiródłowielucennychinormacjiMy
dodamywłaneZajryjmywicdorejetru)
WMenutartwybieramy„Uruchom”wpiujemy„regedit”iatwierdamyWVicie(prepraama
ormniewiemjaktoodmienidP) i nowszych windowsach wystarczy na pasku do wyszukiwania
wpiadrekomąraitamtądtowłącyd. UruchomiinamedytorrejetruNajlepiejuruchomid
go jako Administrator. Jakwidadjetkilkagłównychklucy
Nas interesuje klucz
HKEY_CLASSES_ROOT
Włanie tam najdują i inormacje na temat
roereoplików Pryjryjmyiprykładoworoereniu
*.txt
(chcetomożewybradinne)
Win,C++Własnerozszerzeniepliku
utor:rtur„Mrowqa”Jamro
Strona 1
Win,C++Własnerozszerzenie pliku
Odszukajmy zatem klucz
.txt
Klikamynaniegoipatrymynawartoddomylną
Jakwidadjettociągnaków „txtile”Onjetważnyretananieintereuje)ukamyatem
nowego klucza o nazwie
txtfile
wklucugłównym
HKEY_CLASSES_ROOT
(cylijakby„obok”
klucza
*.txt
). MożeużydopcjiukajniżrcnietorobidPZnalelimyimamytakieoto
drzewko:
NabdieintereowaddrewkoklucyanaconenaobrakuZnowuprawawartociami
domylnymi)Objanicooneonacająwkonkretnychpodklucach Użyłem*XXXoraext
dlategobotewartociależąodroereniaktórymiaktualniezajmujemy :)
Klucz
Znaczenie
<ext>
Krótki opi pliku wykorytywany pre ytem Prykładowo
„Dokumenttektowy”
<ext>\DefaultIcon
cieżkadoikonyPlikioroereniu*XXXbdąpredtawianea
pomocątejikonyStandardowe rozszerzenie pliku z ikonąto*ico
Niemniejjednakmożeonainajdowadw plikach takich jak *.exe
cy*dllWtedynależypodadcieżkdotegoplikupotemprecinek
i po nim numer ikony (która to ikona w aobach pliku)
Prykładowo„C\Program Files\Nasz program\nasz programexe5”
Uwaga!Niemożebydpacjimidycieżkądoplikuprecinkiem
cylicbą
<ext>\shell
Nawa jednego podklucy jet to domylnie wybierana gdy
podwójnieklikniemyLPMnaplikoroereniu*XXX
TektwywietlanynalicierowijanejgdynacinieiPPMnapliko
roereniu*XXXZnak&(ampreand)tawiaipredjednyme
nakówPowodujeonpodkrelenietegonakuiutawieniegojako
domylnego(tnjakgoklikniemynaklawiaturetoautomatycnie
jest wybierana ta opcja). Jeliwartodjetputaotanieużyta
wartoddomylna(npdlakluca„open”jetto„Otwór”)
<ext>\shell\<tryb>\command
Tutkwicałaitotaproblemu)Wartoddomylnategoklucajet
to ablon jaki jet wyyłany pod lini poleceo W naym
Win,C++Własnerozszerzeniepliku
utor:rtur„Mrowqa”Jamro
Strona 2
<ext>\shell\<tryb>
Win,C++Własnerozszerzenie pliku
prypadkubdieto
”C\()\naprogramexe””%1”
Cyli„włącenie”naegopliku*XXXpowodujetaknaprawd
wywołanienaegoprogramuparametrem %1. Ale co to te %1?
Oznacza on cieżkpliku*XXXktóry„włącamy”!Wytarcywic
dopiadodpowiednikawałekkoduktórytenparametrodbiere!
Użyłem
<tryb>
zamiast
open
prawatkwiwtymżetychtrybów możemyobierobidilechcemy!
Jednakwupełnociwytarcynamtenjeden– open. Prykładowyobraekwielomatrybami
To w cerwonejjanejramcetowytkietrybyjakiemaplik*txtMożemydopiadwłane(ob
cerwonaciemnaramka)!Mogąioneodwoływaddonpnaegoprogramu!)Wielonymkółku
widadikonkplikutektowegoWrejetremożemyjąmienid)!Jece jedna warta uwagi rzecz
toawartodpomaraocowejelipyątampropoycjeprogramówprektóremożnaotworyd
danyplikytemnapodtawierejetruamobietlitrobi
Rejestrujemywłasnerozszerzenie
Napodtawiepowyżychinormacjijetemywtaniearejetrowadwłaneroereniew
ytemieMyrobimyobietorcnieBdietokrótkoopianeponieważwikodinormacjijet
awartawyżej)MożnatorobidtakżekorytającWinPIbądwplikuintalacyjnym– co jest
raczej zalecanePrecieżnierobimypliku„CytajTo!txt”wktórymkrokpokrokukażemy
użytkownikowirejetrowadnaegoroerenianieprawdaż)?WicdodiełaP!
JakapewnedążyłeauważydtandardoweroereniakładająitrechnakówTonie jest
wymógMyobierobimypiecionakowePZałóżmyżebdieto
*.myext
(od
my ext
ension).
Uwaga!
bymócedytowadrejetrtrebaEdytorRejetruwłącydjakoadminitratorOtwieramy
atemgłównykluc
HKEY_CLASSES_ROOT
i dodajemy tam nasz podklucz – nazwany
.myext
.
Jako jego wartodgłównąmuimywpiadjaki
unikalny
(tnniepowtaralny)ciągnakówJeliby
itniałjużtakikluctotak jakbymypotanowili wykorytadobługinnegoroereniaategonie
chcemy :). Mywpiemyobie”My_extension_unique_string”Wrecywitociwytarcyżewtym
tringuawreijakiekrótkieinormacjeonaejaplikacjimałejetprawdopodobieotwo
powtórenia)Zobacmycomamy
Win,C++Własnerozszerzeniepliku
utor:rtur„Mrowqa”Jamro
Strona 3
Win,C++Własnerozszerzenie pliku
Jakwidadnadnaymroereniemnajdujeiinne– jeszcedłużePNiemuimyiogranicad
dotrechnakówDobraterarobimykolejnyklucotakiejamejnawiecowartoddomylna
popredniegoklucacyliwtymprypadkutobdie”My_extenion_unique_tring”Klucmai
najdowadnarówni
.myext
cyliwklucugłównym
HKEY_CLASSES_ROOT
. Zakładamytera
takie drzewko kluczy:
Niebdpowtarałjeceraconacąkonkretnewartocidanychklucy– to jest bez sensu.
Zerknijwgórnatabelk– tammaobjanienieZanacyłemjecenaobrakuwartoddomylną
podklucza
command
Jatupreadiłemcudyłowami Stawia i je wtedygdywcieżceą
pacjeChodiotożeąoneogranicnikamiparametruJeliwparametreniemapacji– nie
trebaujmowadgowcudyłów(cojarobiłem)– to w niczym nie przeszkadza). Jest tam zapisane:
”C:\my_app\my_app.exe”
”--shell”
”%1”
WycególniłemobietenrodkowyparametrCoononaca?Dlaytemu– nicZrobilimyobie
todlaiebie)Gdyktobdie„włącał”plik
*.myext
popreytem(tnniewcytującgo
normalniewprogramie)bdiemyotympowiadomienipredodatkowyparametr
––shell
:).
WcaleniemuitegododawadChciałemtylkopokaad żetakwolnoP
CzasodpalićnaszeIDE;)
Wreciedobrnlimydotegomomentu!)NicinnegotylkoicieydcoP?Wicklawiatura do
rąk (aracejrce naklawiaturP)iklepadkodD
Jak zapewne wiesz, funkcja
main
matakąorm
int
main();
Poiadaonatakżeinnąorm
int
main(
int
argc,
char
* argv[] );
Win,C++Własnerozszerzeniepliku
utor:rtur„Mrowqa”Jamro
Strona 4
Win,C++Własnerozszerzenie pliku
Teraprawacoonacająteargumentypotregawceoobyapewnepowiedążematoco
wpólnegoparametramiwywołaniaprogramu– imająracj)
argc
tokrót od Argument Counter
(angLicnikargumentów)Jaknawamówi– jettomiennaprechowującalicbpryłanych
argumentówdounkcji
argv
jettokrótodrgumentVector(angWektorargumentów)Jetto
tablica wkaników (ale nie odwrotnie!) wkaujących na C-tringi bdące parametrami (cyli
argumentami)wywołaniaaplikacji Uwaga! Parametr o indeksie 0
toawerelatywnacieżka
do
wywołanejaplikacjiRelatywnacylijaknpwywołamyjąpodwierapoleceojako”my_app”
(możebydnawetbeexe!)toparametrprełanydoaplikacjitobdiewłanietocowpialimyw
wierupoleceocyliwnaymprypadku”my_app”)
JakwidikodbdieprotywicnapiegoaCiebie(P)
int
main(
int
argc,
char
* argv[] )
{
if
( argc == 3 )
// *
{
if
( strcmp( argv[ 1 ],
"--shell"
) == 0 )
// jeśli wywołanie "systemowe"
{
// to wczytujemy plik, jego ścieżka to argv 2 :)
}
}
else
//...
}
Dlaczego
argc
ma byd równy 3? Jeli ytem wywoła naą aplikacj wywoła ją trema
argumentamirelatywnacieżkaprogramu”--hell”oracieżkaotwieranegopliku–
my sami to
okrelilimy w rejetrze
. Funckja
strcmp
porównujeokreloneC-tringiJeliąoneidentyczne
wracaero”Nodobraalecemupoprotunieużydoperatora==?”OdpowiedjetprotaGdyby
napiał
if
( argv[ 1 ] ==
"--shell"
)
TowtedytowyrażenieawebybyłoaływeDlacego?Otóżjettoporównanie
adreów
C-
tringówjakwiadomodwa
osobne
ciąginakówniemogąinajdowadwjednymmiejcu
(Pomieciłbydwakilogramyjabłek w jednym? :P).
NotobybyłonatyleNiejettotakietrudnecoP?Wrejetreprytymapewnedaitam
apiadwieleinnychinormacjiNaInternecieniemogłemnaledotyminormacjiiwytkocoo
rejetrepietoceremówiąc„amodkryłem”dlategojettrochubogowdodatkowe
cegółyPMimożerejetrjetnajwikymmietnikiemwWindowietocaemmożnaniego
wygrebadciekaweinormacjeP
rtykułmożebyddowolniekopiowanyiropowechnianywcałocibądcciPrytekcie(nawet
modyikowanym!)należyamiecidjegopochodenie(autora)
utorrtur„Mrowqa”Jamro
Kontakt: artur-jamro@wp.pl
Win,C++Własnerozszerzeniepliku
utor:rtur„Mrowqa”Jamro
Strona 5
Plik z chomika:
Iant
Inne pliki z tego folderu:
[WinAPI, C++] Obsługa Task Baru (Paska Zadań).pdf
(1141 KB)
[Win, C++] Własne rozszerzenie pliku.pdf
(925 KB)
Inne foldery tego chomika:
Aplikacje (exe)
Beta, testy
Biblioteki
Kody projektów
Zgłoś jeśli
naruszono regulamin