Rutină Word VBA - blocarea deschiderii, funcție de...

Ce este nou in Microsoft Word 2010?
Informatii despre cum se utilizeaza Microsoft Word 2010
Editare, formatare, automatizare de documente
Închis
Green eyes
Mesaje: 36
Membru din: Mie Dec 30, 2009 1:45 pm
Localitate: Timişoara

Rutină Word VBA - blocarea deschiderii, funcție de...

Mesaj de Green eyes » Mie Aug 17, 2016 4:06 pm

Salut,

Aș dori să vă întreb dacă poate fi rezolvată o problemă definită astfel: am un fișier Word (format DOCM), pe care eu îl creez, salvez, etc.

Fișierul trebuie să conțină o rutină macro, care la deschiderea fișierului să facă următoarele lucruri:

1). Dacă adresa MAC a dispozitivului (computer, sau telefon inteligent, sau tabletă, etc.) este adresa MAC1 (știută, cunoscută), atunci rutina macro nu trebuie să facă nimic;

2). Presupunând că trimit fișierul la persoana X, care îl va deschide cu un alt dispozitiv (având o adresă MAC2, diferită de MAC1). Rutina macro trebuie să preia adresa MAC2 și să o stocheze. Ori de câte ori fișierul va fi deschis, de către un utilizator pe dispozitivul cu adresa MAC2, acel fișier trebuie să poată fi folosit fără restricții;

3). Dacă persoana X trimite fișierul cu pricina la altcineva (la persoana Y), care dorește să deschidă fișierul pe un dispozitiv cu adresa MAC3, care este diferită de MAC2 și este diferită de adresa MAC1, atunci rutina macro să blocheze deschiderea fișierului și eventual să afișeze un mesaj simplu, de genul “Accesul nu este permis”.

O funcție VBA care preia adresa MAC este cea de mai jos (nu am testat-o, nu știu dacă funcționează corect):

Cod: Selectaţi tot

Option Explicit
Function GetMyMACAddress() As String

    'Declaring the necessary variables.
    Dim strComputer     As String
    Dim objWMIService   As Object
    Dim colItems        As Object
    Dim objItem         As Object
    Dim myMACAddress    As String
    
    'Set the computer.
    strComputer = "."
    
    'The root\cimv2 namespace is used to access the Win32_NetworkAdapterConfiguration class.
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    'A select query is used to get a collection of network adapters that have the property IPEnabled equal to true.
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
    
    'Loop through all the collection of adapters and return the MAC address of the first adapter that has a non-empty IP.
    For Each objItem In colItems
        If Not IsNull(objItem.IPAddress) Then myMACAddress = objItem.MACAddress
        Exit For
    Next
    
    'Return the MAC address;
    GetMyMACAddress = myMACAddress

End Function
În acest mod, încerc să previn utilizarea fișierului de către terțe persoane. Sau aveți voi altă idee, cum s-ar putea face așa ceva, în alt mod ?

Soluția trebuie să țină cont de faptul că nu există un singur fișier de trimis și nu va exista un singur destinatar al fișierului, deci o adaptare la utilizare multiplă este un mare plus. Vă mulțumesc anticipat.

Green eyes.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Rutină Word VBA - blocarea deschiderii, funcție de...

Mesaj de TudyBTH » Joi Aug 18, 2016 12:18 am

Salut,
O prima intrebare. Cum va deosebi programul MAC2 de MAC3?
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

Green eyes
Mesaje: 36
Membru din: Mie Dec 30, 2009 1:45 pm
Localitate: Timişoara

Re: Rutină Word VBA - blocarea deschiderii, funcție de...

Mesaj de Green eyes » Joi Aug 18, 2016 7:38 am

Salut,

Mulțumesc pentru răspuns. Adresa MAC este de fapt un șir de caractere alfa-numeric. Mai multe detalii se află la adresa de mai jos:

http://scientia.ro/tehnologie/computeru ... a-mac.html

Green eyes.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Rutină Word VBA - blocarea deschiderii, funcție de...

Mesaj de TudyBTH » Joi Aug 18, 2016 8:23 am

Buna,
Stiu ce reprezinta adresa MAC. Ma refeream la urmatorul lucru: ai spus in mesaj ca doresti ca programul sa reactioneze diferit la adresa MAC2 fata de MAC3. Avand in vedere ca niciuna dintre ele nu se afla (initial) memorata nu vad nici un criteriu care sa decida actiunea urmatoare
2). Presupunând că trimit fișierul la persoana X, care îl va deschide cu un alt dispozitiv (având o adresă MAC2, diferită de MAC1). Rutina macro trebuie să preia adresa MAC2 și să o stocheze. Ori de câte ori fișierul va fi deschis, de către un utilizator pe dispozitivul cu adresa MAC2, acel fișier trebuie să poată fi folosit fără restricții;

3). Dacă persoana X trimite fișierul cu pricina la altcineva (la persoana Y), care dorește să deschidă fișierul pe un dispozitiv cu adresa MAC3, care este diferită de MAC2 și este diferită de adresa MAC1, atunci rutina macro să blocheze deschiderea fișierului și eventual să afișeze un mesaj simplu, de genul “Accesul nu este permis”.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

Green eyes
Mesaje: 36
Membru din: Mie Dec 30, 2009 1:45 pm
Localitate: Timişoara

Re: Rutină Word VBA - blocarea deschiderii, funcție de...

Mesaj de Green eyes » Joi Aug 18, 2016 12:04 pm

Salut din nou,

Cu ajutorul funcției pe care am inclus-o în primul mesaj, bănuiesc că rutina Word VBA va colecta adresa MAC2, pe care o va memora. La asta am vrut să mă refer când am scris "Rutina macro trebuie să preia adresa MAC2 și să o stocheze".

După aceea, de îndată ce fișierul va ajunge să fie deschis pe al treilea dispozitiv, va folosi din nou funcția GetMyMACAddress() pentru a prelua adresa MAC3, pe care o va compara cu adresa MAC2. Dacă ele nu coincid, atunci înseamnă că fișierul a fost deschis de către o terță persoană, iar deschiderea fișierului trebuie blocată și trebuie afișat acel mesaj "Accesul nu este permis".

Dacă aveți nevoie de informații suplimentare, vă rog să le precizați. Mulțumesc.

Green eyes.

TudyBTH
Moderator
Moderator
Mesaje: 993
Membru din: Joi Feb 11, 2016 2:12 pm
Localitate: Cluj Napoca

Re: Rutină Word VBA - blocarea deschiderii, funcție de...

Mesaj de TudyBTH » Joi Aug 18, 2016 1:23 pm

Mda,
pai tocmai asta nu reusesc eu sa inteleg.
In prima faza programul detine doar adresa MAC1.
In momentul in care este deschis pe un nou dispozitiv nou el va compara MAC-ul dispozitivului cu MAC-ul memorat (MAC1).
Evident, ele nu coincid asa ca:
  • - fie memoraeza si MAC2 alaturi de MAC1 si va permite de cum inainte deschiderea/editarea/etc si pe acest dispozitiv si ATENTIE si pe toate celelalte dispozitive pe care le va "intalni" pentru ca el va memora tot timpul noua adresa MAC langa adresele existente
    - fie respinge dispozitivul respectiv pentru ca adresa MAC nu se regaseste in lista cu MAC memorate, deci nu va memora nici MAC2!!!.
    - fie gasesti o cale de a decide in mod automat (programabil) care adrese vor fi memorate si care vor fi respinse
Sper ca am reusit sa-mi fac inteleasa nedumerirea.

In alta ordine de idei:
Verificare adresei MAC prin cod inclus in fisier se va executa doar daca utilizatorul va accepta executia macro!!!.
Pentru a impiedeca vizualizarea fisierului in cazul in care untilizatorul nu accepta executia macro va trebui sa parolezi fisierul
Daca fisierul este parolat beneficiaza de exact aceeasi protectie ca si cea obtinuta prin verificarea adresei MAC. Adica daca vrei sa incluzi adresa MAC in lista trebuie sa cunosti (sau sa "ocolesti") parola. Daca ai trecut peste parola ai acces si la lista cu MAC.
In concluzie nu ii vad utilitatea.
Am invatat sa inotam in apa, ca pestii
Am invatat sa zburam in aer, ca pasarile
A ramas doar sa invatam sa traim pe Pamant, ca Oamenii.

Green eyes
Mesaje: 36
Membru din: Mie Dec 30, 2009 1:45 pm
Localitate: Timişoara

Re: Rutină Word VBA - blocarea deschiderii, funcție de...

Mesaj de Green eyes » Joi Aug 18, 2016 4:44 pm

Salut din nou,

Mulțumesc pentru noul răspuns. Am putea presupune că MAC1 este unul dat, îl putem defini ca o constantă, de exemplu:

MAC1 = "50-5A-5B-5C-54-55"

Pentru a limita la 1, sau 2 comparațiile adreselor MAC "noi" cu cele 2 stocate deja (MAC1 ca o constantă și MAC2 pentru utilizatorul căruia i se permite vizualizarea), nu s-ar putea folosi un numărător, care dacă trece de valoarea 1, sau 2, atunci să conducă la acel blocaj la deschidere + mesajul acela de acces interzis ?

Am presupus că tipul de fișier este DOCM, deci cel mai probabil că utilizatorul nu va fi întrebat dacă să activeze sau nu rutinele, dar asta nu este 100% sigur, în toate situațiile. Este un risc asumat, cred.

În cazul în care considerați în continuare că utilitatea soluției nu este una relevantă, ați vedea o cu totul altă soluție, sau o altă abordare, care să conducă la același rezultat ?

Mulțumesc încă o dată.

Green eyes.

Închis

Înapoi la “Intrebari despre Word 2010”