Leggere con VBA codice seriale dell'Hard disk

di il
13 risposte

Leggere con VBA codice seriale dell'Hard disk

Ciao a tutti, ho creato un piccolo programma di statistica in access, riferito ad una squadra di calcio.
Questo programma è stato installato nel computer in dotazione al club della squadra nel mio paese.

Vorrei che il programma non venga copiato e di conseguenza installato su altri computer.
Andando a curiosare su internet, ho visto che si ha la possibilità di leggere il codice seriale dell'hard disk.
La mia intenzione è quella di copiare il codice seriale in un campo di una tabella e in seguito confrontarlo all'apertura del DB con quello letto.
Se i codici non risultano uguali, il programma non verrà aperto.
Ho trovato un codice ma non funziona.
Il mio problema è:
1° capire dove inserire il VBA che mi legga il codice seriale dell'Hard Disk;
2° far funzionare il codice in quando mi da degli errori;
3° in quale campo mi restituisce il valore.

ecco il codice VBA:

Option Explicit

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

Public Function DriveSerialNumber(ByVal Drive As String) As Long

'usage: SN = DriveSerialNumber("C:\")

Dim lAns As Long
Dim lRet As Long
Dim sVolumeName As String, sDriveType As String
Dim sDrive As String

'Deal with one and two character input values
sDrive = Drive
If Len(sDrive) = 1 Then
sDrive = sDrive & ":\"
ElseIf Len(sDrive) = 2 And Right(sDrive, 1) = ":" Then
sDrive = sDrive & "\"
End If

sVolumeName = String$(255, Chr$(0))
sDriveType = String$(255, Chr$(0))

lRet = GetVolumeInformation(sDrive, sVolumeName, _
255, lAns, 0, 0, sDriveType, 255)

DriveSerialNumber = lAns
End Function


Per favore, vi chiedo di aiutarmi,
Grazie bruno

13 Risposte

  • Re: Leggere con VBA codice seriale dell'Hard disk

    Non entro nel merito di voler proteggere dalla copia un'applicazione per uso hobbistico... certo alcune volte internet fa danni...

    P.S. usa i TAG per il codice...!!

    Siccome usi API... serve capire quanto sai di vba perché dalle 3 domande fatte... credo che le tue basi siano limitate e partire con chiamate API ... insomma... puonrisultare complesso.

    Intanto non sincapisce se quel codice lo hai provato oppure no...
    Se funziona o se restituisce errori, quali...

    Salvare il seriale in una tabella... insomma... nella tabella, accessibile a tutti, lo trovi in chiaro, basta cambiarlo... credo sarebbe meglio rivedere la strategia perché questa è inutile.

    Non saprei da dove partire, inizia a darci un'idea della tua capacità di elaborazione autonoma, ma valutananche che se questa è zero... siamo fermi.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Beh... Diciamo che tutto il programma è protetto da password ed ho anche eliminato il tasto shift.
    Quindi è impossibile accedere alle tabelle o alla modifica del software codici compresi. Non mi preoccupa la sicurezza e la protezione del DB, mi preoccupa invece che al club, basta una chiavetta e il programma viene copiato ed installato su altri computer.
    Riguardo il codice che ho incollato precedentemente, l'ho copiato da questo sito: https://www.experts-exchange.com/questions/20137817/How-to-retrieve-some-system-information-from-VB.html
    Il codice per me è molto complesso, chiaramente non sono un mostro di VBA, ma diciamo che sto frequentando la 5° elementare.
    Discutere di un argomento con Voi, trovare delle soluzioni con esempi ecc.. è molto importate nel proseguimento nell'apprendimento del VBA.
    Grazie ai vostri esempi e collaborazione se oggi inizio a masticare un po di VBA.
    Quindi Alex, ti chiedo cortesemente di essere paziente e aiutarmi.
    Ti ringrazio per la Tua pazienza.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Intanto le protezioni che hai attuato sono facilmente rimovibili... ma se tu ritieni che il tuo prodotto non debba essere copiato magari ci sono contenuti sia tecnici che di privacy di cui ignoriamo l'importanza.

    Detto questo... non ho ancora capito se quel codice lo hai provato...?
    Se.ci dici che non siccome fare ti devo rispondere di LEGGERE bene la funzione Public perché hai pure l'esempio.

    P.s. che S.O. hai... se usi 64bit non funziona... e quel.codice andrebbe in ogni caso riadattato per compatibilità al VBA7.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Ho un pc a 64bit con windows 10 e access 2016
    questo è il codice che ho incollato, ma mi da errore di sub.

    Private Sub Form_Load()
    Public Function DriveSerialNumber(ByVal Drive As String) As Long

    'usage: SN = DriveSerialNumber("C:\")

    Dim lAns As Long
    Dim lRet As Long
    Dim sVolumeName As String, sDriveType As String
    Dim sDrive As String

    'Deal with one and two character input values
    sDrive = Drive
    If Len(sDrive) = 1 Then
    sDrive = sDrive & ":\"
    ElseIf Len(sDrive) = 2 And Right(sDrive, 1) = ":" Then
    sDrive = sDrive & "\"
    End If

    sVolumeName = String$(255, Chr$(0))
    sDriveType = String$(255, Chr$(0))

    lRet = GetVolumeInformation(sDrive, sVolumeName, _
    255, lAns, 0, 0, sDriveType, 255)

    DriveSerialNumber = lAns
    End Sub
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Riguardo il discorso privacy, nel programma sono inseriti tutti i dati sensibili dei soci tesserati (Dati anagrafici, pagamenti quote sociali ecc...). Ecco perché voglio evitare le copie su altri computer
  • Re: Leggere con VBA codice seriale dell'Hard disk

    SDrive = sDrive & "C:\"
    non avevo incollato il percorso corretto.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Hai fatto una cosa che evidenzia un grosso problema...
    Innanzitutto il codice che hai copiato va inserito in un Modulo non nella maschera, nella.maschera va solo inserita la chiamata... che non si fa come hai fatto tu... e qui il grosso problema di base... hai fatto una.cosa che denota cose da studiare...
    Quindi dopo averlo messo dove indicato... dovresti fare cosi:
    
    Private Sub Form_Load()
       MsgBox DriveSerialNumber("C:\")
    End sub
    
    Ciò detto temo non funzionerà ugualmente avendo un S.O. 64bit... ma non ho capito se anche Office è 64bit o meno...

    La conversione ai 64bit con compatibilità ai 32bit non è cosa.per chi non conosce a fondo il vba... credimi che capire cosa si fa con le API richiede un pezzo in più... che per ora è presto.

    Fossi in te questa cosa, che è chiaramente oltre le competenze di molti che usano in modo amatoriale Accesss, la lascerei in un secondo momento, puntando prima a colmare le lacune di base che non possiamo fare nel forum.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Questo tipo di protezione è una sciocchezza ... non serve a nulla...
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Bruno59, piuttosto che identificare il disco rigido in quel modo, leggi questa recente discussione nel forum:
    https://www.iprogrammatori.it/forum-programmazione/cplusplus/come-riconoscere-modo-univoco-una-postazione-t37508.html
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Grazie Willy.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Salve, ho un piccolo problema, spero che qualcuno possa darmi una mano
    Faccio un esempio:
    Ho una tabella, con due campi: Città1 e Città2
    In alcuni casi il campo Città 2 potrebbe essere vuoto.
    Città1 Città2
    ROMA
    ROMA MILANO
    VENEZIA ROMA
    Etc...
    Tramite query, per effettuare una statistica per città,devo ricercare ad esempio il campo che contiene la parola ROMA sia nel campo 1 che nel campo 2.
    Se unisco le due variabili, dove il campo 2 è vuoto mi restituisce solo il campo ROMA, ma se il campo 2 ha un altro dato, (Esempio MILANO o VENEZIA) mi restituisce il valore ROMA MILANO e VENEZIA ROMA.
    Quindi in fase di ricerca della parola ROMA mi restituisce solo due campi , in realtà sarebbero 3.
    Come risolvo il problema???
    Penso che sia un problema elementare, ma non riesco a risolverlo.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Dimenticavo, la ricerca viene effettuata tramite una casella di riepilogo, dove sono elencate le città italiane.
  • Re: Leggere con VBA codice seriale dell'Hard disk

    Bruno... questo argomento non ha nulla a che vedere con l'altro... non sei in una CHAT PRIVATA.
Devi accedere o registrarti per scrivere nel forum
13 risposte