MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Serial do HD

    Compartilhe

    emacsabino
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    Serial do HD

    Mensagem  emacsabino em Ter 04 Set 2012, 14:44

    Bom dia a todos! Amigos estou querendo usar o código abaixo junto com o outro que vi que é do JPaulo. Só que não tá dando certo,alguém pode me ajudar a adaptar, eu tenho que criar uma tabela para capturar o número do HD só que qual seria o nome que tenho que dá a tabela e o nome do campo? O código do JPaulo já serve para não gravar outro número de HD se lá na tabela já tiver outro
    Esse código eu uso para pegar o número de série
    Option Compare Database
    Private Declare Function GetVolumeInformation Lib "kernel32" _
    Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, _
    ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
    lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
    lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
    ByVal nFileSystemNameSize As Long) As Long

    Public Function DriveSerialNumber(strDrive As String) As String
    'Para obter o numero de serie do HD
    'Na janela imediata digite: ?DriveSerialNumber("c")
    Dim X As Long, lngSerialNum As Long
    Dim strRoot As String
    strRoot = Left$(strDrive, 1) & ":\"
    X = GetVolumeInformation(strRoot, "", 255, lngSerialNum, 0, 0, "", 255)
    DriveSerialNumber = Hex$(lngSerialNum)
    End Function

    Ai no formulário principal ao abrir coloquei
    Call DriveSerialNumber("c")
    Feito isso, quando abro o aplicativo ele cria um monte de tabelas, eu queria saber como faria para criar uma tabela e jogar o número do HD nela pq ai depois eu poderia usar o código abaixo do JPaulo para evitar instalar em outro computador


    Dim x As String

    Dim y As Variant

    x=DLookup("SeuCampoNumeroHD","SuaTabela","SeuCampoNumeroHD")

    y= Call DriveSerialNumber("c")


    If y <> x Then

    MsgBox "Não autorizado"

    DoCmd.Quit

    Else

    Exit Sub

    End If


    Aguardo a ajuda de vocês
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9260
    Registrado : 04/11/2009

    Re: [Resolvido]Serial do HD

    Mensagem  JPaulo em Ter 04 Set 2012, 15:57

    Você já tem de ter a tabela criada e o numero de serie inserido nela, para que seja validado assim;


    Private Sub Form_Open(Cancel As Integer)
    Dim x As String
    Dim y As Variant

    y = DriveSerialNumber("c")
    x = Nz(DLookup("SeuCampoNumeroHD", "SuaTabela", "SeuCampoNumeroHD='" & y & "'"), "")

    If y <> x Then

    MsgBox "Não autorizado"
    DoCmd.Quit

    Else

    Exit Sub
    End If
    End Sub



    .................................................................................
    Contribua com o maximoaccess, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    emacsabino
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    Re: [Resolvido]Serial do HD

    Mensagem  emacsabino em Ter 04 Set 2012, 16:30

    Deu certo aqui Mestre. Uma grande abraço para você e que você continue sempre assim, abençoado por Deus

    abasilio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 05/09/2012

    Este código não funciona em máquinas de 64 bits

    Mensagem  abasilio em Qua 05 Set 2012, 09:22

    Executei esse código e ele funcionou perfeitamente no meu notebook Core i5 com Windows 7 de 64 bits, mas não funcionou num servidor com Windows Server 2008 R2 Datacenter de 64 bits, já com Service Pack 1 instalado, equipado com processador AMD Opteron 4171 HE. Pelo jeito, dá pau de cara quando ele vê a instrução chamando o "kernel32", quando surge a mensagem: "Erro de compilação: O código desse projeto deve ser atualizado para uso em sistemas de 64 bits. Analise e atualize instruções Declare e, em seguida, marque-as com o atributo PrtSafe."

    Alguém saberia como obter o serial do HD numa máquina de 64 bits?

    Obrigado pela atenção.
    avatar
    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3383
    Registrado : 04/04/2010

    Re: [Resolvido]Serial do HD

    Mensagem  Avelino Sampaio em Qua 05 Set 2012, 09:47

    Olá

    veja neste meu artigo abaixo, como usar a condicional #IF para adaptar códigos de 32 e 64 bits. Baixe o arquivo TXT, feito pela Microsoft, com centenas de API's modificadas para atender sitemas de 64 bits

    [Você precisa estar registrado e conectado para ver este link.]

    Bom estudo!


    Última edição por Avelino Sampaio em Qua 05 Set 2012, 09:50, editado 1 vez(es)
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9260
    Registrado : 04/11/2009

    Re: [Resolvido]Serial do HD

    Mensagem  JPaulo em Qua 05 Set 2012, 09:48

    Tente declarar o PtrSafe


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


    Deveria checkar a versão, antes das instruções com um #If VBA7 Then.


    .................................................................................
    Contribua com o maximoaccess, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    abasilio
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 05/09/2012

    Re: [Resolvido]Serial do HD

    Mensagem  abasilio em Qua 05 Set 2012, 10:24

    Puxa vida! Vocês são demais!!! Conseguiram resolver o meu pepino em poucos minutos, às 5h da madrugada! E consegui colocar o sistema pra funcionar num Cloud Server antes dos funcionários chegarem pra trabalhar! Valeu demais, galera! O código ficou assim:

    Option Compare Database

    #If VBA7 Then
    Private Declare PtrSafe Function GetVolumeInformation Lib "kernel32" _
    Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, _
    ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
    lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
    lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
    ByVal nFileSystemNameSize As Long) As Long
    #Else
    Private Declare Function GetVolumeInformation Lib "kernel32" _
    Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, _
    ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
    lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
    lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
    ByVal nFileSystemNameSize As Long) As Long
    #End If

    Public Function FuncaoDriveSerialNumber(strDrive As String) As String
    'Para obter o numero de serie do HD
    'Na janela imediata digite: ?FuncaoDriveSerialNumber("c")
    Dim x As Long, lngSerialNum As Long
    Dim strRoot As String
    strRoot = Left$(strDrive, 1) & ":\"
    x = GetVolumeInformation(strRoot, "", 255, lngSerialNum, 0, 0, "", 255)
    FuncaoDriveSerialNumber = Hex$(lngSerialNum)
    End Function

    Parabéns pela alta qualidade do fórum! Passei a madrugada toda lendo muita coisa interessante aqui e assistindo excelentes vídeos!

    Sucesso a todos!

    Abraços!

    André Basílio.
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9260
    Registrado : 04/11/2009

    Re: [Resolvido]Serial do HD

    Mensagem  JPaulo em Qua 05 Set 2012, 11:23

    Obrigado pelo retorno o fórum agradece.


    .................................................................................
    Contribua com o maximoaccess, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    paulocoob
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1
    Registrado : 06/05/2011

    Re: [Resolvido]Serial do HD

    Mensagem  paulocoob em Sab 16 Fev 2013, 17:35

    Opa tive o mesmo problema com um comando.
    A solução de usar #If VBA7 caiu como uma luva. Ótimo post. Me ajudou muito. Obrigado

    DouglasTSL
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1
    Registrado : 07/01/2014

    Re: [Resolvido]Serial do HD

    Mensagem  DouglasTSL em Ter 07 Jan 2014, 13:24

    Onde que altero esse cod, estou com o mesmo erro! obrigadoo

    J.Silas
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 97
    Registrado : 31/05/2013

    exemplo

    Mensagem  J.Silas em Ter 07 Jan 2014, 14:36

    um exemplo com ajuda de exemplos do forum
    [Você precisa estar registrado e conectado para ver este link.]

    só achei um ponto fraco caso o cliente formate o PC o serial do HD muda se alguém tiver uma solução eu agradeço.

    cemsinformatica
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 23/11/2012

    NUMERO DO HD

    Mensagem  cemsinformatica em Sex 13 Nov 2015, 11:01

    Bom dia
    Retiraram do site o link do exemplo de como verificar o numero do hd
    Voce tem como disponibilizar novamente ??

      Data/hora atual: Seg 26 Jun 2017, 18:21