Подскажите пожалуйста, можно ли в VBA (Excel) написать какую-то функцию, которая проверяла бы, например, номер процессора или еще какой-то уникальный параметр и, если он не совпадает с допустимым диапазоном, то книга не запускалась бы.
Как защитить книгу Excel?
|
17.05.2010 23:36:17
|
|
|
|
|
|
17.05.2010 23:46:41
{quote}{login=R Dmitry}{date=17.05.2010 11:45}{thema=Re: Как защитить книгу Excel?}{post}{quote}{login=ancheville}{date=17.05.2010 11:36}{thema=Как защитить книгу Excel?}{post}Подскажите пожалуйста, можно ли в VBA (Excel) написать какую-то функцию, которая проверяла бы, например, номер процессора или еще какой-то уникальный параметр и, если он не совпадает с допустимым диапазоном, то книга не запускалась бы.{/post}{/quote}
есть пример с ip , есть с мас адресом сетевой карты, есть с кодом раздела вам что по душе?{/post}{/quote} Мне интересен пример с mac-адресом сетевой карты и с кодом раздела... |
|
|
|
|
|
17.05.2010 23:46:48
Sub SpecificationsProcessor()
Dim strComputer As String Dim objWMIService As Object, colProcessor As Object, objProcessor As Object strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcessor = objWMIService.ExecQuery("SELECT * FROM Win32_Processor") For Each objProcessor In colProcessor Debug.Print "ProcessorId: " & objProcessor.ProcessorId MsgBox "ProcessorId: " & objProcessor.ProcessorId Next End Sub |
|
|
|
|
|
17.05.2010 23:50:05
{quote}{login=Юрий М}{date=17.05.2010 11:46}{thema=}{post}Sub SpecificationsProcessor()
Dim strComputer As String Dim objWMIService As Object, colProcessor As Object, objProcessor As Object strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcessor = objWMIService.ExecQuery("SELECT * FROM Win32_Processor") For Each objProcessor In colProcessor Debug.Print "ProcessorId: " & objProcessor.ProcessorId MsgBox "ProcessorId: " & objProcessor.ProcessorId Next End Sub{/post}{/quote} Юрий М - благодарю за быстры ответ по теме! |
|
|
|
|
|
17.05.2010 23:52:58
А можно определять серийный номер диска С
Sub GetDrvSerialNumber() 'Определяем номер серийного диска С на вашем компьютере MsgBox Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) End Sub допустим он будет BE164BD1 тогда можно написать такой код и поместить его в модуль ЭтаКнига (ThisWorkbook) Private Sub Workbook_Open() If Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) <> BE164BD1 Then ThisWorkbook.Close False End If End Sub |
|
|
|
|
|
17.05.2010 23:53:04
{quote}{login=ancheville}{date=17.05.2010 11:36}{thema=Как защитить книгу Excel?}{post}Подскажите пожалуйста, можно ли в VBA (Excel) написать какую-то функцию, которая проверяла бы, например, номер процессора или еще какой-то уникальный параметр и, если он не совпадает с допустимым диапазоном, то книга не запускалась бы.{/post}{/quote}
вот вам пример где то на форуме нашел admin admin
|
|||
|
|
|
|
17.05.2010 23:55:04
{quote}{login=ancheville}{date=17.05.2010 11:36}{thema=Как защитить книгу Excel?}{post}Подскажите пожалуйста, можно ли в VBA (Excel) написать какую-то функцию, которая проверяла бы, например, номер процессора или еще какой-то уникальный параметр и, если он не совпадает с допустимым диапазоном, то книга не запускалась бы.{/post}{/quote}
Sub Test() Dim wsh As Object Dim RegEx As Object, RegM As Object Dim FSO As Object, fil As Object Dim ts As Object, txtAll As String, TempFil As String Set wsh = CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") Set RegEx = CreateObject("vbscript.regexp") TempFil = "C:\myip.txt" wsh.Run "%comspec% /c ipconfig > " & TempFil, 0, True With RegEx .Pattern = "(\d{1,3}\.){3}\d{1,3}" .Global = False End With Set fil = FSO.GetFile(TempFil) Set ts = fil.OpenAsTextStream(1) txtAll = ts.ReadAll Set RegM = RegEx.Execute(txtAll) ActiveSheet.Range("A1").Value = RegM(0) ActiveSheet.Range("A1").EntireColumn.AutoFit ts.Close Kill TempFil Set ts = Nothing Set wsh = Nothing Set fil = Nothing Set FSO = Nothing Set RegM = Nothing Set RegEx = Nothing End Sub
|
|||
|
|
|
|
17.05.2010 23:55:31
{quote}{login=R Dmitry}{date=17.05.2010 11:53}{thema=Re: Как защитить книгу Excel?}{post}{quote}{login=ancheville}{date=17.05.2010 11:36}{thema=Как защитить книгу Excel?}{post}Подскажите пожалуйста, можно ли в VBA (Excel) написать какую-то функцию, которая проверяла бы, например, номер процессора или еще какой-то уникальный параметр и, если он не совпадает с допустимым диапазоном, то книга не запускалась бы.{/post}{/quote}
вот вам пример где то на форуме нашел admin admin{/post}{/quote} К Dmitry - благодарю за быстры ответ по теме! |
|
|
|
|
|
17.05.2010 23:56:01
{quote}{login=}{date=17.05.2010 11:52}{thema=}{post}А можно определять серийный номер диска С
Sub GetDrvSerialNumber() 'Определяем номер серийного диска С на вашем компьютере MsgBox Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) End Sub допустим он будет BE164BD1 тогда можно написать такой код и поместить его в модуль ЭтаКнига (ThisWorkbook) Private Sub Workbook_Open() If Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber) <> BE164BD1 Then ThisWorkbook.Close False End If End Sub{/post}{/quote} <лагодарю за быстры ответ по теме! |
|
|
|
|
|
17.05.2010 23:58:28
Юрий М, что-то у меня пустое окно высвечивается со строкой "ProcessorId: " и в Debug тоже пустое "ProcessorId: ", может из-за того, что у меня 4 ядра? Core2 Quad ?
P.C. Я не топикстартер этой темы |
|
|
|
|
|
18.05.2010 00:02:27
У меня "дву-ядрёный" - оба показывает. Может быть влияет 64/32? У меня 32-битная.
|
|
|
|
|
|
18.05.2010 00:05:26
R Dmitry, Юрий М, может отправляйте автора... Иначе планета преврратится в форум вирусописателей. ИМХО.
Я сам - дурнее всякого примера! ...
|
|
|
|
|
|
18.05.2010 00:10:08
{quote}{login=KuklP}{date=18.05.2010 12:05}{thema=}{post}R Dmitry, Юрий М, может отправляйте автора... Иначе планета преврратится в форум вирусописателей. ИМХО.{/post}{/quote}
топикстарт Вы вирусы писать не будете?
|
|||
|
|
|
|
18.05.2010 00:11:45
Топикстартер - "Поздно"
|
|
|
|
|
|
18.05.2010 00:14:54
Топикстартер - это я?
|
|
|
|
|
|
18.05.2010 00:16:55
{quote}{login=Юрий М}{date=18.05.2010 12:02}{thema=}{post}У меня "дву-ядрёный" - оба показывает. Может быть влияет 64/32? У меня 32-битная.{/post}{/quote}
у меня тоже 32-bit ( |
|
|
|
|
|
18.05.2010 00:21:46
А так?
Sub Test() Dim Computer As String Dim WMI As Variant Dim Items As Variant Dim Item As Variant Computer = "." Set WMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2") Set Items = WMI.ExecQuery("Select * from Win32_Processor") For Each Item In Items Debug.Print Item.ProcessorId MsgBox Item.ProcessorId Next End Sub |
|
|
|
|
|
18.05.2010 00:29:37
хм, а так ошибка 94 "Invalid use of Null" на строке:
MsgBox Item.ProcessorId а в Debug-окне написано "Null" |
|
|
|
|
|
18.05.2010 00:32:15
Вот этот код тоже почти пустое сообщение создаёт
Sub Example_3() Dim objCollection As Object, objWMI As Object, objItem As Object Set objWMI = GetObject("winmgmts:\\.\root\CIMV2") Set objCollection = objWMI.ExecQuery("select * from Win32_Processor") For Each objItem In objCollection MsgBox "Caption: " & objItem.Caption & vbCrLf & _ "Name: " & objItem.Name & vbCrLf & _ "ProcessorId: " & objItem.ProcessorId & vbCrLf & _ "ProcessorType: " & objItem.ProcessorType & vbCrLf & _ "Revision: " & objItem.Revision & vbCrLf & _ "Version: " & objItem.Version & vbCrLf & vbCrLf & _ "SystemName: " & objItem.SystemName Exit For Next End Sub Есть только Caption, Name и System Name |
|
|
|
|
|
18.05.2010 00:35:49
У меня сработал. Я читал, что не все процессоры сообщают свой ID. Насколько верна эта информация - мне судить трудно.
|
|
|
|
|
|
18.05.2010 00:43:37
Ну, фиг с ним ) Мы дали топикстартеру идея для размышления )
|
|
|
|
|
|
18.05.2010 00:57:20
Попробуйте запустить этот код:
Sub Info() Dim i As Integer On Error Resume Next For i = 1 To 29 Cells(i, "A") = Environ(i) Next End Sub Хоть что-нибудь про процессор есть? Строки 15:18 |
|
|
|
|
|
18.05.2010 01:05:10
Вот что написал
NUMBER_OF_PROCESSORS=4 OS=Windows_NT PROCESSOR_ARCHITECTURE=x86 PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel PROCESSOR_LEVEL=6 PROCESSOR_REVISION=170a P.S. У меня проц "Intel® Core2 Quad CPU Q9650 @ 3.00GHz" Windows 7 |
|
|
|
|
|
18.05.2010 01:08:46
А строка MsgBox "Caption: " & objItem.Caption в выложенном мною коде (Sub Example_3()) выдаёт такую строчку
x64 Family 6 Model 23 Stepping 10 не пойму при чём тут "х64" |
|
|
|
|
|
18.05.2010 01:14:56
Намекает, наверное, что могёт и с 64 работать
|
|
|
|
|
|
18.12.2010 22:32:47
Добрый вечер.
Ребята, пожалуйста подскажите как защитить книгу так, что-бы кто либо попытался бы войти через Visual Basic, то появилось бы сообщение, которое прикреплено ниже. Такой защитой защищена надстройка"PLEX", находящаяся на этом ресурсе. Заранее благодарю |
|
|
|
|
|
18.12.2010 22:38:13
Защитить проект, наверное? Правый клик на проекте - Свойства - Закладка Защита.
|
|
|
|
|
|
18.12.2010 22:56:19
{quote}{login=Юрий М}{date=18.12.2010 10:38}{thema=}{post}Защитить проект, наверное? Правый клик на проекте - Свойства - Закладка Защита.{/post}{/quote}
Юрий М, как вы предлагаете, появляется другое сообщение, файл приложен к сообщению.Таким образом я защищал, но защита снимается за 5 секунд программой Advanced Office Password Recovery v4.11, сегодня проводил эксперимент, а "PLEX" не взломаешь,и поэтому так же хочется защитить проект. |
|
|
|
|
|
18.12.2010 23:00:07
Для книги (2003): Сохранить Как - Сервис - Общие параметры
|
||||
|
|
|
|||
Читают тему