MF_Forever |
Отправлено: 14.02.2007, 23:22 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
![](/discussion/style_images/1/spacer.gif)
|
Я хочу сделать так, что кагда открываеш программу первый раз, то она выдает окошко куда надо ввести пороль, если ввел неправильный — закрыть, и так до тех пор пока не ввел правильный. Когда введеш правильный пороль этого окна — нет. Если кто знает как это сделать в 6Buildere, ПОМОГИТЕ! |
![](/discussion/style_images/1/spacer.gif) |
AVC |
Отправлено: 15.02.2007, 10:23 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
![](/discussion/style_images/1/spacer.gif)
|
Что значит "открываеш программу первый раз" — первый раз сегодня / на этой неделе / на йтой машине / на этой ОС ... ?
В чем нужна помощь — как открыть окно до запуска / где хранить информацию о числе запусков ... ? |
![](/discussion/style_images/1/spacer.gif) |
nawok78 |
Отправлено: 15.02.2007, 13:04 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 115
![](/discussion/style_images/1/spacer.gif)
|
А поискать на форуме — не судьба?
Например тут!!!! |
![](/discussion/style_images/1/spacer.gif) |
AVC |
Отправлено: 15.02.2007, 17:09 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
![](/discussion/style_images/1/spacer.gif)
|
2nawok78
Это вариант решения для случая опроса при каждом запуске. Вы уверены, что именно это нужно MF_Forever? |
![](/discussion/style_images/1/spacer.gif) |
MF_Forever |
Отправлено: 16.02.2007, 00:03 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
![](/discussion/style_images/1/spacer.gif)
|
Мне надо, что то на подобии системы защиты.
Ответ AVC: "Первый раз" — после установки. |
![](/discussion/style_images/1/spacer.gif) |
AVC |
Отправлено: 16.02.2007, 10:36 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
![](/discussion/style_images/1/spacer.gif)
|
QUOTE |
Мне надо, что то на подобии системы защиты.
Ответ AVC: "Первый раз" — после установки.
|
Насколько "сильная" защита вам нужна? Есть специальные пакеты.
Если от дурака, то например
- записи в реестре при "первый раз на данной ос" (не сломает только ленивый)
- регистрация в не зависимом от пользователя месте (например на сайте) при "первый раз для данного пользователя"
Место опроса я бы выбрал в WinMain (см. пост Shagg от 09.02.2007, 09:52 в ссылке nawok78)
Алгоритм проверки "первости" расположил бы в LoginForm.
PS. А что, действительно есть что защищать? Есть правило — стоимость защиты не должна превосходить стоимости защищаемого объекта. |
![](/discussion/style_images/1/spacer.gif) |
MF_Forever |
Отправлено: 17.02.2007, 23:06 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
![](/discussion/style_images/1/spacer.gif)
|
Сначало хотябы от дурака. Я не очень силён в C++, можете мне подсказать:
1. Как занести в реестр данные при первой "удачной" загрузке проги.
Пример: В HKEY_CURRENT_USER\Physics\Registration есть 2 строчки с названиями Name и Password, надо прописать значения.;
2. Как считать из реестра выше упомянутые данные и сравнить их с правильными данными которые находятся в переменных char name, pas;.
И если вас не затруднит можете подробнее рассказать про спец. пакеты. |
![](/discussion/style_images/1/spacer.gif) |
AVC |
Отправлено: 19.02.2007, 12:08 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
![](/discussion/style_images/1/spacer.gif)
|
CODE |
bool AskPassword() { ShowMessage("Функция опроса и сравнения пароля, возврат true — можно работать"); return true; }
void __fastcall TForm1::Bt_RegClick(TObject *Sender)
{
AnsiString SubKey = "Software\My Unique Name\" + ExtractFileName(Application->ExeName);
HKEY hKey;
DWORD what;
long lerr;
lerr = RegCreateKeyEx
(HKEY_CURRENT_USER
,SubKey.c_str()
,0
,""
,REG_OPTION_NON_VOLATILE
,KEY_ALL_ACCESS
,NULL
,&hKey
,&what
);
if (lerr != ERROR_SUCCESS)
{ ShowMessage("Не могу открыть/создать ключ");
return;
}
char *name = "access";
DWORD type = REG_DWORD;
DWORD acc = 0;
DWORD size = sizeof(acc);
if (what == REG_CREATED_NEW_KEY)
lerr = RegSetValueEx (hKey, name, 0, type, LPBYTE(&acc), size);
else
lerr = RegQueryValueEx (hKey, name, NULL, &type, LPBYTE(&acc), &size);
if (lerr != ERROR_SUCCESS)
{ AnsiString str = AnsiString::StringOfChar(' ', 250);
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
lerr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
str.c_str(),
str.Length(),
NULL
);
ShowMessage("Не могу получить значение для ключа\r\n" + str);
return;
}
if (acc == 0 && AskPassword())
{ acc = 1;
lerr = RegSetValueEx (hKey, name, 0, type, LPBYTE(&acc), size);
}
RegCloseKey(hKey);
}
|
Это даже не вариант, а так, направление, и пример работы с реестром.
|
![](/discussion/style_images/1/spacer.gif) |