Страницы: 1
RSS
Хранение переменных в реестре
 
Подскажите есть ли какойнибуть способ записывать удалать, знаячения в реестре: при запуске книги    
Проверить существует ли на существования  
 
[HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot]
"Id"="45445871"  
если его не существует то записать на его место
 
Есть.    
Но каким боком тут Эксель?
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}Есть.    
Но каким боком тут Эксель?{/post}{/quote}  
Ну так сказать мне необходимо несколько переменных хранить в екселеа и при открытии книги получать эти значения
 
{quote}{login=}{date=27.02.2011 11:01}{thema=Re: }{post}{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}Есть.    
Но каким боком тут Эксель?{/post}{/quote}  
Ну так сказать мне необходимо несколько переменных хранить в екселеа и при открытии книги получать эти значения{/post}{/quote}  
пардон в реестре
 
Для работы с реестром в VBA есть несколько функций (напр., GetSetting), но они записывают все данные в определенную папку. Чтобы читать и изменять прочие ветки реестра нужно впроект добавить класс для работы с ним.  
Например: http://refactormycode.com/codes/726-vb6-registry-editing-class
 
{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}каким боком тут Эксель?{/post}{/quote}  
Серж, ты вопрос перечитай: "при запуске книги Проверить существует ли..."
 
Цитата:  
=================  
Работаем с реестром  
 
Visual Basic умеет работать только с веткой HKEY_CURRENT_USER\ Software\VB and VBA Program Setting и только со строковыми ключами, но этого вполне достаточно, чтобы сохранять и считывать настройки своих программ:  
 
Запись данных в реестр:  
SaveSetting AppName, Section, Key, Setting '// AppName - название вашей программы,  
Section - ключ, Key - имя параметра, Setting - строковое значение параметра  
 
Чтение данных из реестра:  
GetSetting AppName, Section, Key, Default '// AppName - название вашей программы,  
Section - ключ, Key - имя параметра, Default - значение, которое будет возвращено функцией, если параметра не существует  
 
Удаление данных из реестра:  
DeleteSetting AppName, Section, Key '// AppName - название вашей программы,  
Section - ключ, Key - имя параметра  
 
Примечание: если вы хотите удалить подраздел целиком, то имя ключа указывать не нужно.  
 
Получение всех имён и значений параметров заданного ключа:  
GetAllSetting AppName, Section '// AppName - название вашей программы,  
Section - ключ  
 
Пример:  
 
Dim intKeys As Integer, strKeys As Variant '// Объявляем переменные  
 
strKeys = GetAllSettings("MyApp", "MySection") '// Используем функцию GetAllSettings  
 
For intKeys = LBound(strKeys, 1) To UBound(strKeys, 1) '// Получаем границы массива ключей и выполняем цикл  
 
Debug.Print strKeys(intKeys, 0), strKeys(intKeys, 1) '// Выводим результат  
 
Next intKeys  
 
Теперь вы знаете все функции, которые предоставляет VB для работы с реестром.  
 
Источник: http://vbkoders.net.ru    
=======================  
Не проверял.
 
Хотя вот есть примеры, можно собрать код:  
 
http://www.vbsedit.com/scripts/os/registry/default.asp
 
{quote}{login=Юрий М}{date=27.02.2011 11:32}{thema=Re: }{post}{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}каким боком тут Эксель?{/post}{/quote}  
Серж, ты вопрос перечитай: "при запуске книги Проверить существует ли..."{/post}{/quote} Юр, меня смутла строка [HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot]
Calc это приложение OpenOffice.
Я сам - дурнее всякого примера! ...
 
Public Sub www()  
   Dim s$, WshShell As Object  
   Set WshShell = CreateObject("WScript.Shell")  
   On Error Resume Next  
   s = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\id")  
   If Err Then  
       Err.Clear  
       WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\Id", "45445871"  
       'MsgBox WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\id")  
       'WshShell.RegDelete "HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\id"  
   End If  
End Sub
Я сам - дурнее всякого примера! ...
 
Народ, а может проще не заморачиваться с реестром, а хранить значения в Personal.xls?  
1 способ - в ячейках листа Лист1  
2 способ - в его коллекции CustomDocumentProperties ?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Это если есть PERSONAL.XLS - у клиента его может и не быть.  
Как может и не быть прав на запись в реестр.  
А вот права на запись текстового файла в папку пользователя обычно есть.
 
{quote}{login=}{date=27.02.2011 11:01}{thema=Re: }... мне необходимо несколько переменных хранить в екселеа и при открытии книги получать эти значения{/post}{/quote}  
Если значения нужны для всего Ёкселя, то хранить можно, например, как Список (Сервис-Параметры-Списки-...)  
А если только для конкретной книги, то в её CustomDocumentProperties.  
Например, вот так:  
Sub Save_Val_in_DocProp()   ' сохранить в CustomDocumentProperties текущией книги значение  
  Dim sMyVal$: sMyVal = "MyVal"   ' значение, которое нужно сохранить  
  With ThisWorkbook.CustomDocumentProperties  
     On Error Resume Next  
     .Add Name:="BookSetting", LinkToContent:=False, Type:=msoPropertyTypeString, Value:=""  
     .Item("BookSetting").Value = sMyVal  
  End With  
End Sub  
 
Sub Restore_Val_from_DocProp()    ' считать из CustomDocumentProperties текущией книги сохранённое значение  
  Dim sMyVal$  
  On Error Resume Next  
  sMyVal = ThisWorkbook.CustomDocumentProperties.Item("BookSetting").Value  
  If Err Then sMyVal = "Error"  
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
мой проект находиться на этапе защиты!  
мои идеи реализации были следующие  
-при первом открытии книги спрашивается серийный номер человек вводит(записываться значение в реестр)  
- следующий этап проверка hosts файла на наличие в нём содержимого связанные с сайтом проверки илцензии  
- Далее поределяем ip адрес  
- заходим на сайт на скрытыю страницу(подтвердение того что сайт именно тот)    
-после чего идёт веб запрос на страницу xxx.ru/index.php?lic=(Переменная которая храниться в реестре)&id=(серийный номер диска с)  
-php код проходиться по базе данного серийного номера и если находить такой серийный номер диска с то выводим 1  
если 1 то продолжаем работать если 0 то отказываемся
 
И чем не устраивает мой вариант от 28.02.2011, 08:35? Или слишком сложный?
Я сам - дурнее всякого примера! ...
 
Сколько копий будет работать с одним серийным номером?
 
{quote}{login=Hugo}{date=28.02.2011 03:30}{thema=}{post}Сколько копий будет работать с одним серийным номером?{/post}{/quote}  
от 1 до 50  
тоже думал насчёт как реализовать, с тем учётом что могут меняться винты и соответственно серийные номера! придумал следующую схему.  
количество лицензий соответственно у начальника или у админа будет досутуп к админской части где он будет забивать серийные номера!
 
{quote}{login=Hugo}{date=28.02.2011 03:30}{thema=}{post}Сколько копий будет работать с одним серийным номером?{/post}{/quote}  
пока не проверял! я просто описал как хочу реализовать так сказать информация к размышлению!
Страницы: 1
Наверх