Controlar desde que PC se abre un archivo de Excel
Hace unos dias me pidieron que determinado excel solo pueda ser abierto desde algunas PC, con lo cual me puse a ver algunas alternativas, la primera fue poner una contraseña al excel, pero, esto no soluciona el problema de que sea abierto solo en algunas PC.
Entonces se me ocurrio que el excel controlara (al abrirse) dede que PC se esta briendo, para esto determine que la mejor forma de hacerlo era revisando la MAC Address de la PC.
Se que no es una forma muy segura y que existen formar de clonar la MAC Addres, etc, pero, hasta el momento no se me ha ocurrido algo mejor, escucho ofertas. Aca esta la "implementación" de lo descripto anteriormente
' GetTempPath
' La función de la API de GetTempPath permite determinar la ubicación de ruta de acceso
' de carpeta temporal de un sistema. Toma dos parámetros: la longitud de una cadena de
' longitud fijo o pre-initialized que contendrá el nombre de la ruta de acceso y la
' cadena de sí misma. Debe utilizar una cadena longitud fija o una cadena inicializada
' con una longitud que crees será longitud suficiente para incluir la información de
' ruta de acceso. Esto es para garantizar que Visual Basic asigna suficiente espacio
' de búfer para Windows devolver la información.
' GetTempPath devuelve la longitud del nombre de ruta de acceso medido en bytes o
' 0 si se produce un error. Si el valor devuelto es mayor que el tamaño del búfer
' que especificó, entonces no hay información de ruta de acceso se escribió en la cadena.
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Const MAX_PATH = 260
' Esta función utiliza la API de Windows GetTempPath para obtener
' la carpeta temporal
Private Function GetTmpPath()
Dim sFolder As String ' Nombre de la carpeta temporal
Dim lRet As Long ' Largo
sFolder = String(MAX_PATH, 0)
lRet = GetTempPath(MAX_PATH, sFolder)
If lRet <> 0 Then
GetTmpPath = Left(sFolder, InStr(sFolder, _
Chr(0)) - 1)
Else
GetTmpPath = vbNullString
End If
End Function
' Obtenemos la MAC a traves de un comando de windows ipconfig
' esta version solo funcionaria con windows xp en español
' si tienes una version distinta o distinto lenguale deberias
' cambiar el comando find ""Direcci¾n fÝsica"".
' El resultado de comando lo guarda en un archivo llamado max.txt
' ubicado en la carpeta temporal del usuario actual del sistema.
' Luego se abre el archivo mac.txt y busca la direccion mac en
' cierta posición (mas puntualmente 17 caracteres comenzando en
' en el caracter 45 de la linea 1 del archivo).
' Lo que encuentre en esa posicion es devuelto como la mac de la pc.
Function Get_MAC_Address(strComputer)
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
dTemp = GetTmpPath()
objShell.Run "cmd /c ipconfig /all | find ""Direcci¾n fÝsica"" > " & dTemp & "\MAC.txt | cd %temp%", 0, True
Set objMACFile = objFSO.OpenTextFile(dTemp & "\MAC.txt", 1, False)
While Not objMACFile.AtEndOfStream
strLine = objMACFile.ReadLine
If Len(strLine) > 35 Then
strMAC = Mid(strLine, 45, 17)
End If
Wend
objMACFile.Close
Set objMACFile = Nothing
Set objShell = Nothing
Set objFSO = Nothing
Get_MAC_Address = strMAC
End Function
' cuando el archivo es cerrado se vuelve a proteger el libro
' y se guarda antes de cerrar.
Private Sub Workbook_Deactivate()
ThisWorkbook.Protect ("$esta$es$una$prueba$de$seguridad$")
Hoja1.Protect ("$esta$es$una$prueba$de$seguridad$")
ThisWorkbook.Save
End Sub
' cuando es abierto se controla que la mac que devuelve la
' funcion get_mac_address sea la autorizada, esa direccion
' debe ser modificada por la correcta.
' en caso de ser correcta se muestra un mensaje al usuario
' indicando que esta autorizado a abrir el excel.
' en caso contrario se muestra un mensaje de que no esta
' autorizado y se cirra el excel.
Private Sub Workbook_Open()
If (Get_MAC_Address(strComputer) = "08-00-27-B0-D6-A1") Then
MsgBox ("Seguridad OK")
ThisWorkbook.Unprotect ("$esta$es$una$prueba$de$seguridad$")
Hoja1.Unprotect ("$esta$es$una$prueba$de$seguridad$")
Else
MsgBox ("Su PC no esta autorizada para abrir este documento")
ThisWorkbook.Close
End If
End Sub
Lo único que faltaría seria poner un buenas contraseña al modulo (o sea el código).

Comentarios
y saltos de línea?
aparentemente al modulo que muestra el codigo( SyntaxHighlighter), me borra los saldos de lineas...
El problema era que tenia algunos plugin como remove format
Enviar un comentario nuevo