Condividi tramite

Serial Number

Anonimo
2013-05-21T10:15:01+00:00

Ciao a tutti

Per proteggere il software, attualmente utilizzo il serial number della ram:

Dim Fs, D, vsn

Set Fs = CreateObject("Scripting.FileSystemObject")

Set D = Fs.GetDrive(Fs.GetDriveName(Fs.GetAbsolutePathName(Application.CurrentProject.Path)))

vsn = D.SerialNumber

Set D = Nothing

Set Fs = Nothing

Per evitare che ad ogni formattazione i cliente mi chiami per una nuova password, vorrei legare quest'ultima al serial number dell'hd.

Ho trovato questa funzione:

Option Compare Database

Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Function GetSerialNumber(strDrive As String) As Long

    Dim SerialNum As Long

    Dim Res As Long

    Dim Temp1 As String

    Dim Temp2 As String

    Temp1 = String$(255, Chr$(0))

    Temp2 = String$(255, Chr$(0))

    ' Se vi sono errori Res=0, altrimenti, se tutto e' andato ok, Res=1

    Res = GetVolumeInformation(strDrive, Temp1, Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))

    GetSerialNumber = SerialNum

End Function

Domande:

  1. una volta inserita la funzione in un modulo, come faccio a leggere il serial number in una sub? Come faccio a richiamarla? (ho scritto call getserialnumber, ma access mi dice di specificare l'argomento)
  2. questa funzione va bene per tutti i sistemi operativi di Windows?

Grazie..!

Microsoft 365 e Office | Accesso | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2013-05-21T13:50:29+00:00

    Grazie Giorgio,

     

    ma perché scrivere tante righe di codice, richiamare funzioni ecc. quando con 5 righe si ottiene lo stesso risultato? Vedi:

     

    Dim Fs As Object

    Dim D, vsn As Variant

    Set Fs = CreateObject("Scripting.FileSystemObject")

    Set D = Fs.GetDrive("C:")

    vsn = D.SerialNumber

     

    e poi, questo serial number è diverso da quello che si ottiene entrando nel sito

    http://www.w3schools.com/asp/showfile.asp?filename=demo_serialnumber

    che, utilizza pressoché gli stessi comandi. Perché?

     

    <!DOCTYPE html>

    <html>

    <body>

    <%

    dim fs,d

    set fs=Server.CreateObject("Scripting.FileSystemObject")

    set d=fs.GetDrive("c:")

    Response.Write("The serialnumber is " & d.SerialNumber)

    set d=nothing

    set fs=nothing

    %>

    </body>

    </html>

    Ciao francescodiassisi ,

    il codice che hai mostrato


    Dim Fs As Object

    Dim D, vsn As Variant

    Set Fs = CreateObject("Scripting.FileSystemObject")

    Set D = Fs.GetDrive("C:")

    vsn = D.SerialNumber


    rende lo stesso risultato di quello che c'è nel sito http://www.w3schools.com/asp/showfile.asp?filename=demo_serialnumber

    non potrebbe essere altrimenti, sono la stessa cosa!!

    :-)

    per quanto riguarda lo scrivere più o meno codice è una scelta, con le API di Windows chiami direttamente la funzione  GetVolumeInformation, mentre con CreateObject di appoggi ad un oggetto esterno che al suo interno poi fa la stessa cosa.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento

11 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-05-21T15:55:58+00:00

    Uhmm... allora il numero che esce sulla schermata destra del sito

    http://www.w3schools.com/asp/showfile.asp?filename=demo_serialnumber

    è un numero fittizio. Non corrisponde affatto al numero che esce dal codice

     

    Dim Fs As Object

    Dim D, vsn As Variant

    Set Fs = CreateObject("Scripting.FileSystemObject")

    Set D = Fs.GetDrive("C:")

    vsn = D.SerialNumber

     

    Almeno nel mio computer...

    ciao francescodiassisi,

    il numero che esce dal sulla schermata destra del sito http://www.w3schools.com/asp/showfile.asp?filename=demo_serialnumber è un numero reale e corrisponde al serial number del disco appartenente al server che elabora il codice ASP.

    questo codice:


    <%

    dim fs,d

    set fs=Server.CreateObject("Scripting.FileSystemObject")

    set d=fs.GetDrive("c:")

    Response.Write("The serialnumber is " & d.SerialNumber)

    set d=nothing

    set fs=nothing

    %>


    non viene elaborato dal computer che visita la pagina ma dal server che genera la pagina html e la invia al computer che visita.

    Per provare il codice sul tuo computer devi installare ilserver ASP (se hai una versione di Windows professional)

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-05-21T15:33:33+00:00

    Uhmm... allora il numero che esce sulla schermata destra del sito

    http://www.w3schools.com/asp/showfile.asp?filename=demo_serialnumber

    è un numero fittizio. Non corrisponde affatto al numero che esce dal codice

    Dim Fs As Object

    Dim D, vsn As Variant

    Set Fs = CreateObject("Scripting.FileSystemObject")

    Set D = Fs.GetDrive("C:")

    vsn = D.SerialNumber

    Almeno nel mio computer...

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-05-21T12:38:42+00:00

    Grazie Giorgio,

    ma perché scrivere tante righe di codice, richiamare funzioni ecc. quando con 5 righe si ottiene lo stesso risultato? Vedi:

    Dim Fs As Object

    Dim D, vsn As Variant

    Set Fs = CreateObject("Scripting.FileSystemObject")

    Set D = Fs.GetDrive("C:")

    vsn = D.SerialNumber

    e poi, questo serial number è diverso da quello che si ottiene entrando nel sito

    http://www.w3schools.com/asp/showfile.asp?filename=demo_serialnumber

    che, utilizza pressoché gli stessi comandi. Perché?

    <!DOCTYPE html>

    <html>

    <body>

    <%

    dim fs,d

    set fs=Server.CreateObject("Scripting.FileSystemObject")

    set d=fs.GetDrive("c:")

    Response.Write("The serialnumber is " & d.SerialNumber)

    set d=nothing

    set fs=nothing

    %>

    </body>

    </html>

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-05-21T11:53:10+00:00

    Ciao francescodiassisi,

    risposta 1)

    Dim NumeroSeriale as Long

    NumeroSeriale  = GetSerialNumber("C:")

    risposta 2)

    la uso anche io e fino ad ora non ho riscontrato problemi.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento