Java Scripty ve Windows
Tento článek je volné pokračování článku o HTA apikacích a většina použitých metod lze aplikovat i do HTA.
HTA je vlastně jen uživatelské prostředí pro skripty.
Java Scripty jsou soubory s příponou .js a jsou uloženy jako prostý text. Pravidla pro psaní samotných Java Scriptů jsou podobná těm v HTML strákách, pouze nepoužíváte tag <SCRIPT> a píšete rovnou script.
Budeme se věnovat použití ActiveX nabízených samotným Windowsem (musíte mít nainstalován Windows Scripting Host, bývá součástí instalace Windows)
S tímto objektem jsem pracovali již v článku o HTA aplikacích. Používali jsme jej pro spouštění programů (ws.Run()) , pro zobrazení okna se zprávou (ws.Popup()) a pro čtení z registrů (ws.RegRead()), do registrů samozřejmě můžete také zapisovat hodnoty (ws.RegWrite()) a mazat je (ws.RegDelete()).
Spousta legrace se dá užít s funkcí AppActivate("jméno aplikace"). Pomocí této funkce se "nabouráte" do běžící aplikace pomocí další funkce SendKeys("znaky") jí můžete posílat klávesy, jako byste s aplikací pracovali. Bude se nám také hodit metoda samotného WScriptu pro zapauzování skriptu na několik milisekund - WScript.Sleep(ms).
Příklad:
Nemusíte se ovšem spokojit je s posíláním znaků. Lze také posílat funkční klávesy atd.
V této tabulce jsou uvedeny další kláves s parametrem, který je nutno použít v řetězci funkce SendKeys.
Příklad použití dalších kláves:
1. Spuštění poznámkového bloku
2. Zápis do poznámkového bloku s použitím ENTERu
3. Zablikání kontrolky Scroll Lock
4. Ukončení poznámkového bloku bez uložení
Může se stát, že potřebujete použít znaky použité pro příkazy např.{, řešení je jednoduché - napíšete znk jako příkaz, tedy {{} napíše složenou závorku, {+} napíše plus, {[} napíše hranatou závorku, atd.
K tomuto tématu ještě jeden zajímavý příklad - simulátor psaní na klávesnici
Z dalších možností je zajímavá schopnost vytvářet zástupce a práce se systémovými složkami. V dalším příkladu si ukážeme jak vytvořit na plochu zástupce Poznámkového bloku a přiřadit mu klávesovou zkratku. To vše díky funkci ws.CreateShortcut()
Jako parametr SpecialFolders() lze použít: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Fonts, MyDocuments, NetHood, PrintHood, Programs, Recent, SendTo, StartMenu, Startup a Templates.
Další funkce WScript.Shell jsou:
ws.Exec("program") - spustí program, ale oproti ws.Run lze zjišťovat např. jeho stav (spuštěný, ještě nespuštěný)
ws.ExpandEnvironmentStrings("%systémová proměnná%") - zjistí cestu k systémové proměnné např.
Java Scripty jsou soubory s příponou .js a jsou uloženy jako prostý text. Pravidla pro psaní samotných Java Scriptů jsou podobná těm v HTML strákách, pouze nepoužíváte tag <SCRIPT> a píšete rovnou script.
Budeme se věnovat použití ActiveX nabízených samotným Windowsem (musíte mít nainstalován Windows Scripting Host, bývá součástí instalace Windows)
Podíváme se na objekt WScript.Shell.
definice:var ws = new ActiveXObject("WScript.Shell");S tímto objektem jsem pracovali již v článku o HTA aplikacích. Používali jsme jej pro spouštění programů (ws.Run()) , pro zobrazení okna se zprávou (ws.Popup()) a pro čtení z registrů (ws.RegRead()), do registrů samozřejmě můžete také zapisovat hodnoty (ws.RegWrite()) a mazat je (ws.RegDelete()).
Spousta legrace se dá užít s funkcí AppActivate("jméno aplikace"). Pomocí této funkce se "nabouráte" do běžící aplikace pomocí další funkce SendKeys("znaky") jí můžete posílat klávesy, jako byste s aplikací pracovali. Bude se nám také hodit metoda samotného WScriptu pro zapauzování skriptu na několik milisekund - WScript.Sleep(ms).
Příklad:
var ws = new ActiveXObject("WScript.Shell");
ws.Run("notepad");
WScript.Sleep(200);
//spuštění Poznámkového bloku pro demonstraci a chvilka čekání na spuštění
ws.AppActivate("blok");
//Ve jméně aplikace musí být napsán název, který se zobrazuje např. na liště úloh. Může být použit i jen koncová část jména
ws.SendKeys("Ahoj");
Nemusíte se ovšem spokojit je s posíláním znaků. Lze také posílat funkční klávesy atd.
V této tabulce jsou uvedeny další kláves s parametrem, který je nutno použít v řetězci funkce SendKeys.
| Klávesa | Parametr |
|---|---|
| BACKSPACE | {BACKSPACE}, {BS}, {BKSP} |
| BREAK | {BREAK} |
| CAPS LOCK | {CAPSLOCK} |
| DELETE | {DELETE},{DEL} |
| ŠIPKA DOLÙ | {DOWN} |
| END | {END} |
| ENTER | {ENTER},~ |
| ESC | {ESC} |
| HELP | {HELP} |
| HOME | {HOME} |
| INSERT | {INSERT},{INS} |
| ŠIPKA VLEVO | {LEFT} |
| NUM LOCK | {NUMLOCK} |
| PAGE DOWN | {PGDN} |
| PAGE UP | {PGUP} |
| PRINT SCREEN | {PRTSC} |
| ŠIPKA VPRAVO | {RIGHT} |
| SCROLL LOCK | {SCROLLLOCK} |
| TAB | {TAB} |
| ŠIPKA NAHORU | {UP} |
| F1 | {F1} |
| F2 | {F2} |
| F3 | {F3} |
| F4 | {F4} |
| F5 | {F5} |
| F6 | {F6} |
| F7 | {F7} |
| F8 | {F8} |
| F9 | {F9} |
| F10 | {F10} |
| F11 | {F11} |
| F12 | {F12} |
| SHIFT | + |
| CTRL | ^ |
| ALR | % |
Příklad použití dalších kláves:
1. Spuštění poznámkového bloku
2. Zápis do poznámkového bloku s použitím ENTERu
3. Zablikání kontrolky Scroll Lock
4. Ukončení poznámkového bloku bez uložení
var ws = new ActiveXObject("WScript.Shell");
ws.Run("notepad");
WScript.Sleep(200);
//spuštění Poznámkového bloku pro demonstraci a chvilka čekání na spuštění
ws.AppActivate("blok");
//Ve jméně aplikace musí být napsán název, který se zobrazuje např. na liště úloh. Může být použit i jen koncová část jména
ws.SendKeys("Ahoj{ENTER}Nový řádek pomocí {{}ENTER{}}.~Nový řádek, tentokrát použitím tidly {~}.");
WScript.Sleep(1000);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(200);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(200);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(200);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(200);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(200);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(200);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(200);
ws.SendKeys("{SCROLLLOCK}");
WScript.Sleep(1000);
ws.SendKeys("%{F4}");
//Klávesová zkratka Alt+F4 pro ukončení programu
WScript.Sleep(10);
ws.SendKeys("{TAB}~");
//Vyvolá se dialogové okno - Chcete uložit soubor?, fokus nastaven na Ano
//tabulátor přesune fokus na Ne a Enter potvrdí
Může se stát, že potřebujete použít znaky použité pro příkazy např.{, řešení je jednoduché - napíšete znk jako příkaz, tedy {{} napíše složenou závorku, {+} napíše plus, {[} napíše hranatou závorku, atd.
K tomuto tématu ještě jeden zajímavý příklad - simulátor psaní na klávesnici
var ws = new ActiveXObject("WScript.Shell");
ws.Run("notepad");
WScript.Sleep(300);
var str="Ahoj{BS}{BS}{BS}{BS}Dobrý den{ENTER}Píšeme text~a píšeme~a píšeme~...~~Nashledanou!";
//v proměnné str je uložen celý text, který chceme napsat včetně příkazů
//celý text musí samozřejmě být napsaný na jednom řádku
var speed=200;
//proměnnou speed nastavujeme rychlost psaní
var tempcnt=0;
var istmp=0;
var i=0;
while (i<str.length) {
if (str.substr(i,1)=="{") istmp=1;
if (str.substr(i,1)=="}") istmp=2;
if (istmp==0) typer(str.substr(i,1));
if (istmp==1) tempcnt++;
if (istmp==2) {typer(str.substr(i-tempcnt,tempcnt+1)) ;istmp=0; tempcnt=0};
i++;
}
function typer(chr){
ws.AppActivate("blok");
ws.SendKeys(chr);
WScript.Sleep(speed);
};
Z dalších možností je zajímavá schopnost vytvářet zástupce a práce se systémovými složkami. V dalším příkladu si ukážeme jak vytvořit na plochu zástupce Poznámkového bloku a přiřadit mu klávesovou zkratku. To vše díky funkci ws.CreateShortcut()
var ws = WScript.CreateObject("WScript.Shell");
//toto je další možnost, jak definovat objekt WScript.Shell,
//ale já osobně raději používám předchozí způsob
var desktop = ws.SpecialFolders("Desktop");
//z proměnné desktop si uděláme odkaz na složku s plochou OS
var lnk = ws.CreateShortcut(desktop + "\'\'Skriptový zástupce.lnk");
//zde je již na ploše vytvořený zástupce, musí se mu jen nastavit parametry
lnk.TargetPath = "%windir%\'\'notepad.exe";
//odkaz na program, lze použít systémových proměnných jako jsou
//%windir%,%temp%,...
lnk.WindowStyle = 1;
//spustit v normálním okně - 1
//v maximalizovaném okně - 3
//v minimalizovaném okně - 7
lnk.Hotkey = "Ctrl+Alt+e";
//klávesová zkratka
lnk.IconLocation = "notepad.exe, 0";
//cesta k ikoně
lnk.Description = "Vyskriptovaný zástupce";
//popisek zástupce
lnk.WorkingDirectory = desktop;
//pracovní adresář - většinou není nutné
lnk.Save();
//a nakonec uložení parametrů
Jako parametr SpecialFolders() lze použít: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Fonts, MyDocuments, NetHood, PrintHood, Programs, Recent, SendTo, StartMenu, Startup a Templates.
Další funkce WScript.Shell jsou:
ws.Exec("program") - spustí program, ale oproti ws.Run lze zjišťovat např. jeho stav (spuštěný, ještě nespuštěný)
ws.ExpandEnvironmentStrings("%systémová proměnná%") - zjistí cestu k systémové proměnné např.
var win = ws.ExpandEnvironmentStrings("%WinDir%") zapíše např. c:\'windows.

