Tipy nejenom pro VFP

Zálohování dat

Možná vás překvapí možnosti, které nám v současnosti poskytují staré známé příkazy z dob MS-DOSu. Pokusme se jednoduše vytvořit každodenní zálohu dat. Důležité ale je, že potřebujeme aby se zálohy:
Vyřešme si postupně tyto problémy:
Pro automatické spouštění programu na počítači SERVER použijeme příkaz AT (pro jeho úspěšné vykonání musí být nastartována služba "Task Scheduler")
AT \\SERVER 19:00 /every:M,T,W,Th,F \\SERVER\diskC\Quas\Backup.cmd

Lidsky řečeno to znamená: na počítači SERVER spusť v 19:00 Každé pondělí až pátek příkazy z Backup.cmd z počítače SERVER na disku C v adresáři Quas. Po jeho úspěšném vykonání se objeví hlášení:
Added a new job with job ID = 1

Poznámka: nezapomeňte, že (hlavně po pokusech) musíte naplánované úlohy také zrušit - v našem případě by to bylo příkazem:
AT \\SERVER 1 /DELETE

Backup.cmd vyřeší zbývající dva problémy. Tento souborobsahuje pouze jeden řádek, který je však příliš dlouhý, takže ho v časopise musíme rozdělit na více řádků:
for /F "eol=; tokens=1-4 delims=./ " %%i in ('date/T') do zip -r "\\SERVER\diskCQuas\Záloha dat %%l%%k%%j %%i" "\\PC\diskF\Milan\Data\*.*"
Vzhledem k relativní složitosti tohoto příkazu si ho rozebereme postupně:
- date/T vrátí čt 23.08.2001
- for /F zpracuj to, co vrátil tento příkaz
- "eol=; tokens=1-4 delims=./ " %%i rozděl tento řádek podle znaků "." a "/" (pro české nebo anglické datum) do 4 proměnných %%i %%j %%k %%l
- zip voláme freewareový kopresní program INFO-ZIP (aplikace WIN32, podpora dlouhých jmen,…)
- "\\SERVER\diskCQuas\Záloha dat %%l%%k%%j %%i" vytváříme archív "Záloha dat 20010823 čt.zip" na serveru
- "\\PC\diskF\Milan\Data\*.*" archív bude obsahovat data z uživatelského PC
Poznámka: otestujte si, zda tato rozšíření fungují i na vaší verzi Windows. Vše jsem vyzkoušel na Windows 2000 Professional, ale jiné verze samozřejmně nemusí tato rozšíření poskytovat!

Přenesení Syntax Coloring na jiný počítač

Cílem bude uložit informaci z registrů o nastavení barev VFP 7.0 *) do souboru tak, abychom byli schopni jednoduše nastavit tyto barvy na jiném počítači. Do nadpisu jsem to ale takhle nenapsal, protože tady si ukážeme postupy použitelné i jinde **). Příkazový soubor obsahuje (příliš dlouhé řádky jsou opět odsazeny na další řádek):
start/wait regedit /ea VFPSave7Colors.tmp HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualFoxPro\7.0\Options
findstr /R "^REGEDIT4 ^\[HKEY_.*Options\] .Editor" VFPSave7Colors.tmp>VFPSave7Colors.reg
del VFPSave7Colors.tmp

Opět si všechny příkazy postupně probereme:
- start/wait spustíme program a čekáme, až tento program skončí
- regedit /ea VFPSave7Colors.tmp HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualFoxPro\7.0\Options spustíme program regedit. Parametr /e požaduje export větve HKEY_CURRENT_USER\… V tomto případě by ale soubor VFPSave7Colors.tmp obsahoval znaky v kódování Unicode. Přepínač /ea zajistí, že se bude jednat o normální textový soubor.
- Nyní máme k dispozici soubor VFPSave7Colors.tmp, který obsahuje například:
REGEDIT4
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualFoxPro\7.0\Options]
"EditorCommentColor"="RGB(0,128,0,255,255,0), Auto, NoAuto"
"EditorKeywordColor"="RGB(0,0,255,255,255,255), NoAuto, Auto"
….
"LastProject"="1"
"Talk"="ON"
….
- Příkazem findstr /R "^REGEDIT4 ^\[HKEY_.*Options\] .Editor" VFPSave7Colors.tmp>VFPSave7Colors.reg
z tohoto souboru vybereme některé řádky. Přepínač /R nám dovolí používat k výběru požadovaných řádků regilérní výrazy, což je nesmíně silná věc dobře známá všem programátorům pracujícím s libobvolnou verzí operčních systémů UNIX/Linux/… Do uvozovek zadáme požadovanou masku:
řádek začínající REGEDIT4 ^REGEDIT4 - znak ^ označuje začátek řádku
řádek [HKEY_…Options] ^\[HKEY_.*Options\] - \[ a \] označují přímo závorky
všechny řádky obsahující od 2. znaku text Editor .Editor - . označuje 1 znak (jako ? v MS-DOSu)
- Pomocí >VFPSave7Colors.reg vytvoříme nový soubor s příponou REG. Tento soubor stačí spustit na libovolném počítači a jeho obsah se uloží do registrů, takže máte k dispozici stejné barvy ve VFP jako na svém počítači.

Poslání zprávy v síti z VFP

Aby v tomto článku byl i nějaký program program ve VFP, ukážeme si, jak můžeme z programu rozeslat jednomu uživateli či skupině uživatelů nějakou zprávu, například: My nebudeme posílat nic tak katastrofického. Všem pošleme informaci o tom, že je čaj správně vylouhován. Jednomu uživateli pošleme navíc i informaci o druhu čaje.
LOCAL lnhndl,llOK
DECLARE INTEGER GetDesktopWindow In User32.Dll
DECLARE INTEGER ShellExecute IN Shell32.Dll INTEGER nWinHandle,STRING cOperation,;
                STRING cFileName, STRING cParameters, STRING cDirectory, INTEGER nShowWindow

lnhndl = GetDesktopWindow() && Tím získáme handle na desktop

llOK=.F.
DO CASE
   CASE NOT ShellExecute(lnhndl,.NULL.,"NET","SEND * Jdeme na čaj!","",0)>=32

   CASE NOT ShellExecute(lnhndl,.NULL.,"NET","SEND igor Je to Lyons' Centenary Blend!","",0)>=32

   OTHERWISE
        llOK=.T.
ENDCASE

IF ! llOK
   =MESSAGEBOX("Nepodařilo se odeslat všechny zprávy!")
ENDIF

Poznámka: všimně te si úsporného způsobu naprogramování posloupností podmínek, které musí být všechny splněny.

A to je vše. Mějte se krásně
Milan Kosina, kosina@vol.cz

Pozn. *) přepis.: Téhož lze dosáhnout i pro verze VFP 5.0 a VFP 6.0 jenom tím, že v řetězci indentifikující místo v registry se "7.0" nahradí "5.0" nebo "6.0".
Pozn. **) přepis.: A to zase já jo. Mít v hlavičce článku "Další tip" by nemělo žádnou informativní hodnotu.