Что нового

Ограничение по количеству запусков

Alexander

Новичок
Сообщения
105
Репутация
2
Как ограничить программу по количеству запусков? Например, чтоб данные записывало в реестр. Причем считаться количество должно после того, как ввел правильный пароль (т.е. ограничение по запуску самой программы, а не по запуску окна для ввода пароля).
:smile:
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
С помощью RegRead() читаем из реестра сохранённое кол-во запусков. Если ещё не сохранялось, значит 0.
Если лимит превышен, прерываем работу.
После правильного ввода пароля прибавляем к полученному кол-ву запусков единицу.
С помощью RegWrite() пишем полученную сумму обратно в реестр.

ЗЫ
Где то уже была такая тема с примерами.
 
Автор
A

Alexander

Новичок
Сообщения
105
Репутация
2
Вот, что набросал:

Код:
$superpass   = 'qwerty'
While 1
    $i  = InputBox ('Super script', 'Enter password', '', '*',200 , 120)
    If @error OR $i = "" Then Exit
    If StringCompare($i, $superpass) = 0 Then
        MsgBox(0, '', 'ta da... password is right')
		ExitLoop
	Else
        MsgBox(0, '', 'Sorry pall, wrong password. Try again')
	EndIf
WEnd
$var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\", "TestKey")
If $var = "" Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_SZ", "0")	
$1 = Abs ($var+1)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_SZ", $1)
$var1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\", "TestKey")
If $var1 > "3" Then MsgBox(4096, "Сообщение", 'Лимит по количеству запусков превышен') 
If $var1 > "3" Then Exit 
; код программы


Может есть лучше варианты? А то чего-то медленно работает...
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Код:
$superpass = 'qwerty'
While 1
	$i = InputBox ('Super script', 'Enter password', '', '*',200 , 120)
	If @error OR $i = '' Then Exit
	If StringCompare($i, $superpass) = 0 Then
		MsgBox(0, '', 'ta da... password is right')
		ExitLoop
	Else
		MsgBox(0, '', 'Sorry pall, wrong password. Try again')
	EndIf
WEnd

$var = RegRead('HKLM\SOFTWARE\test', 'TestKey')
If $var = '' Or StringRegExp($var, '[^0-9]') Then
	$var = 1
	RegWrite('HKLM\SOFTWARE\test', 'TestKey', 'REG_SZ', $var)
ElseIf $var > 3 Then
	MsgBox(4096, 'Сообщение', 'Лимит по количеству запусков привышен')
	Exit
Else
	$var += 1
	RegWrite('HKLM\SOFTWARE\test', 'TestKey', 'REG_SZ', $var)
EndIf
; код программы


Были лишние обращения к реестру и проверка условий.
Например:
Код:
If $var1 > "3" Then MsgBox(4096, "Сообщение", 'Лимит по количеству запусков превышен') 
If $var1 > "3" Then Exit

лучше делать так:
Код:
If $var1 > 3 Then
	MsgBox(4096, 'Сообщение', 'Лимит по количеству запусков превышен') 
	Exit
EndIf
 
Автор
A

Alexander

Новичок
Сообщения
105
Репутация
2
dwerf
Аж на пятый запуск оно пишет, что лимит превышен...
Нужно, чтоб оно читало уже с добавленной, при этом запуске, единицей. А оно не так считает. Последняя строчка моего скрипта так делает:

Код:
$var1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\", "TestKey")

Можешь исправить? :smile:
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Alexander сказал(а):
Можешь исправить?
Замени
Код:
ElseIf $var > 3 Then ;Если программа запускалась больше трёх раз
ElseIf $var >= 3 Then ;Если программа запускалась три или больше раза
 
Автор
A

Alexander

Новичок
Сообщения
105
Репутация
2
Ну так там можно и 2 поставить ;D
А как такое решение (писал без пароля)?

Код:
$var = RegRead('HKLM\SOFTWARE', 'TestKey')
If $var = '' Or StringRegExp($var, '[^0-9]') Then RegWrite('HKLM\SOFTWARE', 'TestKey', 'REG_SZ', '1')
$var += 1
RegWrite('HKLM\SOFTWARE', 'TestKey', 'REG_SZ', $var)
If $var > 3 Then 
MsgBox(4096, 'Сообщение', 'Лимит по количеству запусков привышен')
Exit
EndIf
; код программы
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Alexander сказал(а):
А как такое решение (писал без пароля)?

Если запись отсутствует или не верна, будет произведено 2 записи в реестр вместо одной.
Если в реестре уже записано чтото типа "NENAP_0x545aac" то неизвестно что получится после
$var += 1.
 
Автор
A

Alexander

Новичок
Сообщения
105
Репутация
2
Если запись отсутствует или не верна, будет произведено 2 записи в реестр вместо одной.
Я тоже так думал, но это не так. Записалось 1 в реестр ;)
Вот проверь...
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Alexander сказал(а):
Я тоже так думал, но это не так. Записалось 1 в реестр Вот проверь...
Я имею ввиду что программе понадобится два раза доступ в реестр вместо одного, будет проведена лишняя операция - медленнее работает скрипт.
 
Верх