Notifications
Clear all

Proteger planilha contra utilização nao autorizada

18 Posts
6 Usuários
0 Reactions
3,402 Visualizações
(@rodrigojacinto)
Posts: 73
Estimable Member
Topic starter
 

boa noite amigos, tenho um pequeno programa em vba que criei e vendi algumas unidades, porem o que vejo é que um copia e passa para outro sabe, e nisso digamos que acabo perdendo clientes, gostaria de saber se existe uma maneira que posso bloquear isso, ou pelo menos diminuir, tentei fazendo um sistema onde quando o usuario entra pela primeira vez ele registra o HD do computador ai ele mesmo copiando e passando para outra pessoa essa outra pessoa nao consegue entrar, pois o numero do HD é diferente, porem se o primeiro cara copiar a planilha antes de entrar nela, ai ele podera passar essa copia para outras pessoas enteden...
se puderem ajudar agradeço..
abraços..

 
Postado : 30/07/2012 9:46 pm
(@fabio_csantana)
Posts: 7
Active Member
 

Bom dia amigo Rodrigo,

Você pode fazer como eu faço se assim voce achar benefico para você, restringindo por nome da máquina. Onde só determinada maquina irá funcionar. Nas aplicações que comercializo por contrato eu utilizo essa forma, pois evita que o cliente passe para outras pessoas.

segue um código exemplo :

Voce deve coloca-lo em um módulo e chamá-lo no evento Private Sub Workbook_Open() da sua plan, assim quando alguem tentar abrir em outra maquina, mostrará a mensagem que ele não tem direito de executar a aplicação e fechará o arquivo.

'Colocar no início do módulo esta linha de código por ser uma API do Windows

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long

'Retorna o nome do computador
Private Function lfNomeComputador() As String
Dim stBuff As String * 255, lAPIResult As Long
Dim lBuffLen As Long

lBuffLen = 255
lAPIResult = GetComputerName(stBuff, lBuffLen)

If lBuffLen > 0 Then lfNomeComputador = Left(stBuff, lBuffLen)
End Function

Public Sub lsRetornaNomeComputador()
Dim CompName As String
Dim PcUser As String

Application.Visible = False

PcUser = "NOMEDAMAQUINACLIENTE"

CompName = lfNomeComputador
If CompName <> PcUser Then
MsgBox "Este computador não tem direito de executar esta aplicação.", vbCritical, "Atenção!"
Application.DisplayAlerts = False
ThisWorkbook.Application.Quit

End If
Exit Sub
End Sub

 
Postado : 31/07/2012 5:05 am
(@charlie-81)
Posts: 290
Reputable Member
 

fabio_csantana... bom dia!

Pode me mandar um exemplo... sou meio cru em VBA e não consegui fazer o esquema.

 
Postado : 31/07/2012 5:40 am
(@fabio_csantana)
Posts: 7
Active Member
 

segue em anexo o exemplo.

Obs: Desabilite as macros para verificar o código.

 
Postado : 31/07/2012 5:54 am
(@charlie-81)
Posts: 290
Reputable Member
 

Excelente.... obrigado pela resposta imediata.
kkkk... estava colocando o nome do pc no lugar de lsRetornaNomeComputador

 
Postado : 31/07/2012 5:59 am
(@charlie-81)
Posts: 290
Reputable Member
 

fabio_csantana????

Cara, quando abro a planilha ela fica oculta. Vou no gerenciador de tarefas e o excel está aberto, porém, a planilha não fica visível.

 
Postado : 31/07/2012 6:39 am
(@fabio_csantana)
Posts: 7
Active Member
 

Bom dia Charlie, da uma olhada no novo arquivo em anexo, era so acrescentar uma linha depois que se chama o módulo.

Qualquer coisa só falar

 
Postado : 31/07/2012 6:44 am
(@charlie-81)
Posts: 290
Reputable Member
 

100%... VLWS CARA.

 
Postado : 31/07/2012 6:48 am
(@rochavaldir)
Posts: 3
New Member
 

Fabio, estava procurando exatamente isso, mas como eu consigo o nome da máquina do meu cliente?
Tem algum programa ou tenho q perguntar?

Obrigado

 
Postado : 27/10/2012 1:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Será que isto serve?

Option Explicit
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, _
nSize As Long) As Long

Sub Get_Computer_Name()

'determina a máquina que está acessando
Dim Comp_Name_B As String * 255
Dim Comp_Name As String
GetComputerName Comp_Name_B, Len(Comp_Name_B)
    
Comp_Name = Left(Comp_Name_B, InStr(Comp_Name_B, Chr(0)))
        
'determina  quem está logando
Dim lpBuff As String * 25
Dim ret As Long, UserName As String
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
    
MsgBox UCase(UserName)
MsgBox Comp_Name

End Sub
 
Postado : 28/10/2012 3:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ainda assim não consigo colocar o exemplo de bloqueio em pleno...

O nome da máquina é colocado aqui?

PcUser = "NOME DA MÁQUINA"

Obrigado.

 
Postado : 28/10/2012 3:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Correcção... já está.

De salientar que no meu caso era que o nome da máquina está em maiúsculas e eu estava a escrever em minúsculas...

Obrigado mais uma vez...

 
Postado : 28/10/2012 3:07 pm
(@rochavaldir)
Posts: 3
New Member
 

Eu não entendí!!! poderia explicar de novo como faço para colocar o nome da máquina do cliente? Eu gostaria de um exemplo assim: rodar a planilha normalmente numa máquina, porém qdo eu trocar de máquina, ela não autorizar.
Obrigado.

 
Postado : 29/10/2012 11:50 am
(@valdemir)
Posts: 4
New Member
 

Como faço para esta macro se executar automaticamente? ja tenho uma Auto_Open no meu arquivo. Quando executo ela manualmente funciona no entanto ela nao está impedindo de abrir o arquivo em outras máquinas.

 
Postado : 24/05/2013 5:53 am
(@valdemir)
Posts: 4
New Member
 

Bom dia Fábio.
Parabéns pelas orientações.
Consegui fazer a macro de bloqueio conforme a sua orientação e ela funciona apenas se eu executar ela manualmente, ou seja, qd vou em outra máquina o arquivo abre normalmente, mas qd executo manualmente ele fecha o arquivo e retorna a mensagem.
O meu arquivo é de gestão econômica-financeira de empresas e tem várias macros, inclusive uma Auto_Open. Como devo proceder para que esta macro se execute automaticamente ao abrir o arquivo?

 
Postado : 24/05/2013 6:00 am
Página 1 / 2