Ach ta klávesnice… ach ty namapované disky…

Přepínání klávesnice
Tady je program, který zobrazí v současnosti nastavený „layout“ klávesnice a přepne ji. Podmínkou samozřejmě je, že česká klávesnice je správně nainstalovaná do Windows.

DECLARE INTEGER GetKeyboardLayoutName IN WIN32API STRING @
DECLARE INTEGER ActivateKeyboardLayout IN WIN32API INTEGER, INTEGER
cLN=SPACE(9)
=GetKeyboardLayoutName(@cLN)
DO CASE
   CASE SUBSTR(cLN,7,2)="05"
        WAIT WINDOW "Máte českou klávesnici" NOWAIT

   CASE SUBSTR(cLN,7,2)="09"
        WAIT WINDOW "Máte anglickou klávesnici" NOWAIT

   OTHERWISE
        WAIT WINDOW "Máte jinou klávesnici - "+;
                    "podívejte se do FOXPRO.H na kód "+SUBSTR(cLN,7,2)+"!" NOWAIT

ENDCASE
=ActivateKeyboardLayout(0,1) && Přepíná mezi CZ a EN

Jenom připomínám, že FoxPro již od pradávných verzí obsahuje funkce pro zjištění a nastavení stavu příslušných kláves, o kterých mnoho programátorů dodnes neví: NUMLOCK(), CAPSLOCK() a INSMODE().

Mapované disky
Od klávesnice nyní přeskočíme k dalšímu častému dotazu: jak zjistit, které síťové disky máme na daném stroji k dispozici. Aby to však nevypadalo, že všechno musíme řešit přes DECLARE a volání Windows API, ukážeme si způsob, jakým v čístém programu FoxPro (bez knihoven Windows API) zjistit, zda je určitý disk diskem lokálním nebo diskem namapovaným přes síť (což bývá samozřejmě dost důležitá věc). Následující program vypíše všechny namapované disky s uvedením jejich UNC:

LOCAL lii
LOCAL ARRAY aTemp(1)
FOR lii=ASC("A") TO ASC("Z")
    =ADIR(aTemp,CHR(lii)+":","V")  && "V" znamená pro ADIR() "Volume name"
    IF aTemp(1)="\\"
       ?["]+aTemp(1)+[" is mapped to ]+CHR(lii)+":" && *)
    ENDIF
NEXT

Výstup pak vypadá například takto:   \\NACELNIK\DISKC is mapped to H:
VFP umí pracovat přímo s UNC, takže jde i bez namapovaných disků: USE \\NACELNIK\DISKC\CESTA\PAM .

Některé příkazy však vyžadují namapované disky (například příkaz DO XXX) **), takže je dobré umět převádět UNC na disky. Pokud bychom potřebovali provést mapování přímo z programu, nezbylo by ale nic jiného než sáhnout po příkazu DECLARE.

A to je vše. Zdraví vás
Milan Kosina, kosina@vol.cz

* Pozn. přepis.: Fíííha. Tak takovýhle použití hranatých závorek vidím poprvé.
** Pozn. přepis.: No, nevím, nevím. Jen tak jsem si zkusil zavolat program přes UNC a funguje to (VFP 5.0 SP3, VFP 6.0 SP3)
Problémy s UNC cestami:
Nelze spustit VFP EXE přes UNC cestu, pokud tato cesta má v sobě mezery - Q281698 (řeší to až SP5 pro VS 6.0).
Ve VFP 3.0 nelze nastavit defaultní cestu jako UNC - Q138093.