Programare in Jaws Scripting, aplicatii practice

Diverse limbaje, programare, scripting, coduri, unelte specifice etc.
Scrie răspuns
Tanko Csaba
Cadet
Mesaje: 1
Membru din: 15 Sep 2010, 22:24
Localitate: Miercurea-Ciuc

scriptulet winamp

Mesaj de Tanko Csaba »

Va salut
Am descarcat inregistrarile cursurilor despre jaws scripting si m-am apucat sa invat cate ceva..., insa aghiuta nu ma lasa in pace si asa am trecut direct la lucruri practice
am facut un mic script pt pornirea muzicii in winamp, asta poate fi un fisier de muzica sau un radio de pe net, oricum momentan se porneste ceea ce s-a ascultat ultima data.
atasez aici ce a iesit, este din fisierul winamp.jss,
intrebarea mea ar fi, cum s-ar putea face acelas lucru insa cu conditia ca in timpul rularii scriptului eu sa pot folosi jawsul, pentru ca pentru moment pana nu se termina procesul, adica nu trec minutele introduse, jawsul nu mai reactioneaza la nimic
asadar copiez aici scriptul:

Script pornireWinamp ()

var
int iMin,
string smin

InputBox ("scrie peste cate minute sa porneasca muzica", "timp", smin)
let imin = StringToInt (smin)
let imin = imin *600
delay (imin)
pccursor ()
Typekey ("x")

EndScript
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Ma bucur ca ai venit si tu pe aici si mai ales ca ai aparut in topicul acesta cu tot cu coduri concrete.

In legatura cu scriptul tau, ai folosit pentru intarziere sau pentru asteptare, cum vrei sa ii spui, functia Delay (). Nu prea e recomandabil pentru ca un Delay face sa inghete JAWS pana se termina timpul setat de tine, exprimat in zecimi de secunda.

Pentru o altfel de intarziere este functia TimedMessageBox care are patru parametri:
Primul este pentru tipul de TimedMessageBox, pui 0 pentru cel implicit, nu le cunosc pe celelalte ca nu am rabdare sa ma uit chiar acum prin HJConst.JSH.
Al doilea este titlul ferestrei de asteptare;
Al treilea este textul ferestrei de asteptare.
Al patrulea parametru este variabila care exprima in milisecunde timpul de asteptare.

Deci am adus scriptuletului tau urmatoarele modificari:
1. Am inlocuit inmultirea cu 600 care transforma minutele in zecimi de secunde cu o inmultire cu 60000, adica o transformare a minutelor in milisecunde, repet ca TimedMessageBox cere milisecunde, nu ca Delay zecimi de secunda.
2. Am sters randul cu delay si l-am inlocuit cu TimedMessageBox.

Folosind aceasta functie poti face intre timp ce vrei, doar ca pentru ca apasarea X-ului sa aiba loc, adica sa se poata da play, trebuie ca in momentul expirarii timpului sa fie Jaws pe fereastra, cel putin asa am vazut eu... nu prea am experimentat aceasta functie.
Poti eventual pune chiar pe randul urmator, dupa TimedMessageBox si un PlaySound (), care sa faca zgomot cand exprima timpul, in caz ca ai uitat sa lasi pe Winamp, macar sa te anunte cumva. Ori poti baga functia Beep () de cateva ori ca sa fii sigur ca auzi ceva.

Pun mai jos codul corectat in aceasta varianta:

Inceput cod:

Script pornireWinamp ()
var
Int iMin,
String sMin
InputBox ("scrie peste cate minute sa porneasca muzica", "timp", sMin)
let imin = StringToInt (smin)
let imin = imin *60000
TimedMessageBox (0, "Asteptare", "Asteptare inainte Play", iMin)
PCCursor ()
TypeKey ("x")
EndScript

Sfarsit cod.

Te astept si cu alte exemple, succes!
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Noutati JAWS Scripting

Mesaj de Manu »

Am intrat pe site la Freedom Scientific si am fost placut surprins sa vad ca au hotarat intr-un final sa puna si informatii despre ce mai e nou in Scripting.
Tot timpul ma gandeam ce mai e nou si unde sa gasesc un Change Log.

Au creat o pagina in Documentation numita Enhancements in Scripting, unde apar noutati de la JAWS 11 in sus.

Au adaugat:

Array-uri chiar si cu doua dimensiuni.
Variabile Collection.
For looping.
Se pare ca de acum nu mai trebuie sa folosim neaparat cuvantul let pentru a asigna valori variabilelor, e mai comod.
Au reparat si eroarea care m-a deranjat pe mine intr-o vreme: la compararea a doua stringuri se returna ca fiind adevarata afirmatia x==y, unde x incepea la fel ca y, dar era mai scurt decat y.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Alexandru
Plutonier
Mesaje: 106
Membru din: 28 Mai 2011, 20:21
Localitate: Suceava

Mesaj de Alexandru »

E bine ca au adaugat si for-ul, ne permite mai multe posibilitati.
BosGrigore
Plutonier
Mesaje: 145
Membru din: 22 Iul 2012, 21:48
Localitate: Cluj-Napoca

Mesaj de BosGrigore »

Cum pot afisa in virtual viewer heading-ul "Urmatoarea cursa" de la adresa:
http://formula1.automarket.ro/
fara sa deschid I.E.
Grigore
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Eu stiu in JAWS scripting sa incarc si sa preiau date din documente XML online.
Se poate prin functii COM Windows.
Nu prea ma pricep la COM, pentru a afisa rezultate in Pontes Dictionary am avut cateva exemple ale altora pe care am construit si eu.
Pana laurma nu ar fi asa greu sa incarci intr-un string continutul unei pagini WEB, dar problema ar fi dupa, trebuie codul HTML parsat, ceea ce implica ceva munca.
Si nu am inteles chiar clar ce doresti sa faci: sa afisezi pur si simplu acel heading sau textul care apare dupa acel heading.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
BosGrigore
Plutonier
Mesaje: 145
Membru din: 22 Iul 2012, 21:48
Localitate: Cluj-Napoca

Mesaj de BosGrigore »

Textul care urmeaza ma intereseaza. Urmaresc formula 1 si vreau ca intru-un mod rapid si comod sa vad ora de transmitere.
Multumesc!
Grigore
Campus
Comandantul unitatii
Mesaje: 446
Membru din: 09 Mai 2007, 12:15
Localitate: Cluj Napoca

Mesaj de Campus »

Salut
Pentru pagina respectiva, manu cred ca ai putea compila in autoit urmatorul script si apoi sa il executi prin jaws scripting:

Cod: Selectaţi tot

#include <File.au3>
#include <Array.au3>
; Luam pagina de pe internet
Local $iText= BinaryToString(InetRead("http://formula1.automarket.ro/", 1))
; Identificam elementul dorit in pagina
Local $start= StringInStr($iText, '<div class="box_urmatoarea_cursa">')-1
; Eliminam textul pana la elementul dorit
Local $data= StringTrimLeft($iText, $start)
; Identificam urmatorul element ca sa stim pana unde sa taiem in continuare
Local $end=StringInStr($data, '<div class="box_negru">') -1
; Eliminam textul de dupa elementul dorit
$data= StringLeft($data, $end)
; Eliminam elementele html din text
$data= StringRegExpReplace($data, '<(.|\n)+?>','')
; Cream un obiect COM jaws
$o_speech = ObjCreate('FreedomSci.JAWSAPI');
; Instruim jaws sa vorbeasca textul
$o_speech.SayString($data, False)
; Distrugem elementul COM
$o_speech = ""
Sper sa functioneze, aici nu am jaws instalat ca sa il testez
Cele bune
Campus
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Da, asa cu alt limbaj se rezolva treaba, credeam ca vrea el sa invete JAWS Scripting, scripting care de fapt nu are prea multe functii pentru parsare cod HTML si ar fi trebuit cumva gasite solutii mai de la baza.

Daca e doar dorinta de a avea la o combinatie de taste informatia, e bun scriptul AutoIt de mai sus compilat, pe care sa il execute JAWS cand e nevoie.
De fapt ar putea si da enter pe el oricand si ar auzi stirea... :)

Am testat acum scriptul, dar probabil ca la convertirea din binar a textului se intampla ceva cu diacriticele, cel putin litera ă nu apare corect, iar JAWS spune cu italiana "a umlaut".

Daca se doreste fisierul .EXE care anunta informatia, link-ul urmator e pentru descarcare:
formula1.exe

Asadar, pentru a fi auzita informatia la apasarea unei taste e simplu pentru ca JAWS ar executa fisierul formula1.exe care ar transmite el la randul lui inapoi JAWS-ului ce sa spuna, dar pentru a afisa stirea intr-un Virtual Buffer nu prea vad cum as face sa preiau din formula1.exe textul cu JAWS.

Instructiuni pentru a auzi informatia apasand oriunde o combinatie de taste:

1. A se copia fisierul formula1.exe descarcat de la link-ul anterior pe partitia D, direct inr adacina.
2. Se deschide JAWS Script Mannager cu Insert + 0 si se apasa Control + Shift + D pentru a deschide fisierul "default.JSS".
3. Se copiaza urmatoarele 3 randuri la sfarsitul fisierului "default.JSS":

Cod: Selectaţi tot

Script SayFormula1 ()
Run ("D:\\formula1.exe")
EndScript
4. Pentru a-i atasa o combinatie de taste, se apasa pe unul dintre cele trei randuri copiate Control + D.
- In caseta de dialog care apare, se bifeaza check box-ul Can be attached to key si se merge cu Tab pana la Asign to, unde se apasa combinatia de taste dorita, eu am ales la proba Control + Start + Shift + Enter.
5. Se apasa Control + S pentru a salva si recompila scriptul.

Dupa urmarea pasilor de mai sus, oriunde se va apasa Control + Start + Shift + Enter se va auzi informatia despre urmatoarea cursa Formula 1.
Daca se doreste o alta locatie pentru fisierul formula1.exe,, trebuie schimbata calea si intre ghilimelele care incadreaza stringul functiei Run din scriptul JAWS SayFormula1().
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Campus
Comandantul unitatii
Mesaje: 446
Membru din: 09 Mai 2007, 12:15
Localitate: Cluj Napoca

Mesaj de Campus »

Cred ca folosirea inetget in loc de inetread rezolva problema diacriticelor.
Pentru asta se stocheaza pagina intr-un fisier temporar.
Deci in codul de mai sus in loc de linia

Cod: Selectaţi tot

Local $iText= BinaryToString(InetRead("http://formula1.automarket.ro/", 1)) 
ar fi introduse liniile

Cod: Selectaţi tot

Inetget("http://formula1.automarket.ro/", @TempDir&"\temp.html",1)
Local $iText=FileRead(@TempDir&"\temp.html")
FileDelete(@TempDir&"\temp.html")
Cel putin mie in msgbox, prin metoda asta imi arata corect diacriticele pt ca nu mai forteaza modul binar de transmisie a datelor.
BosGrigore
Plutonier
Mesaje: 145
Membru din: 22 Iul 2012, 21:48
Localitate: Cluj-Napoca

Mesaj de BosGrigore »

Manu si Campus sunteti geniali, va multumesc. Datorita tie Manu am invatat cursul de jaws scripting. Am vrut sa fac scriptul Formula1 cu ajutorul sculei Research it dar nu am reusit din lipsa de experienta.
Grigore
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Da, ai dreptate, am uitat de Research It, asa s-ar putea cam orice in materie de preluare informatii de pe paginile web cu JAWS.
Problema e ca trebuie invatate lucruri noi pentru asta, ar fi trei din cate am inteles:
XQuery, XQilla si XPath.
Ar fi suficient de vazut ce e cu XQilla, dinc ate am citit la ei pe pagina spun ca poate parsa si HTML, poate citi si XML.
Se poate gasi un manual .DOC despre JAWS Research It la link-ul urmator:
Screen Reading Software Documentation
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
BosGrigore
Plutonier
Mesaje: 145
Membru din: 22 Iul 2012, 21:48
Localitate: Cluj-Napoca

Mesaj de BosGrigore »

DexOnline cu ResearchIt tool

Fisierul lrl_Dexonline.rul

Cod: Selectaţi tot

[Details]
FriendlyName=DexOnline
Description=Afiseaza definitia cuvantului cautat. Functioneaza cu JAW 12.0.1158.
Timeout=15000
Version=1.0.0
Fisierul lrl_Dexonline.qry

Cod: Selectaţi tot

declare default element namespace "http://www.w3.org/1999/xhtml";
(:Cuvantul scris in ResearchIt apare automat in urmatoarea variabila.:)
declare variable $TermenCautare := "|ARG_1...ARG_n|";
(:Eliminam caracterele care nu sunt suportate.:)
declare variable $cautare-sir := encode-for-uri ("|ARG_1...ARG_n|");
(:Combinam(concatenam) cele doua siruri.:)
declare variable $url := concat ("http://dexonline.ro/definitie/",$cautare-sir);
(:Parsam documentul si-l punem in variabila $doc sub forma unui arbore.:)
declare variable $doc :=
xqilla:parse-html(fn:unparsed-text($url));
(:Selectam definitia si o punem in $definitie.:)
for $definitie in $doc//div[@class="txt"]
(:Afisam valoarea din variabila $definitie in virtual viewer window.:)
return ("Definitii gasite: ", data ($definitie))
In NotePad sau EdSharp se copiaza primul cod si se salveaza cu numele lrl_dexonline.rul, dupa care se salveaza urmatoru cod intr-un fisier cu numele lrl_dexonline.qry.
Cele doua fisiere se pun in folderul Rul Sets pe urmatoarea cale:
start menu > programs > jaws 12.0 > explore jaws > explore my settings > rul sets
Se restarteaza jaws 12.

Cu combinatia de taste insert + spacebar urmata de r se deschide Research it dialog si din options setam dexonline(primary). Apasam ok. In edit se scrie cuvantul dorit si din list view selectam dexonline si se apasa enter. In doua trei secunde apare definitia.
Daca dorim sa cautam definitia unui cuvant direct din text intii punem cursorul pe cuvantul dorit si apasam insert + window, r si in doua sau trei secunde definitia este afisata in virtual viewer window.
Grigore
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Cu JAWS 13 nu functioneaza? Am incercat acum si spune ca nu a gasit rezultate.
In general imi par lucrurile facute corect.
In prezent lumea foloseste in general JAWS 13, ar fi bine sa mearga si cu acesta, nu am rabdare tot timpul sa deschid Maestro Dex...
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Shady
Locotenent
Mesaje: 455
Membru din: 09 Aug 2011, 01:46
Localitate: Bucuresti
Contact:

Mesaj de Shady »

E poftim.Cum se pot face si astfel de cursuri nu se pot organiza si cursuri de utilizare jaws?Si sa-mvete si cei ce nu se pricep sa utilizeze jawsul pe internet si nu numai.Am mai propus undeva intr-un topic dar cineva mi-a spus ca nu crede sa existe persoane interesate de vreun asemenea curs.Mi-as dori tare mult sa-nvat sa fac ceva pe calculator cu jawsul.Alt ceva in afara de joaca,cautat pe internet,youtube sau vorbit pe mesenger si skype.
Scrie răspuns