Cursul Jaws Scripting - demarare si desfasurare

Diverse limbaje, programare, scripting, coduri, unelte specifice etc.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Luni, 8 februarie 2010 ne-am intalnit pentru a noua oara si am vorbit despre User Buffer, virtualizarea mesajelor.
Jaws poate, pe langa verbalizarea unor mesaje, sa le si afiseze intr-un virtual buffer, adica sub forma unei ferestre asemanatoare cu o pagina web, in care functioneaza Virtual Cursor.
Textul va fi afisat cu un font Arial la marimea de 12, negru pe fond alb.
Pentru a afisa un mesaj in User Buffer, folosim functiile de verbalizare SayMessage () sau SayFormattedMessage (), punand ca prim parametru, adica ouput Type, constanta OT_USER_BUFFER. Al doilea parametru va fi mesajul propriu-zis, acesta putand aparea sub forma unui text intre ghilimele, unui text adus printr-o constanta din fisierul JSM, ori printr-o variabila oarecare care contine string. In cazul mesajelor virtualizate nu putem folosi doua nivele de verbalizare, unul pentru Beginner si unul pentru Advanced/Intermediate, ci este acelasi mesaj pentru orice setare User Verbosity.
Un exemplu ar fi:
SayFormattedMessage (OT_USER_BUFFER, MSG)
unde MSG este numele unui mesaj din fisierul JSM. Mesajele din JSM pot contine si placeholders.

Pentru a ne asigura ca nu este deschis un alt User Buffer in momentul afisarii unuia nou, trebuie ca la inceputul scriptului sa verificam acest lucru si sa il dezactivam fortat pe cel deschis la un moment dat.
Folosim urmatoarea secventa If:
If UserBufferIsActive () Then
UserBufferDeactivate () ; close the virtual viewer
EndIf
Adica, daca User Buffer este activ, atunci dezactiveaza-l.

Pentru a face intr-un mesaj referire la un anume script, mai precis la combinatia de taste a acestuia, putem crea link-uri prin urmatoarea sintaxa plasata intr-un mesaj din JSM:
%KeyFor(NumeScript)
Astfel, daca avem un script numit SayTime () care ar spune ceasul la combinatia Control+Insert+F12, iar intr-un mesaj de tip help vrem sa spunem ceva in genul:
"Pentru a afla ora apasati
(link) Control+Inser+F12",
trebuie sa cream in JSM un mesaj ca in exemplul de mai jos:

@MSGTime

Pentru a afla cat e ceasul, apasati
%KeyFor(SayTime)

@@

Este avantajoasa referirea la o combinatie de taste prin link, pentru ca daca vreodata in Keyboard Manager se schimba combinatia de taste, va aparea corespunzator si in mesajul virtualizat, deci functioneaza aproximativ ca un placeholder, de fapt are si acel semn de procent care ne semnaleaza acest lucru.


Tema pentru aceasta lectie ar fi:
A se face un script care sa afiseze in User Buffer urmatorul mesaj:

"Secudnarul ceasului este xx.
Apasati urmatorul link pentru a actualiza secudnarul:
(link) Control+Shift+Enter"

Pentru ca sa fie mai frumos, ar fi trebuit sa alegem acea improvizatie despre care am vorbit si in curs, unde am reusit sa fie link cu test, nu cu combinatie de taste, atunci fiind posibil ca mesajul sa fie:

"Acum secundarul este xx.
(link) Refresh".

La refresh, normal, sa se actualizeze ceasul.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Emanuel.Selaru
Maior
Mesaje: 728
Membru din: 28 Mar 2008, 10:20
Localitate: Buzau

Mesaj de Emanuel.Selaru »

Manu, mentionai in mesaje cum ca aceste cursuri pot fi si ascultate, ele fiind inregistrate in prealabil. Unde pot fi gasite acestea? In cazul in care cineva ar asculta atent cursurile precedente si ar fi la zi cu totul si din punct de vedere practic, ar putea sa participe odata cu vechii participanti?
As dori si eu sa particip, in perioada inceperii cursului avand anumite probleme de sanatate ce nu mi-au permis sa fiu in rand cu toti cei inscrisi.
IVictor80
Plutonier major
Mesaje: 230
Membru din: 17 Feb 2009, 17:16
Localitate: Buzau

Mesaj de IVictor80 »

Cursurile in format audio se gasesc la http://www.pontes.ro/storage/scripting/
Daca le termini, cred ca poti participa, dar mai e doar un curs sau doua.
Emanuel.Selaru
Maior
Mesaje: 728
Membru din: 28 Mar 2008, 10:20
Localitate: Buzau

Mesaj de Emanuel.Selaru »

Va multumesc foarte mult pentru informatii. Mult succes tuturor cursantilor!
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Da, cine are rabdare poate urmari inregistrarile si invata dupa ele. Cel mai mult se invata apoi din incercari, din cercetarea altor exemple de scripturi facute de Freedom Scientific sau de altii.
Succes, link-ul dat de Victor functioneaza.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Emanuel.Selaru
Maior
Mesaje: 728
Membru din: 28 Mar 2008, 10:20
Localitate: Buzau

Mesaj de Emanuel.Selaru »

Multumesc foarte mult Manu. Am descarcat cursurile, a mers link-ul acum.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

In 15 februarie ne-am intalnit pentru a zecea oara si am vorbit despre fisierele Ini, modalitati de scriere si citire a datelor din ele.

Un fisier Ini are forma:

Inceput fisier Ini
[NumeSectiune]
Cheie1=ValoareOarecare
Cheie2=ValoareOarecare
Sfarsit fisier Ini

Pot fi oricate sectiuni, iar intr-o sectiune oricate chei cu valorile lor.

Considerand ca numele fisierului va fi "fisier.INI", pentru a il crea pe cel de mai sus, trebuie sa folosim functia IniWriteString () in felul urmator:
IniWriteString ("NumeSectiune", "Cheia1", "ValoareOarecare", "fisier.INI")

Mai aplicam inca o data pentru a doua cheie:
IniWriteString ("NumeSectiune", "Cheia2", "ValoareOarecare", "fisier.INI")

Toti cei patru parametri pot fi variabile de tip string in cazul de mai sus, dar se pot scrie ca valori ale cheilor si integere, folosind functia IniWriteInteger():
IniWriteInteger ("NumeSectiune", "CheiaX", 123, "fisier.INI"))

Primul, al doilea si al patrulea parametru vor fi intotdeauna de tip string, indiferent ca folosim functia IniWriteString () sau IniWriteInteger ().

Pentru a citi un fisier Ini stiind numele sectiunii, cheia si numele fisierului, vom folosi functia IniReadString () sau IniReadInteger (), dupa cum urmeaza:
IniReadString ("NumeSectiune", "Cheia1", "NUL", "fisier.INI"))
IniReadInteger ("NumeSectiune", "CheiaX", 0, "fisier.INI")

Al treilea parametru este stringul sau integerul care va fi returnat in caz ca nu se gaseste nimic conform celorlalti parametri mentionati. Se poate pune ca al treilea parametru orice valoare string in cazul IniReadString () si orice valoare integer in cazul IniReadInteger ().


Tema pentru fisierele Ini ar fi:
A se crea o mica secventa de cod care sa inregistreze intr-un fisier Ini toate accesarile unui program, pentru a fi mai simplu la probe: Notepad.
Ori de cate ori se ajunge prin Alt + Tab sau se deschide programul, in fisierul Ini sa se scrie ora minutul si secundele ca si cheie, iar data ca si valoare a cheilor.
Practic este un programel tip spion... facandu-l mai complex, se poate chiar realiza o baza de date in care sa se inregistreze numele documentelor deschise, cu data si ora, pentru Microsoft Word de exemplu.
De asemenea, punand secventa de cod in fisierul "Default.JSS", se va inregistra data si ora fiecarei lansari a JAWS for Windows.
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:

Mesaj de Manu »

In 1 martie 2010 a avut loc a unsprezecea intalnire, ultima in care s-a prezentat informatie noua, urmand ca in 9 martie sa mai aiba loc o intalnire pentru concluzii.
Postez cu intarziere un rezumat al intalnirii din 1 martie.

Am vorbit despre ferestre, ierarhia ferestrelor, identificatorii cu functiile aferente de determinare si Home Row Utility / Script Mode Utility.

Prezentare ferestre
Cei mai multi isi imagineaza ca o fereastra din sistemul de operare Windows este ceva rectangular, chenarele care incadreaza un program deschis, dar putini isi inchipuie ca, de fapt, o fereastra este orice buton, orice camp de editare, orice combo-box etc.
Toate elementele, controalele diferite de pe un ecran reprezinta in esenta o fereastra unica, aceasta pentru ca toate au cativa identificatori standard cu valorile lor date de sistemul de operare sau de catre programator.

Ierarhia ferestrelor
Ferestrele sunt aranjate pe principiul relatiei parinte copil. De exemplu, fereastra Desktop este fereastra parinte pentru fereastra principala Notepad. Fereastra principala Notepad este fereastra copil pentru fereastra Desktop. Daca exista o alta aplicatie in executie, de exemplu Microsoft Office Word, fereastra principala a acestuia este la acelasi nivel cu cea a Notepad-ului. In Notepad, aria de editare text si status bar sunt ferestre copil pentru cea principala. Daca deschidem caseta de dialog Open, aceasta va fi fereastra copil pentru cea principala Notepad, iar ea la randul ei va fi fereastra parinte pentru fereastra edit, fereastra combo File of type, list view, butoanele OK si Cancel etc.

Identificatorii principali
Sunt mai multi identificatori ai ferestrelor, de tip string, integer sau handle.
  1. Window Handle este un numar aleatoriu din 6 cifre, asignat de sistemul de operare oricarei ferestre la crearea temporara a acesteia. Pentru a atribui unei variabile de tip handle valoarea Window Handle, functiile posibile sunt:
    GetFocus () si GetCurrentWindow ()
    Valoarea Winow Handle este valabila pana la inchiderea programului, ferestrei. La redeschidere va fi asignata o alta valoare numerica, handle.
  2. Window Class este un string care spune ceva despre un anume control, daca este edit, list view, button etc.. Nu face insa diferenta intre button, radio button sau checkbox. Functia pentru a atribui unei variabile de tip string valoarea Window Class este:
    GetWindowClass (GetFocus ())
    De foarte multe ori, programatorii atribuie unor ferestre clase nerecunoscute de JAWS. Pentru aceasta, trebuie folosita unealta Window Class Reassign pentru a corecta pe cat posibil erorile.
  3. Window Type este o valoare de tip string care asemenea Window Class specifica tipul de fereastra, edit, combo, dar completeaza putin informatia cu tipul de button, de exemplu radio button sau checkbox.
    Functia care returneaza Window Type este:
    GetWindowType (GetFocus ())
  4. Window Type Code este o valoare de tip integer care ofera informatie despre o fereastra, precum Window Class, doar ca, fiind un cod numeric, devine independenta de limba. Valorile numerice ale Window Type Code si corespondentul WIndo Type de tip string se gasesc in fisierul "HJConst.JSH".
    Functia pentru a returna integerul Window Type Code este:
    GetWindowTypeCode (GetFocus ())
  5. Window Subtype Code este o valoare de tip integer care ofera mai multe informatii despre fereastra, de exemplu daca un button este de tip radio sau checkbox. Window Type Code spune atat despre Button simplu, cat si despre radio button ca au valoarea 1, dar Subtype Code spune ca buttonul simplu are valoarea 1, iar radio buttonul are valoarea 19.
    Functia pentru determinarea valorii Window Subtype Code este:
    GetWindowSubtypeCode (GetFocus ())
  6. Window Control ID este o valoare de tip integer atribuita de catre programator unei ferestre in timpul programarii. Acest identificator este util pentru a ne putea referi clar la o fereastra pentru actiuni specifice realizate de scripturi.
    Functia pentru determinarea valorii Window Control ID este:
    GetControlID (GetFocus ())
Este important de cunoscut modul de utilizarea uneltei Home Row Utility, denumita Script Mode Utility incepand cu JAWS 11.0.
Cu ajutorul acestei unelte pot fi aflate valorile tuturor identificatorilor enumerati mai sus.
Pentru a activa unealta Script Mode Utility este folosita combinatia Insert + Spatiu pana la JAWS 10.0, iar incepand cu versiunea 11.0, combinatia de taste este Insert + Windows + minus de pe blocul numeric in cazul Desktop layout, iar in cazul Laptop layout, combinatia este Insert + Windows + Dash (liniuta normala).

Cu aceasta s-au terminat si rezumatele, acum urmeaza sa lucram la editare a manualului in limba romana, vom mai tine la curent si pe forum cu ce se intampla.

Amintesc ca toate imprimarile se gasesc disponibile pentru download aici.
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 »

Foarte interesante informatiile tale Manu.Sti ce ma gandeam?Daca se pot face astfel de scripturi...Oare nu se poate face si un script pentru blog?Si ma refer aici mai mult la persoanele care stiu sa umble pe calculator dar nu sunt experti.Mi-as dori tare mult sa pot publica pe blogul meu singur dar nu pot...Imediat iti expun si problemele care ma-mpiedica sa fac asta.Deci.S-o luam cu inceputul.1 pe blogspot cand vrei sa postezi ai undeva un link denumit postare noua.Si gandeste-te ca ai deja ceva postat pe blog....te-a ajutat o persoana fara probleme de vedere sa postezi.Daca vrei sa faci tu o noua postare normal acum logik.Te duci pe postarea anterioara si apesi creare postare noua.Si eu as proceda tot la fel dar problema sta in felul urma tor.Titlul blogului se impreuneaza cu titlul postarii pe care eu vreau sa o public.Exemplu:luminasperantei:si aici pun eu titlul postarii mele pe care eu vreau s-o public.Cum scap de acel titlu al blogului din postarea pe care eu vreau s-o public?Mi-a mai spus cineva ca dupa parerea lui ar cam trebui sa renunt la titlul blogului pentru a putea posta sau macar sa-l indepartez un pic.Nu stiu sa fac o smecherie sa nu mi se mai impreuneze titlurile intre ele.Si inca ceva care chiar mi-a placut si mi-ar placea sa gasesc un asemenea script....poate ma-ndrumi tu unde sa caut.Sa programez jawsul sa ma salute cand deschid computerul....Spre exemplu il programez eu cu un text pe care el sa-l spuna de cate ori deschid calculatorul si intra in windows.Se pare ca nu e chiar asa cum credeam eu.Cand am ramas fara vedere nici prin cap nu-mi mai trecea ca voi putea sa mai stau vreodata pe calculator.Acum incerc sa-mi imaginez cum poate posta un nevazator pe blog sau cum poate avea site...Nu numai cazul tau.Multumesc progresului tehnologic din ziua de azi ca s-a inventat acest jaws.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

De putut se pot face tot felul de lucruri, totul e sa aiba cine sa le faca.
Eu personal nu agreez nici blogurile, nici CMS-urile tip Joomla, chiar daca sunt de multe ori utile. Nu le prea agreez pentru ca iti impun un sablon anume, e cumva un fel de iPhone in materie de telefoane, faci multe, sunt frumoase, dar ceva... nu scartaie parca, de aceea personal nu stiu daca voi face vreodata un script pentru blog.
Eu zic sa te apuci sa inveti JAWS scripting si poate iti poti face in timp un mecanism care sa posteze mesaje pe blog. Desigur ca se poate rezolva problema in mai multe limbaje, dar... inainte de toate, ar fi necesara invatarea unuia, apoi vreo doi ani macar de lucru cu coduri etc etc.
In concluzie, cel mai bine ar fi sa gasesti pentru blog nist emetode pentru a posta doar cu JAWS mesaje si alte tipuri de continut.
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 »

Salutare!Manu crezi ca m-ai putea-nvata si pe mine cate ceva despre scripting?Am descarcat lectile,dar am nevoie sa stiu ce semne specifice sunt necesare pentru a creea scriptul.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Nu prea vad cum te-as putea invata eu... Atat pe forum, cat si in inregistrari sunt toate informatiile necesare pentru a invata cat de cat aceste lucruri.
Foarte bun este si manualul furnizat de Freedom Scientific.
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 »

Salut!Zau?Explici tu in acele inregistrari ce semne-s necesare la creearea scriptului?In care dintre-nregistrari?
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Nu inteleg ce spui exact.
Cei care au participat au invatat asa cum am facut. Vrei sa spui ca ai vrea un altfel de curs, nu tot asa ca cel pe care l-am facut atunci?
Nu stiu exact ce si cum am spus pe acolo, dar probabil ca am spus faptul ca de exemplu trebuie paranteze rotunde intr-un anume loc. Daca problema este tastatura, inseamna ca ar trebui sa urmezi intai un curs de invatare a tastaturii, nu se poate face programare fara a cunoaste foarte bine unde sunt pozitionate semnele.
Ceea ce exista in acele inregistrari este exact un curs facut cu oamenii in direct, gandeste-te ca daca participai, totul ar fi fost la fel, plus eventual, cel mult, cateva intrebari suplimentare puse de tine.
Daca ai intrebari punctuale, clare la obiect, ma poti intreba si pe aici si eu voi raspunde. Voi da chiar si exemple de cod acolo unde nu e clar ceva.
Asadar, o putem lua sistematic. Iei inregistrarile, te opresti unde este vreo nedumerire si intrebi aici; voi raspunde in aceeasi zi.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Scrie răspuns