VB - 20. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

VB - 20. lekceVB - 20. lekce

 

VB - 20. lekce

Google       Google       21. 7. 2005       20 066×

20.1 Soubory s nastavením .ini
20.2 Šifrování pomocí XOR
20.3 Domácí Úkol
20.4 V další lekci

20.1 Soubory s nastavením .ini

Pokud chcete tvořit plnohodnotné aplikace, tak se bez těchto souborů obejdete jen těžko, soubory .ini si totiž pamatují mnohé nastavení a nejen to. Do souborů ini můžete ukládat jakékoliv textové údaje, na které si vzpomenete, například i různé jazykové modifikace vašeho programu, což je výhodné, pokud se vám překlad nechce psát přímo do kódu, zaprvé je to nepraktické a zadruhé to znemožňuje tvorbu dalších jazykových modifikací, na které vy nebo váš tým nestačí. Takto může vypadat kousek kódu ze souboru s jazyky. Toto je konkrétně z mého překladu programu WinASO.


[Font]
Name=MS Sans Serif


[Main]
Title=WinASO Optimalizátor Registrů
MenuHelp=Pomoc
Version=Verze 2.0.5
Register=Registrovat
LangError=Chyba: Nenalezen soubor "Language.ini"
TrialVersion= (Zkušební Verze)


[Clean Registry]
Title=Čistič Registrů
Description=Opraví a vyčistí registry.
OptionTitle=Prosím zvolte si možnosti čištění
OptionSelectAll=Vybrat vše

V hranatých závorkách jsou sekce, na které se odkazujete. Před znamínkem je klíč, přes který přistupujeme k hodnotě (no dejme tomu proměnná, do které se ukládá hodnota), za znamínkem rovná se je právě ona hodnota.

Pro práci se soubory ini se používají dvě základní API funkce, bez kterých se neobejdeme:


Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" ( _ 
ByVal lpApplicationName As String, _ 
ByVal lpKeyName As String, _ 
ByVal lpDefault As String, _ 
ByVal lpReturnedString As String, _ 
ByVal nSize As Long, _ 
ByVal lpFileName As String) As Long

Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" ( _ 
ByVal lpApplicationName As String, _ 
ByVal lpKeyName As Any, _ 
ByVal lpString As Any, _ 
ByVal lpFileName As String) As Long

To jsou ony, jsou trochu rozsáhlejší, ale umožní nám bezproblémovou práci se soubory .ini.

Jak nyní do funkcí zapisovat a jak z nich číst? Nejdříve se podívame na to, jak do nich zapisovat.


Private Sub Command1_Click()
WritePrivateProfileString "X", "roky", Text1.Text, App.Path & "\XYing.ini"
End Sub

Máme zde název funkce a v ní parametry. Parametr X nám udáva sekci v souboru, parametr roky nám udává klíč, do kterého budeme zapisovat. A parametr Text1.Text nám udává, ze kterého prvku nebo ze které proměnné budeme zapisovat do souboru ini. A poslední parametr nám udává, kam se uloží nebo kde je soubor .ini.

Funkce nám může vracet i hodnotu, pokud je hodnota 1, je vše v pořádku, pokud je hodnota jiná, je někde chyba a tu je potřeba ošetřit.


Private Sub Command1_Click()
a = WritePrivateProfileString("X", "roky", Text1.Text, App.Path & "\XYing.ini")
End Sub

Čtení z funkce:


Private Sub Command2_Click()
Dim returnstr As String * 255
GetPrivateProfileString "X", "roky", "", returnstr, 255, App.Path & "\XYing.ini"
Text1.Text = returnstr
End Sub

Tato funkce se podobá funkci předchozí, čte tedy stejnou hodnotu. Má ovšem jeden pro nás důležitý parametr, navíc to je proměnná, která se v našem případě jmenuje returnstr. V ní se vrací hodnota ze souboru ini a z ní také tuto hodnotu čteme. V názvu funkce se vrací, opět jako v předchozím případě, zpráva o úspěchu či neúspěchu funkce.

Jak jsem již předeslal, soubory ini vytvoří aplikaci profesionálnější, protože leckterý program by si měl pamatovat nastavení uživatele, ať jsou to třeba jen drobnosti. Vnitřek souboru ini by měl být čitelný i pokud jej otevřeme v poznámkovém bloku, to znamená, že bychom měli používat názvy odvozené od funkce uložené hodnoty. Pokud tedy ukládáme třeba uživatelské nastavení, tak nebude vypadat takto:


[sdfsdg]
dfdafdf=PertZ
dggdrfz=0269hhjk6

[OU]
j=Petr
p=Zahradníček
c=6550035

ale takto:


[Login]
Prihlasovaci jmeno= PetrZ
heslo=0269hhjk6

[Osobní udaje]
Jmeno=Petr
Primeni=Zahradníček
ID cislo=6550035

Samozřejmě, že pokud se ukládá třeba zmiňované heslo, je potřeba tento údaj šifrovat. A jak, to se dozvíme v další kapitole této lekce.

20.2 Šifrování pomocí XOR

XOR je sice běžný logický operátor, ale má své speciální použití, a to při šifrování textu. A to vám poslouží nejen při šifrování hesla, jak jsem uvedl v předchozí kapitole, ale třeba při šifrování celých textů, u kterých nestojíte o to, aby do nich určitá osoba nahlížela. Zde vám ukážu základní postup a princip a další ,nejspíš dokonalejší, metody nechám na vás.

A rovnou se podíváme na to, jak bude vypadat zdrojový kód, ale dříve než se podíváme na šifrování pomocí operátoru XOR, tak se podíváme na jednoduchý program, který šifruje pomocí záměny znaků o určitý počet. V následujícím případě o jednu, ale to není vhodná metoda, protože je snadno odhalitelná:


Dim Retezec As String
Dim Pismeno As String
Dim DelkaRetezce As Long
Dim VyslednyText As String

Private Sub Command1_Click()
Retezec = Text1.Text
DelkaRetezce = Len(Retezec)
For i = 1 To DelkaRetezce
    Pismeno = Mid(Retezec, i, 1)
    VyslednyText = VyslednyText & Chr(Asc(Pismeno) + 1)
Next i
Text1.Text = VyslednyText
VyslednyText = ""
End Sub

Private Sub Command2_Click()
Retezec = Text1.Text
DelkaRetezce = Len(Retezec)
For i = 1 To DelkaRetezce
    Pismeno = Mid(Retezec, i, 1)
    VyslednyText = VyslednyText & Chr(Asc(Pismeno) - 1)
Next i
Text1.Text = VyslednyText
VyslednyText = ""
End Sub

Podíváme se na princip. Je naprosto jednoduchý. Z textového souboru bereme znak po znaku, měníme ho na hodnotu ASCII a tu zvětšíme či zmenšíme a převedeme zpátky na znak. A v opačném případě postupujeme totožně, jen prohodíme znamínko.

Vypadat tedy může třeba tak, jak jsem uvedl, ale můžete ji zdokonalit třeba o heslo:


Dim Retezec As String
Dim Pismeno As String
Dim DelkaRetezce As Long
Dim VyslednyText As String
Dim Heslo As Long
Dim DelkaHesla As Byte
Dim Kriptor As Byte

Private Sub Command1_Click()
Retezec = Text1.Text
DelkaRetezce = Len(Retezec)
Heslo = InputBox("Zadejte maximálně pětimístné heslo číselné heslo", "Heslo")
DelkaHesla = Len(Heslo)

If DelkaHesla <> 5 Then
    MsgBox ""zadali jste špatné heslo", , "chyba"
Else
    For i = 1 To DelkaRetezce
        If a = DelkaHesla Then a = 0
        a = a + 1
        Kriptor = Mid((Heslo), a, 1)
        Pismeno = Mid(Retezec, i, 1)
        VyslednyText = VyslednyText & Chr(Asc(Pismeno) + Kriptor)
    Next i
Text1.Text = VyslednyText
VyslednyText = ""
End If
End Sub

Private Sub Command2_Click()
Retezec = Text1.Text
DelkaRetezce = Len(Retezec)
Heslo = InputBox("Zadejte maximálně pětimístné heslo", "Heslo")
DelkaHesla = Len(Heslo)

If DelkaHesla <> 5 Then
    MsgBox "zadali jste špatné heslo", , "chyba"
Else
    For i = 1 To DelkaRetezce
        If a = DelkaHesla Then a = 0
        a = a + 1
        Kriptor = Mid(Heslo, a, 1)
        Pismeno = Mid(Retezec, i, 1)
        VyslednyText = VyslednyText & Chr(Asc(Pismeno) - Kriptor)
    Next i
Text1.Text = VyslednyText
VyslednyText = ""
End If
End Sub

Ani tato verze není dokonalá, je to jen ukázka, jakou cestou můžete jít. Je zde mnoho neošetřených chyb. Třeba to, že vložené heslo by mělo být pouze numerické, pokud ale chcete jiné heslo, proč ne, pusťte se do práce :).

Nyní se tedy dostáváme k operátoru XOR. Teď ale budeme šifrovat a dešifrovat soubory, a to následujícím kódem. Kód je opět neošetřený, takže s ním manipulujte opatrně a pokud se vám bude chtít, můžete jej vyléčit od všech možných chyb.


Dim Retezec As String
Dim Pismeno As String
Dim Cislo As Long
Dim DelkaRetezce As Long
Dim Heslo As Long


Private Sub Command1_Click()
    CommonDialog1.ShowSave
    Heslo = InputBox("Vložte heslo")
    Retezec = Text1.Text
    DelkaRetezce = Len(Retezec)
    Open CommonDialog1.FileName For Output As #1
    For i = 1 To DelkaRetezce
        Pismeno = Mid(Retezec, i, 1)
        Print #1, Asc(Pismeno) Xor Heslo
    Next i
    Close #1
End Sub

Private Sub Command2_Click()
    CommonDialog1.ShowOpen
    Heslo = InputBox("Vložte heslo")
    Open CommonDialog1.FileName For Input As #1
    Retezec = ""
    Do Until EOF(1)
            Input #1, Cislo
            Retezec = Retezec & Chr$(Cislo Xor Heslo)
    Loop
    Text1.Text = Retezec
    Close #1
End Sub

Toto pro změnu funguje tak, že se každý znak po převedení do číselné podoby pomocí operátoru XOR uloží do souboru na nový řádek. Při čtení se postupuje tak, že se čte každý řádek zvlášť a převádí se zpátky na znak. To zajišťuje Do until EOF(1).

Všechno tohle navíc můžete skombinovat a pohrát si s tím. Vše už je jen na vás.

Ještě vám ukážu něco ohledně funkce XOR.


Print 465 Xor 85
Print (465 Xor 85) Xor 85
Print (((465 Xor 85) Xor 22) Xor 22) Xor 85

Vyzkoušejte si co z toho vznikne.

Pokud s tímto operátorem chcete pracovat v programu a ukládat šifrované hodnoty třeba do proměnných a zpátky je dešifrovat, je potřeba pro oddělení využít nějaké oddělovací značky. Stačí třeba obyčejný mezerník, který bude vložen mezi čísla.

20.3 Domácí Úkol

Za domácí úkol bude uložit šifrovaná data o programu do souboru .ini. a opět je načíst a rozšifrovat.

20.4 V další lekci

V další lekci se podíváme na některé věci, které se mi vytratily nebo nebyly potřeba či se prostě nikam jinam nehodily. Prostě by se celá příští kapitola dala pojmenovat různé či ostatní.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

1 názor  —  1 nový  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jiří ChytilAutor programuje ve VB, zajímá se o elektrotechniku, studuje na SOŠ Elektrotechnické - obor číslicová technika.
Web    

Nové články

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý