Sequence Recorder And Automator

Cuprins

Introducere.

În zilele noastre calculatoarele au devenit o parte importantă a vieții noastre ajungând să fie de neînlocuit, astfel că le întâlnim aproape în orice domeniu. De la inventarea primului calculator Colossus în anul 1943, domeniul calculatoarelor a cunoscut o evoluție explozivă ajungându-se la o așa numită “Era a Calculatoarelor”.

De a lungul timpului numărul de utilizatori a crescut, rezultând într-o cerere pentru un număr mare și o varietate bogată a opțiuniilor și a serviciilor oferite de un calculator.

Dezvoltarea software reprezintă procesul de programare, testare și rezolvare a erorilor din cadrul aplicațiilor, care au un ciclu de viată și astfel rezultând un produs software.

Domenii abordate și obiective generale

Ca în orice domeniu a apărut și problema comunicării, înțelegerii și rezolvării eroriilor întâlnite de către utilizatori în timpul folosirii serviciilor oferite de calculatoare, în special a acelor aplicații care oferă funcționalitați de bază ale calculatorului.În acest domeniul termenul de “eroare” se referă la faptul că în urma interacțiunii cu calculatorul, în cadrul diferitelor aplicații rezultatul obținut va fi unul incorect, incomplet sau întreg sistemul va avea un comportament bizar. Astfel că problema eroriilor este adresată atât utilizatoriilor specializați, cum ar fi programatorii, care trebuie să intervină în înțelegerea și rezolvarea erorilor întâlnite, cât și utilizatoriilor de rând care folosesc serviciile de bază oferite de către calculatoare. Pentru rezolvarea acestei probleme programatorul are nevoie de cunoașterea tutoror pașilor pe care utilizatorul ii urmează în timpul utilizării calculatorului.

Acest lucru se poate realiza prin prezența programatorului alături de utilizator, dar la un număr mare utilizatori aceasta soluție nu este viabilă deoarece timpul de rezolvare este unul ridicat, astfel că din punct de vedere al eficienței, utilizatorul ar avea de pierdut.

Obiectivul urmărit este de a ajuta utilizatorului în utilizarea calculatorului, dar și a programatorului pentru a avea o sarcină mai ușor de ințeles și de îndeplinit.

Specificații generale

În acest context a apărut necesitatea dezvoltării unor aplicații ce pot automatiza înregistrarea aparițiile acestor erori survenite la diferitele servicii oferite de către calculator.

Această lucrare are ca subiect creearea și dezvoltarea unei aplicații care oferă utilizatorului serviciul de a înregistra automat pas cu pas interacțiunile utilizatorului cu calculatorul, ca și click-ul de la mouse, introducerea unor date de la tastatura, și transmiterea acestora programatorului cu scopul de a identifica și a rezolva aceste erori.

Facilitatea de a automatiza inregistrarea acestor pași ai utilizatorului duce la obținerea unor rezultate pozitive în utilizarea diferitelor funcții ale calculatorului.

Rezultatele pozitive constau în cazul unui utilizator de rând în creșterea ușurinței folosirii calculatorului, la locul de muncă în reducerea timpului de întelegere, recepționarea și rezolvarea erorii întâlnite ceea ce duce la creșterea eficienței angajatului în cadrul activitații pe care o îndeplinește.

Specificații generale

Aplicația “Sequence recorder and automator” dezvoltată pentru a ilustra conceptele prezentate în această lucrare, a fost dezvoltată pentru sistemul de operare Windows având ca țintă versiunea Windows 8.1.

A fost dezvoltată folosind limbajul de programare C #, care este un limbaj de programare avansat, orientat pe obiecte, folosit pentru creearea unei game largi de aplicații. Aplicațiile create cu limbajul C # rulează cu ajutorului framework-ului .NET.

“Sequence recorder and automator” rulează ca o aplicație de tip serviciu de Windows, într-o sesiune independetă de Windows, care poate fi pornită și oprită automat, sau manual, de către utilizator. Pentru monitorizarea îndelungată a utilizatorului este avantajos să folosim acest tip de aplicație.

Funcționalitățile generale ale aplicației sunt de înregistrare a mișcărilor și click-urilor de mouse, înregistrarea apăsării diferitelor butoane ale tastaturii, capturarea imaginii monitorului (screenshot), monitorizarea modificările ce apar la nivelul structurii de directoare. La intâlnirea unei erori utilizatorului are opțiunile menționate mai sus, care se vor înregistra și se vor trimite către administrator sub forma unui fișier. Aplicația are facilitatea de a trimite automat un email de tip notificare către programator.

Aplicația vine în ajutorului utilizatorului dar și a programatorului fiind o situație “win –win”.

Structura lucrării

Primul capitol al acestei lucrări de licență reprezintă o introducere în domeniul calculatoarelor,a contextului de realizare al aplicației si specificațiile generale ale acesteia.

Al doilea capitol descrie stadiul actual în subdomeniul ales și anume erorile care apar la calculatoare și aplicațiile dezvoltate pentru acestea.

Capitolul trei descrie o vedere de ansamblu a întregii lucrări capitol în care se va descrie aplicația pe scurt din punct de vedere al funcționalităților pe care le oferă.

Capitolul patru, care reprezintă și primul capitol al cuprinsului lucrării,este descris suportul teoretic care este folosit pentru dezvoltarea acestei aplicații.

Capitolul cinci este inclus tot în cuprinsul lucrării și descrie în detaliu etapele parcurse pentru dezvoltarea aplicației, algoritmi folosiți cât și modul de operare al acestei aplicații.

Capitolul șase este capitolul în care se vor prezenta rezultatele obținute în urma folosirii aplicației dezvoltate și avantajele oferite pentru un utilizator și pentru un programator.

În capitolul șapte sunt descriise concluziile lucrării și perspectivele în vederea dezvoltării pe viitor a acesteia.

În capitolul opt regăsim epilogul lucrării,secțiune în care sunt enumerate referințele biografice,lista tabelelor și lista imaginilor folosite la redactarea lucrării.

Analiza stadiului actual în domeniul problemei.

La ora actuală,în domeniul calculatoarelor mai specific în domeniul software-ului putem întâlni o multitudine de erori, care pot varia în dificultatea rezolvării acestora, cât și în cauza lor.

În funcție de cauza lor le putem grupa în trei categorii mari:

Erori de tip hardware.

Erori de tip software denumite și “software bug”.

Erori ale utilizatorului.

Subdomeniul studiat în această lucrare se referă la ultimele două tipuri de erori,cele de tip software și cele rezultate în urma folosirii incorecte de către utilizator a aplicației sau a calculatorului.

Primul tip de eroare prezentat “software bug” face referință la erorile, defectele din cadrul unei aplicații instalate pe calculator.Acest tip de eroare rezultă dintr-un design incorect al programului și are ca rezultat o deviație a stării așteptate sau chiar un eșec.Producerea unei erori este determinată de diferite condiții declanșatoare sau în unele cazuri doar în prezența unor anume condiții.

Erorile cauzate de utilizator apar în urma utilizarii incorecte de către acesta a calculatorului sau a unei aplicații .Oamenii nu reprezintă “mașini precise” creeate pentru a îndeplini o sarcină cu eficiență.Cauzele acestor erori pot fi : necunoașterea aplicației folosite, omiterea manualului de utilizare a calculatorului sau a aplicației, eroare umană, neatenție, omiterea unei litere sau a unei cifre, omiterea unor pași din cadrul aplicației.Un simplu exemplu de eroare umană poate fi anul 1988 când satelitul sovietic Phobos 1 a fost pierdut pe parcursul călătoriei acestuia către planeta Marte.Cauza a fost o eroare umană și anume un controlor de la sol a omis o singură literă dintr-o serie de comenzi comunicate satelitului.

În momentul de față există anumite aplicații care raportează administratorului erorile întâlnite

cum ar fi:

Microsoft Error Reporting

Android Application Error Reports

Dintre aplicațiile menționate mai sus aplicația Microsoft Error Reporting este o aplicație care oferă transmiterea erorilor software sau hardware către Microsoft, dar doar cele care sunt detectate de sistemul de operare Windows.

Figură Error! Use the Home tab to apply 0 to the text that you want to appear here.-1 Microsoft Error Reporting

Cea de a doua aplicație rulează pe un sistem de operare Android, care a ajuns și pe dispozitivele de tip laptop sau Pc dar într-un procent foarte mic.

Pornind de la aceste premise, aplicație dezvoltată pentru a ilustra conceptele prezentate în această lucrare își propune să îi ofere utilizatorului și administratorului sau programatorului, posibilitatea de a automatiza transmiterea erorilor și astfel reducând timpul de înțelegere si rezolvare a acestora.

Prezentarea generală a proiectului (vederea de ansamblu)

După cum am prezentat în capitolul anterior erorile calculatoarelor sau a aplicațiilor dezvoltate pentru calculator afectează atât utilizator cât și programatorul.Activitatea pe care un utilizator o are într-o aplicație sau pe un calculator poate fi afectată de apariția erorilor iar in cele mai rele cazuri utilizatorul nu își poate îndeplini sarcina pe care vrea să o facă.Programatorul este afectat de apariția acestor și in plus de utilizator acesta are sarcina de a interveni in rezolvarea acestor erori ca pe viitor utilizator să nu mai fie afectat de acestea.

În acest context aplicația Sequence Recorder and Automator a fost dezvoltată pentru a ajuta programatorul să înțeleagă erorile care intervin.

Astfel că aplicația are următoarele funcționalități :

Aplicația este creată și rulează ca un serviciu de tip Windows,deci poate rula în fundal în mod automat fără să încarce interfața grafică a utilizatorului.

Înregistrează mișcările pe care utlizatorul le face folosind mouse-ul în timpul activității sale.

Înregistrează datele de la tastatură pe care le întroduce,astfel că se pot detecta foarte ușor erorile cauzate din neatenție sau de completare a unor câmpuri cu tipuri de date incorecte.

Poate realiza o captura a ecranului utilizatorului,astfel ajutând programatorul din punct de vedere vizual.Captura de ecran se poate salva în orice director al utilizatorului,prin apăsarea butonului “Save as “.

Modul de înregistrare este selectiv,fiecare opțiune de înregistrarea poate fi activată prin bifarea acesteia și ulterior debifată pentru încetarea înregistrării.Utilizatorul are posibilitatea de a selecta doar unul din modurile de înregistrare fie mouse ,tastatură sau captură de ecran în funcție de eroarea survenită.În cazul unor erori mai complicat de depistat se recomandă folosirea tuturor opțiunilor de înregistrare pentru a ușura munca programatorului.

Programatorul are posibilitatea să urmărească un director selectat,adică să observe modificările petrecute în directorul respectiv:modificarea unui fișier,apariția unui fișier nou sau ștergerea unui fișier.Aceasta funcționalitatea poarte numele de Folder Watch și poate fi selectată sau nu .

Aplicația salvează datele înregistrate sub forma unui fișier text având extensia .txt.

Fișierul text se transmite pe o adresa de email pe care administratorul o deține.Din fișierul text programatorul va întelege pașii pe care utilizatorul i-a parcurs și astfel poate depista eroarea.

Pentru trimiterea fișierului text se poate selecta modul manual,atunci când fișierului este trimis în momentul în care utilizatorului apasă butonul de trimitere,sau se poate selecta modul automat de trimitere,când utilizatorului setează un anumit interval de timp la care se va trimite fișierul.

4.Suport teoretic

Sistemul de operare Windows

Microsoft Windows sau simplu Windows reprezintă o familie de sisteme grafice de operare create de către compania Windows.Versiuni de familii de Windows sunt : Windows NT, Windows Embedded și Windows Phone.În această lucrare vom face referință la familia Windows NT.

Această familie de Windows însumează sisteme de operare care au fost creeate pentru stații de lucru sau calculatoare de tip server.Este un sistem, independent de procesor, “multitasking” poate rula diferite servicii și activitați și “multi – user” ceea ce inseamnă că interfața grafică a acestuia poate varia de la un utilizator la altul.A fost proiectat folosind limbajul de programare C, C++ și limbaj de asamblare.Primul Windows NT a fost lansat in anul 1993 sub numele de Windows NT 3.1, iar pe parcursul aniilor evoluând la diferite versiuni.Există versiuni care rulează pe procesoare 32-bit sau 64-bit.Este un produs de tip closed source software, adică nu avem acces la codul sursă.

Microsoft Windows oferă dezvoltatorilor de aplicații folosind cod gestionat în urmatoarele limbaje de programare:

C++

C#

Visual Basic

JavaScript

Mediul de dezvoltare în care a fost creeată aplicație ”Sequence Recorder and Automator” poartă numele de Microsoft Visual Studio.Visual Studio este un mediu de dezvoltare integrat ,în care se poate edita cod din limbaje precizate mai sus.

Figură Error! Use the Home tab to apply 0 to the text that you want to appear here.-2 Microsoft Visual Studio

Limbajul de programare C# reprezintă un limbaj de programare produs de către Microsoft cu care dezvoltatorii pot creea diferite aplicații bazate pe platforma .NET Framework.Este un limbaj de programare orientat pe obiecte,declarativ,imperativ fiind creeat cu scopul de a fi un limbaj simplu ,să cuprindă o gamă largă de aplicații și modern.

Caracteristici

Sistemul de operare Windows dispune de o multitudine de caracteristici.Din această multime de caracteristici ale sistemului de operare Windows,cele folosite in realizarea aplicației se regăsesc urmatoarele:

Portabilitatea aplicațiilor:Sistemul de operare Windows oferă posibilitatea rulării unei game vaste de aplicații pe diferite calculatoare.Interfețele grafice pot fi adaptate la o multitudine de dimensiuni în funcție de calculatorul utilizatorului.

Serviciu Windows:Un serviciu Windows reprezintă un program de calculator care are proprietatea de a rula în fundal.Acesta mai are proprietatea de a porni automat sau manual.

Versiuni Windows

În timp Microsoft a căutat să îmbunătațească serviciile oferite de către Windows, interfața grafică evoluând pentru a fi mai ușoară pentru utilizator, iar întreaga activitate desfășurată pe un sistem cu Windows instalat să devină mult mai intuitivă.Cum această lucrare a fost dezvoltată pentru o versiune de Windows NT de tip workstation sau desktop,exemplele din această categorie sunt reprezentate în urmatorul tabel.

Tabel 4.3-1 Versiune Microsoft Windows

Fiecare sistem de operare Microsoft Windows conține un set de interfețe de sistem pentru programarea aplicațiilor denumit API (Application Programming Interfaces).Cele din cadrul Windows poartă numele de Windows API.Aceste librării de sistem sunt denumite si Win32 API numărul se referă la versiunea de Windows care rulează pe calculator.Windows API permite aplicațiilor dezvoltate de programatori să interacționeze cu sistemul de operare Windows,acest lucru se aplică pentru fiecare aplicație exceptând aplicațiile de tip consolă.Nu se impune o restricție a limbajului de programare din acest punct de vedere.

Sistemul de operare Microsoft Windows are în componeță un software de tip framework denumit .NET Framework,care este structurat sub forma unor librarii software.Framework-ul .NET oferă functionalități generice pe care programatorul le poate folosi în dezvoltarea unei aplicații.

Programatorul poate alege din librărie doar functionalitățile pe care le dorește și le poate folosi pentru a obține o operațiune specializată.Codul unui .NET Framework nu poate fi modificat de către programator dar poate fi extins.

Software oferă programatorului și posibilitatea ca două limbaje de programare să interacționeze și să opereze cu aceleași structuri de date.

Tabel 4.3-2 Versiuni .NET Framework

Arhitectura Windows

Arhitectura Microsoft Windows NT este dezvoltată pe straturi si este formată din doua componente mari:componenta user mode și componenta kernel mode.

Figură Error! Use the Home tab to apply 0 to the text that you want to appear here.-3 Arhitectura Windows????

User mode este modul în care toate programele user-ului vor fi executate,fiecare proces pe care Windows îl inițiază rulează în acest mod exceptând procesele de tip System.Nu are acces direct la memoria RAM sau echipamentele hardware ale calculatorului.Accesul la memorie sau hardware se face prin intermediul API-ului.Dacă aplicațiile utilizator ar rula în modul kernel acestea ar putea suprascrie adresa de memorii a fiecăruia.În cazul apariției unei erori ,datorită acestei protecții oferite de această izolare a programelor din user mode si kernel mode,impactul asupra sistemului nu este iremediabil și se poate face un recovery.

Kernel Mode în această secțiune codul executat are acces nerestricționat la memoria și parțile hardware ale calculatorului.Se pot rula orice tip de instrucțiune CPU și face referința la orice adresa de memorie.Acest mod este rezervat pentru cele mai de încredere funcții ale sistemului de operare.O eroare la acest nivel are consecințe majore asupra întreg sistemului.

La pornirea calculatorului,când Windows-ul este încărcat,modul kernel își începe execuția.Acesta setează paginarea si definirea memoriei virtuale,apoi creeză procesele de tip sistem și permite aplicațiilor să ruleze în user mode.În timpul execuției unui program apar diferite evenimente:timere,acces la hardisk,introducere date de la tastatură.Aceste evenimente poartă numele de întreruperi.Astfel că, modul kernel are responsabilitatea de a formă instanță care să se ocupe de aceste întreruperi care poartă numele de manipulant de intrerupere sau interrupt handler.

În timpul execuției unei aplicații pot apărea diferite evenimente,în momentul acela CPU trece din modul user în modul kernel pentru a executa interrupt handler asociat întreruperii respective.Acestă operație se realizeaza prin intermediul Windows API.Handler-ul va salva starea CPU-ului iar cand funcția Windows API va fi executată cu succes,se va reveni din modul kernel în modul user continuând cu execuția programului.

Aplicații Windows

Windows Forms

Acest tip reprezintă componenta de bază a aplicației,careia dezvoltatorul îi poate adăuga diferite acțiuni pentru a creea interfața grafică a aplicației.Windows Forms este inclusă în platforma .NET Frameworks și în esență reprinztă o entitate goală căreia dezvoltatorul îi poate adăuga diferite elemente vizuale cum ar fi:text box,buton,list box,timer etc.Dezvolatorul poate modifica mărimea acestor elemente vizuale și le poate aranja într-un mod cât mai convenabil.

Din punct de vedere grafic există o multidine de elemente care pot intra în alcătuirea interfeței grafice a aplicației,din acestea în dezvoltarea aplicației s-au folosit următoarele:

”Button” ,butonul care reprezintă o acțiune de tip Click al utilizatorului.Se poate adăuga prin drag&drop din secțiunea Toolbox a mediului de dezvoltarea Visual Studio.Codul prin care butonul se declară se scrie un mod automat,iar evenimentul pe care îl îndeplinește trebuie sa fie scris de programator.Poate îndeplini evenimente ca:”Click”, ”Drop”,”Holding” etc.

”RadioButton” acest tip de buton oferă utilizatorului posibilitatea validării unei singure opțiuni.

”CeckBox” reprezintă un element vizual care îi oferă utilizatorului posibilitatea de a valida sau nu o anumită acțiune.În urma acestei alegeri de da/nu se pot activa sau nu anumite evenimente.

”TextBox” constituie un câmp pe care utilizatorul în care utilizatorul poate introduce date folosite de către aplicație.Elementul poate fi setat pentru a introduce permite utilizatorului să introducă o singură linie de date sau mai multe linii.Se poate seta o limită a textului introdus.În timpul tastării textului utilizatorul poate vizualiza datele introduse.În cazul introducere unei parole acestă opțiune dispare din motive de securitate.Acest lucru se realiză prin setarea opțiunii de mascare a caracterelor introduse.

”Label” este un element vizual care are rol în descrierea unui element din interfața utilizatorului.Textul conținut este stabilit de programator și poate descrie elementul vizual care îl indică sau poate oferii instrucțiuni pentru utilizator.

”GroupBox” este definit ca un element cu ajutorul căruia se pot grupa diferite secțiuni dintr-un Windows Form.Este reprezentat de un cadru,chenar în interiorul căruia se poate grupa elemente vizuale.Se folosește și pentru gruparea unor funcționalități care corespund unui grup de funcții al aplicației.

”TableLayoutPanel” ajută programatorul la realizarea unei interfețe grafice mai structurate,elementele vizuale fiind aranjate și afișate după structura unui grid.

”PictureBox” este folosit pentru a afișa grafic fișiere de tip Bitmap,JPEG,GIF sau PNG.

”RichTextBox” este un element care poate afișa text în format RTF(Rich Text Format),imagini online,hyperlinks.

”StatusStrip” reprezintă un element care afisează starea unei operațiuni pe care aplicația o execută.

”NumericUpDown” constituie o listă care afișează valori numerice pe care utilizatorul le poate selecta.

Event și Event Handler

Un eveniment reprezintă modul prin care o clasă îi transmite clientului acelei clase că asupra unui obiect care face parte din clasa respectivă i s-a schimbat starea sau au apărut unele modificări.Evenimentele pot fi folosite pentru clase responsabilie cu acțiune în cadrul interfeței grafice cum ar fi click-ul unui buton.Ele se folosesc pentru comunicare între procese.

Fiecărui eveniment îi este asociat un ”eventhandler” care poate fi o funcție sau o metodă în care vor fi executate sau procesate input-urile sau ”răspunsurile” ale unui eveniment.

Pentru declararea unui eveniment trebuie sa urmărim urmatorii pași:

Declararea trebuie sa fie în interiorului clasei specificate.

Prima instanță sa fie de tipul ”delegate” care va avea ca argumente sursa evenimentului urmată de o instanță care conține datele evenimentului.

În final evenimentul proriu-zis este declarat folosind keyword-ul event.

Clasa care conține evenimentul poartă numele de clasă ”publisher”.Poate exista o altă clasă care să accepte evenimentul iar aceasta poartă numele de clasă ”subscriber”.

Windows Hooks

Mecanismul prin care o aplicație poate capta evenimente cum ar fi acțiuni ale mouse-ului,apăsarea unor butoane de la tastatură și mesaje poartă numele de ”hook”.Altfel spus un ”hook” constituie un sistem de manipulare a mesajelor ,care poate monitoriza mesajele care circulă în sistem și le poate procese înainte ca ele sa ajungă la destinatar.

Procedura ”hook” reprezintă o funcție care captează un tip de mesaj prestabilit.În urma captării mesajului, procedura poate modifica evenimentul vizat și să renunțe ulterior la acesta.

Exemple în folosire unui ”hook” sunt:

Simularea miscărilor mouse-ului.

Simularea apăsarii unor taste de pe tastatură.

Monitorizarea mesajelor pentru procesul de debugging.

Fiecare acțiune de monitorizare a unui tip de evenimente corespunde unui anume tip de ”hook”.Tipurile de ”hook`s” sunt incluse în urmatoarea listă:

WH_CALLWNDPROC și WH_CALLWNDPROCRET care monitorizeaza mesajele unei proceduri. WH_CALLWNDPROC este apelată de către sistem inainte ca mesajul sa fie trimis procedurii,iar WH_CALLWNDPROCRET este apelată după ce procedura a procesat mesajul recepționat.

WH_KEYBOARD_LL permite captarea input-ului de la tastatură care urmează să fie transmis .

WH_MOUSE_LL permite captarea acțiunilor mouse-ului care urmează să fie transmise.

WH_GETMESSAGE oferă dezvoltatorului posibilitatea de a monitoriza mesajele care sunt returnate de funcția ”GetMessage”.Acest tip de hook se poate folosi pentru a monitoriza input-ului de la tastatură și mouse.

Detaliile de proiectare, implementare și operare

Aplicație ”Sequence recorder and automator” a fost proiectată modular,astfel că regăsim trei părți mari ale lucrării:

În prima parte programul va apela clasa Main ,pentru interfața grafică a WindowsForm.

Apoi modul denumit Recorder,care conține evenimentele pentru mouse și tastatura,hook-uri asociate acestora și clasa Hookmanager.

Al treilea modul este numit Tools și conține codul pentru realizarea capturii de ecran,trimiterea email cu atașamentul de tip text și directory watch.

Figură Structura aplicației 5-4

Interfața grafică a aplicației a fost împărțită în două zone :

Secțiunea Recorder

Secțiunea Tools

Structura interfeței grafice este prezentată în imaginea următoare și a fost realizată cu ajutorul designer-ului vizual din cadrul mediului de dezvoltare Visual Studio:

Recorder pentru mouse

Un mouse recorder are scopul de a înregistra fiecare acțiune pe care utilizatorul o săvârșește în cadrul aplicației.Acțiunile mouse-ului pot fi :click al butonului stânga,click al butonului dreapta,dublu click,mutarea cursorului în diferite regiuni ale interfeței grafice.

Din punct de vedere grafic recorder-ul de mouse este situat îm secțiunea ”Recorder” a aplicației,în partea din stânga sus a aplicației.

Recorder-ul se activează atunci când CeckBox-ul denumit ”Enabled” este bifat adică activat.Această acțiune este descrisă în următoarea secvență de cod:

private void _mouseRecorderEnabledCheckBox_CheckedChanged(object sender, EventArgs e)

{

UpdateMouseRecorder();

}

În timpul înregistrării acțiunile mouse-ului vor fi afișate în textbox-ul situat sub CeckBox-ul

”Enabled”.Pentru a afișa aceste date folosim următoarea sintaxă de cod:

private void _mouseActivityRichTextBox_TextChanged(object sender, EventArgs e)

{

_mouseActivityRichTextBox.SelectionStart = _mouseActivityRichTextBox.Text.Length;

_mouseActivityRichTextBox.ScrollToCaret();

Se afișează un număr de o sută de mișcări ale mouse-ului ,după depășirea acestui număr conținutul TextBox-ului este șters.

if (_mouseActivityRichTextBox.Lines.Length > 100)

_mouseActivityRichTextBox.Clear();

Ștergerea conținutul TextBox-ului se poate realiza și prin apăsarea butonului denumit ”Clear” situat sub acesta.

Proiectarea unui mouse recorder într-o aplicație Windows Forms ,începe cu selectarea componentei numită GlobalEventProvider,pe care o includem din librăria Recorder.dll.Această operațiune se face prin drag&drop .

Clasa GlobalEventProvider este o clasă folosită pentru scrierea evenimentelor.Pentru a folosi această clasă trebuie să includem biblioteca System.Object.O parte din funcțiile clasei GlobalEventProvider sunt: scrierea unui eveniment datele evenimentului fiind un vector,scrierea unui eveniment datele evenimentului fiind un string,returnează ultima eroare a evenimentului etc.

Clasa HookManager constituie o clasă care monitorizează fiecare mișcare a mouse-ului și în care avem descrise evenimentele asociate fiecărui tip de acțiune a mouse-ului.

Clasa MouseEventExtArgs este o clasă care va conține informații refitoare acțiunilor mouse-ului.O instanță de tipul clasei MouseEventExtArgs va conține urmatoarele informații:butonul apăsat al mouse-ului,numărul de click-uri,coordonate cursorului,rotirea rotiței mouse-ului.

Din punct de vedere al funcționării recorder-ului aceasta începe prin înregistrarea a șase evenimente:

HookManager.MouseClick += _mainGlobalEventProvider_MouseClick;

HookManager.MouseDoubleClick += _mainGlobalEventProvider_MouseDoubleClick;

HookManager.MouseDown += _mainGlobalEventProvider_MouseDown;

HookManager.MouseMove += _mainGlobalEventProvider_MouseMove;

HookManager.MouseUp += _mainGlobalEventProvider_MouseUp;

În cazul în care CeckBox-ul nu este bifat dezînregistrarea celor șase evenimente se face prin următoare sintaxă:

HookManager.MouseClick -= _mainGlobalEventProvider_MouseClick;

Pentru fiecare eveniment al unui mouse se va apela o funcție de tip callback .Funcția de tip callback este denumită MouseHookProc și are trei parametrii.

private static int MouseHookProc(int nCode, int wParam, IntPtr lParam)

Cei trei parametrii ai funcției reprezintă:

”nCode” reprezintă un cod care va specifica daca hook-ul va fi instalat pe acest eveniment.

”wParam” specifică dacă mesajul este trimis de evenimentul curent.

”lParam” oferă informații despre mesajul trimis.

Funcția callback va returna un cod specific asociat fiecărui tip de eveniment de mouse din biblioteca Sistem API.Apoi se va face un forwarding către o funcție .

return CallNextHookEx(s_MouseHookHandle, nCode, wParam, lParam);

}

Pentru înregistrarea unei acțiuni de mouse folosim următoarea secvență de cod:

private void RecordMouseActivity(string adittionalInfo = "")

{

_mouseActivityRichTextBox.Text += string.Format("[{0}]: {1}", DateTime.Now.ToString("MM-dd-yy hh:mm:ss"), adittionalInfo);

_mouseActivityRichTextBox.Text += Environment.NewLine;

}

Evenimentele de mouse pe care recorder-ul le înregistrează le afișează linie cu linie folosind următoarea sintaxă de cod:

void _mainGlobalEventProvider_MouseClick(object sender, MouseEventArgs e)

{

RecordMouseActivity(e.X, e.Y, "Click with " + e.Button);

}

Datele care vor fi afișate sunt următoarele:

”e.X” și ”e.Y” reprezintă coordonatele mouse-ului.

”e.Button” reprezintă butonul mouse-ului care a fost acționat.

Recorder pentru tastatură

Un recorder pentru tastatură are ca obiectiv înregistrarea fiecărei taste de pe tastatură care este apăsată de catre utilizator.Se vor înregistra toate tipurile de taste:tastele care reprezintă caractere,tastele de navigare(stanga,dreapta,sus,jos),tastele numerice,tastele funcționale(F1-F12),enter,taste ale interfeței grafice ale sistemului(tasta Windows),tasta de blocare.

Recorder-ul pentru tastatură este inclus în secțiune ”Recorder” și din punct de vedere vizual este situat in dreapta sus a WindowsForm-ului principal.

Pentru proiectarea unui recorder pentru tastatură în cadrul unei aplicații Windows Form,avem nevoie de o clasă pentru evenimente.Clasa responsabilă cu această sarcină va fi clasa GlobalEventProvider.Această clasă face parte din biblioteca System.Object.

Clasa HookManager este clasa responsabilă cu monitorizarea fiecărei acțiuni ale tastaturii și cu asocierea unui hook evenimentului.

Din punct de vedere al proiectării această funcționalitatea a fost implementată analog recorder-ului de mouse.

Este apelat pentru prima oară din MainForm ,dacă CeckBox-ul asociat este bifat.Se înregistrează doua tipuri de evenimente .

if (_keyboardRecorderEnabledCheckBox.Checked)

{

HookManager.KeyDown += _mainGlobalEventProvider_KeyDown;

HookManager.KeyUp += _mainGlobalEventProvider_KeyUp;

Apoi recorder-ul se asigură ca există un hook pentru tastatură și dacă nu există îl creează și înregistrează.

public static event KeyPressEventHandler KeyPress

{

add

{

EnsureSubscribedToGlobalKeyboardEvents();

s_KeyPress += value;

}

În cazul în care hook-ul va fi dezînregistrat se folosește următorul cod:

s_KeyPress -= value;

TryUnsubscribeFromGlobalKeyboardEvents();

Este folosită o funcție de tip callback care va returna parametrul specific fiecărei tip de eveniment de la mouse din biblioteca Sistem API iar apoi va face o acțiune de tip forwarding.

private static int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)

{……

return CallNextHookEx(s_KeyboardHookHandle, nCode, wParam, lParam);

Pentru înregistrarea unui eveniment provenit de la tastatură se folosește o funcție care are următoarea structură:

void _mainGlobalEventProvider_KeyDown(object sender, KeyEventArgs e)

{

recordKeyboardActivity("Key down " + e.KeyCode);

}

În interiorul TextBox-ului se afișează fiecare înregistrare pe care recorderul o realizează.

Ștergerea datelor afișate se face prin acționarea buton-ului denumit ”Clear” sau în mod automat după afișarea a mai mult de o sută de înregistrări.

Monitor de fișier

Monitorul de fișier este inclus în secțiunea de Tools a aplicației ,situat în partea dreaptă a WindowsForm-ului principal.

Monitorul de fișier are sarcina de a monitoriza orice schimbare care are loc într-un director selectat.Monitorizarea se poate face și la nivel de subdirectoare ale directorului selectat.

Schimbările pe care monitorul de fișier le detectează sunt:redenumire,creearea unor fișiere sau directoare,ștergerea unor fișiere sau directoare.Pentru a îndeplini această funcționalitatea a aplicației vom folosi clasa FileSystemWatcher.Această clasă este inclusă în platforma .NET Framework.

Declararea unei instanțe de tip FileSystemWatcher se face astfel:

private FileSystemWatcher _directoryWatcher = new FileSystemWatcher();

Activarea monitorizării unui fișier începe atunci când CeckBox-ul din secțiunea ”Directory Monitor” este bifat ,în caz contrar funcția de monitorizare nu este activă.

Înregistrarea unui eveniment pentru a monitoriza un director se face prin următoarea secvență de cod:

this._directoryMonitorEnabledCheckbox.CheckedChanged += new System.EventHandler(this._directoryMonitorEnabledCheckbox_CheckedChanged);

În interiorul clasei monitorului de fișier vom declara evenimentele care vor alcătui acțiunea de monitorizare a directorului selectat și evenimentul în care monitorizarea se va face și la nivel de subdirectoare ale directorului selectat.Avem urmatoarele tipuri de evenimente care se pot activa:

Evenimentul care se activează atunci când în cadrul directorului urmărit se creează un nou fișier.

_directoryWatcher.Created += _directoryWatcher_Created;

Eveniment care descrie o acțiune de redenumire a unui fișier din director.

_directoryWatcher.Renamed += _directoryWatcher_Renamed;

Eveniment care descrie o schimbare a unui fișier din directorul urmărit.

_directoryWatcher.Changed += _directoryWatcher_Changed;

Eveniment care descrie ștergerea unui fișier din dinrector.

_directoryWatcher.Deleted += _directoryWatcher_Deleted;

Modalitatea prin care ”watcher-ul” poate activa evenimentele respective este descrisă în urmatoarea secvență de cod:

if (!_directoryWatcher.EnableRaisingEvents)

_directoryWatcher.EnableRaisingEvents = true;

Următorul pas pentru utilizator va fi alegerea directorului care va fi monitorizat existând opțiunea de activare a monitorizării și la nivel de subdirectoare ale directorului specificat.

În urma acestei acțiuni monitorul de director are nevoie de adresa directorului,pentru a începe monitorizarea,aceasta va fi stocată într-o nouă instanță.

_directoryWatcher.Path = _monitoredDirectory.FullName;

Acestă adresă este importantă deoarece atunci când vom activa monitorizarea ,pe lângă verificarea pe care o facem asupra CeckBox-ului va trebui sa verificăm și ca adresa sa nu fie nulă.

if (_directoryMonitorEnabledCheckbox.Checked)

{

if (_directoryMonitor.MonitoredDirectory != null)

{

Astfel că în urma încheierii acestui pas ,în TextBox-ul asociat monitorizării se afișează un mesaj care confirmă că monitorizarea a început, urmat de adresa directorului și dacă opțiunea de monitorizare la nivel de subdirectoare a fost activată sau nu .

Acest pas este descris de secvența de cod:

RecordDirectoryMonitorActivity(string.Format("Monitoring {0}…", _directoryMonitor.MonitoredDirectory.FullName));

RecordDirectoryMonitorActivity(string.Format("Include subdirectories: {0}", _directoryMonitor.IncludeSubdirectories));

După această afișare vor fi activate evenimentele asociate monitorizării directorului.

Pentru dezînregistrarea de la evenimentele pentru monitorizare avem următoarea sintaxă de cod:

_directoryMonitor.MonitoredDirectoryItemCreated-=_directoryMonitor_MonitoredDirectoryItemCreated;

Odată ce FileSsystemWatcher-ul a fost setat să urmărească un director,acestă va continua acțiunea până când vom debifa CeckBox-ul.Setarea valorii ”watcher-ului” cu null nu va opri monitorizarea.Acest lucru se realizează prin următoarea secvență de cod :

_directoryWatcher.EnableRaisingEvents = false;

Captura ecran

Acestă funcționalitatea a aplicației este inclusă în secțiunea de Tools a aplicației.Odată cu apăsarea butonului denumit ”Take screenshot” ,clasa ScreenshotHelper va fi apelată din MainForm și se va afișa un noi WindowsFrom care va reprezenta captura ecranului.

Se afișează în cadrul unui label data și ora la care a fost facută ultima captură a ecranului.

Captura ecranului se realizează folosind .NET Framework mai exact folosind clasa grafică System.Drawing.Graphics.Avem nevoie de o instanță de tip Bitmap,implicit de clasa System.Drawing.Bitmap.

O instanță de tip Bitmap reprezintă o mapare a unei zone,a unui domeniu care va fi transpusă în forma unor biți.

Se începe prin declarerea unei noi instanțe Bitmap.Instanța nou creată va fi inclusă în clasa ScreenshotHelper.

public static class ScreenshotHelper

{

#region Members

static Bitmap _capturedScreenShot;

#endregion

În cadrul metodei statice Bitmap CaptureScreenshot se inițializează o instanță de tip Bitmap care va avea ca parametrii înălțimea și lățimea ariei capturate .

capturedScreenShot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,

Screen.PrimaryScreen.Bounds.Height,

PixelFormat.Format32bppArgb);

Se creează apoi un obiect grafic în care se va ”desena ” captura ecranului și care are ca parametru instanța de tip Bitmap inițializată anterior.

Graphics screenshotGraphics = Graphics.FromImage(capturedScreenShot);

Folosind funcția Graphics.CopyFromScreen vom transfera imaginea capturii ecranului sub formă de blocuri de biți către instanța creată de tip Bitmap.

screenshotGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,

Screen.PrimaryScreen.Bounds.Y,

0,

0,

Screen.PrimaryScreen.Bounds.Size,

CopyPixelOperation.SourceCopy);

CapturedScreenShot = capturedScreenShot;

return CapturedScreenShot;

În MainForm, se declară o instanță de tip Bitmap în care vom stoca ce va returna metoda CaptureScreenshot().Tot în MainForm se va verifica dacă există făcută o captură a ecranului anterioară în acest caz afișându-se date si ora la care s-au realizat.Captura anterioară a ecranului este afișată în formul principal și se poate maximiza prin click pe imagine.

După ce butonul de capturare a ecranului a fost apăsat se afișeaza un nou form în care se poate vizualiza captura de ecran.

Acest form are două butoane:

”Save as” buton care va salva captura ecranului în directorul ales de utilizator într-un fișier cu extensia .JPG

”Close” buton prin care se revine la form-ul principal.

Acțiune de salvare a imaginii după apăsarea butonului este descrisă în urmatoarea secvență de cod :

private void _saveAsButton_Click(object sender, EventArgs e)

{

_mainSaveFileDialog.FileName = "SRAA_screeenshot_" + _screnShotDateTime.ToString("MMddyy-hhmmss");

DialogResult mainSaveFileDialogResult = _mainSaveFileDialog.ShowDialog();

if (mainSaveFileDialogResult == DialogResult.OK)

{

FileInfo screenShotFileInfo = new FileInfo(_mainSaveFileDialog.FileName);

_screenShoot.Save(screenShotFileInfo.FullName, ImageFormat.Jpeg);

}

Transmitere fișier pe o adresă de email folosind Gmail

În urma înregistrării evenimentelor provenite de la mouse,tastatură și capturarea ecranului,datele vor fi trimise către administrator prin e-mail care va avea atașat un fișier text cu extensia .txt.Operațiune de trimitere prin e-mail poate fi setată sa fie realizată automat sau manual.

Pentru a trimite date prin e-mail într-o aplicație Windows vom folosi clasa de tip SMTP(Simple Mail Transfer Protocol) care este înclusă în .NET Framework.

Se utilizează o clasă GmailEmailHelper care va avea ca membrii adresa servarului de email folosit,numărul portului pentru trimiterea unui email și o instanță care va folosi standardul de securitate SSL.

string _smtpAddress = "smtp.gmail.com";

int _portNumber = 25;

bool _enableSsl = true;

Apoi vom declara două instanțe de tip string care reprezintă user si parole de gmail al contului care va fi utilizat ca expeditor.

private string _gmailUser;

private string _gmailPassword;

Se începe prin creeare unei instanțe de tipul clasei SMTP.Se setează adresa serverului de email prin care vom trimite email-urile și portul acestuia.Folosind clasa MailMessage se creează o instanță de tipul clasei.În cadrul funcției care va asigura trimiterea email-ului creem și definim structura mesajului.Secvența de cod care descrie acest lucru este:

public void SendMessage(List<string> to, string subject, string body, bool isBodyHTML = false, FileInfo attachment = null)

{

MailMessage mail = new MailMessage();

mail.From = new MailAddress(_gmailUser);

mail.Subject = subject;

mail.Body = body;

mail.IsBodyHtml = isBodyHTML;

Un obiect de tipul clasei MailMessage are următoarele proprietății:

”Body” care constituie mesajul pe care îl trimitem prin email.

”Attachaments” în care se vor salva atașamentele din email.

”From” care reprezintă adresa expeditorului.

”Subject” subiectul email-ului trimis.

”To” adresa de email a destinatarului.

Se setează adresa destinatarului și se include atașamentul email-ului prin sintaxa:

foreach(string toAdress in to)

mail.To.Add(new MailAddress(toAdress));

mail.Attachments.Add(new Attachment(attachment.FullName));

Se introduce de la tastatură contul de adresă gmail al destinatarului în cadrul unui TextBox.

Adresa va fi citită din următoarea instanță:

private System.Windows.Forms.TextBox _toValueTextBoxText;

Următorul pas constă în setarea modalității de trimitere a email.Email-ul poate fi setat să se trimită manual ,caz în care utilizatorul apasă butonul ”Collect and send now”.

A doua opțiune de trimitere a email-ului este cea automată,se setează un interval de timp la care să fie trimis email-ul.Acest interval de timp poate fi setat în ore sau minute.

Secvența de cod care descrie trimiterea automata a email-ului este următoarea:

if (_automaticRadioButton.Checked)

{

if (now.Second == 0)

{

if (_hourCheckBox.Checked)

{

if (!_minuteCheckBox.Checked)

{

if (_hourNumericUpDown.Value == now.Hour && now.Minute == 0 && _okToSendAutomaticEmailNotification)

{

SendAutomaticEmailNotification(_toValueTextBoxText.Text);

_okToSendAutomaticEmailNotification = false;

}

}

Apoi se trimite propriu-zis mesajul împreuna cu atașamentul corespunzător.

SmtpClient smtp = new SmtpClient(_smtpAddress, _portNumber);

smtp.Credentials = new NetworkCredential(_gmailUser, _gmailPassword);

smtp.EnableSsl = _enableSsl;

smtp.DeliveryMethod = SmtpDeliveryMethod.Network;

smtp.UseDefaultCredentials = false;

smtp.Send(mail);

Pentru a marca îndeplinirea cu succes a trimiterii email-ului se va înregistra un eveniment prin sintaxa:

smtp.SendCompleted += smtp_SendCompleted;

Sub opțiunea de trimitere automată e email-ului găsim afișat un status al aplicației,dacă recorderul de mouse este activ,dacă recorder-ul pentru tastatură este activ,monitor-ul de folder și ora trimiterii următorului email .

Exportarea aplicației pentru instalare

Pentru a putea fi utilizată pe orice calculator ce rulează sistemul de operare Microsoft Windows,codul sursă al aplicației ”Sequence recorder and Automator” a fost compilat în cod executabil.

În urma exportării aplicației vor fi create trei noi fișiere:

Un director denumit ”Application Files” care conține resursele aplicației.

Un fișier ”setup” care reprezintă executabilul aplicației.

Un fișier ”Sequence recorder and Automator” care reprezintă un fișier manifest.

Pentru exportarea aplicației,din cadrul mediului integrat de dezvoltare Visual Studio,primul pas este de selectare a opțiunii ”Build”/”Build solution”,apoi selectăm opțiunea ”Project”/”Main Proprieties”,după care s-a selectat locație din cadrul sistemului de operare în care dorm să exportăm aplicația.

Discutarea rezultatelor

Depanarea aplicației ”Sequence recorder and Automator” a fost realizată în cadrul mediului de dezvoltarea Visual Studio 2013.Aplicația a fost testată atât în cadrul Visual Studio 2013 ,dar și pe diferite calculatoare care rulau ca sistem de operare diferite versiuni de Microsoft Windows.

De-a lungul implementării aplicației ”Sequence recorder and Automator” am întampinat câteva probleme în implementarea acesteia:

Începând cu interfața grafica a utilizatorului pentru a oferi acestuia o grupare cât mai logice a funcțiilor aplicației și o utilizare cât mai ușoară.

În secțiunea de recorder,atunci când recorder-ul de mouse este activ acesta trebuie să își continue acțiunea de înregistrare și atunci când fereastra aplicației este minizată sau nu este activă.

La transmiterea automată a email-ului împreună cu atașamentul,la setarea intervalului de timp la care se trimite.

Pentru a lansa în execuție aplicația ,trebuie deschis fișierul setup.exe care a fost creeat în urma exportului.După instalare,aplicația ”Sequence recorder and Automator” își începe execuția.

SCREENSHOT INSTALARE APLICATIE.

În timpul în care a fost utilizată aplicația pe diferite calculatoare,aplicația a avut un comportament stabil,funcțiile sale îndeplinind cu succes task-urile atribuite.Aplicația nu a întâmpinat erori de rulare sau erori privind funcțiile sale.

Concluzii și perspective

În ziua de azi omul modern,are din ce în ce mai multe de făcut,își atribuie din ce în ce mai multe sarcini pe plan profesional dar și pe plan personal,dar timpul pe care îl are la dispoziție este limitat,iar din punct de vedere al locației nu poate fi în două locuri în același timp.

Astfel timpul devine o resursă prețioasă.Timpul este unul din factorii care influentează dacă individul își va îndeplini sarcina cu succes sau nu.Pentru a veni în ajutorul utilizatorului,aplicațiile care automatizează anumite funcții ale unui calculator devin din ce în ce mai importante.

Aplicația ”Sequence Recorder and Automator” vine în ajutorul utilizatorului și a programatorului,oferind posibilitatea de a automatiza înregistrarea și transmiterea automata a unor secvențe eronate din cadrul unei funcții a calculatorului.În momentul da față aplicația se concentrează pe captarea erorilor și transmiterea planificată a acestora.

În acest context,apare prima posibilitate de a continua dezvoltarea aplicației prin adăugarea unei funcționalități care să permită recreearea secvențelor în care au fost captate erororile pe un alt calculator.

Această funcționalitate ar putea fi realizată prin creearea a doua versiuni ale aplicației,una de tip ”Slave” pe care se înregistrează secvențele și alta de tip ”Master” pe care se reproduc secvențele.

8.Bibliografie

Lista tabelelor

Tabel 4.3-1 Versiune Microsoft Windows 10

Tabel 4.3-2 Versiuni .NET Framework 11

Lista imaginilor

Figură 2.1.1-1 Microsoft Error Reporting 6

Figură 4.1.3-1 Arhitectura Windows 12

Anexe

Lucrarea de față a fost distribuită prin intermediul unui mediu de distribuire de tip CD.

Conținutul acestuia are următoarea structură:

Director „aplicatie”:

Director „sursa”: “”.

Director „distributie”: „”.

Director „lucrare-scrisa”: Această lucrare în format .docx și .pdf.

Director „prezentare”: Prezentare lucrării în format .pptx.

Director „rezumat”: Rezumatul lucrării în format .docx și .pdf.

Similar Posts

  • .web2.0 DIN Perspectiva Non Tinerilor

    Cuprins Lista figurilor si tabelelor Lista abrevierilor AIM = AOL Instant Messenger, program de mesagerie instanta; alianța D.A. = alianta Dreptate si Adevar, alianta intre PD si PNL; AOL = America Online, companie americana furnizoare de servicii internet; ATL = publicitate “deasupra liniei” (above the line advertising); basescu.ro (URL prescurtat) = http://www.basescu.ro (URL complet); BTL…

  • Elaborarea Si Admiterea Utm

    Cuprins: Cuprins: 5 Introducere. 7 1. Descrierea generală a SGBD InterBase 8 1.1 Inițiere in limbajul de programare DELPHI 1.1.1 Mai multă productivitate ……………………………………………………………… 1.1.2 Suport extins pentru aplicațiile de baze de date ……………………………….. 1.1.3 Mai multă putere în motorul de baze de date …………………………. 1.2 Crearea bazelor de date…………………………………………………………. 1.3 Descrierea componentelor paginii DataAcces…………………………….

  • Culegere Probleme de Informatica

    Cuprins Introducere Există multe culegeri de probleme de informatică ce permit învățarea și perfecționarea în programare. Prin această culegere am încercat nu doar să sporim această mulțime cu încă una ci să oferim un punct de vedere nou, original și incitant. Originalitatea nu este dată de enunțurile problemelor sau de rezolvările oferite, ci de ideile…

  • Aparitia Internetului Si Utilizarea Acestuia

    Termenul internet provine din împreunarea parțială și artificială a două cuvinte englezești: interconnected = interconectat și network = rețea. Cuvântul are două sensuri care sunt strâns înrudite, în funcție de context: substantivul propriu „Internet” (scris cu majusculă) desemnează o rețea mondială unitară de calculatoare și alte aparate cu adrese computerizate, interconectate conform protocoalelor (regulilor) de…

  • Gestiunea Memoriei

    Introducere Memoria este considerata una dintre cele mai importante resurse fizice fundamentale ale oricarui sistem de calcul. Aceasta trebuie gestionata foarte atent, deoarece are o deosebita importanta in procesul de functionare al sistemului de calcul. In prezent, a crescut incredibil de mult necesitatea memoriei a multor aplicatii software. Chiar daca tehnologia a evoluat in acelasi…

  • Analiza Si Proiectarea Sistemelor Informatice Privind Cheltuielile Salariale

    CUPRINS CAPITOLUL I. Analiza sistemului informational Prezentarea generala a Regionalei CFR Timisoara Analiza structurii organizatorice 1.2.1 Organigrama Regionalei CFR Timisoara 1.2.2 Evaluarea structurii organizatorice Analiza structurii functionale 1.3.1 Prezentarea structurii functionale 1.3.2 Descrierea structurii functionale Analiza activitatilor si subactivitatilor 1.4.1 Structura activitatilor si subactivitatilor 1.4.2 Descrierea activitatilor si subactivitatilor Actele normative ce reglementeaza cheltuielile salariale…