C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Пророль, Как сделать пороль на программу?
MF_Forever
Отправлено: 14.02.2007, 23:22


Ученик-кочегар

Группа: Участник
Сообщений: 5



yu.gif Я хочу сделать так, что кагда открываеш программу первый раз, то она выдает окошко куда надо ввести пороль, если ввел неправильный — закрыть, и так до тех пор пока не ввел правильный. Когда введеш правильный пороль этого окна — нет. Если кто знает как это сделать в 6Buildere, ПОМОГИТЕ! victory.gif
AVC
Отправлено: 15.02.2007, 10:23


Ветеран

Группа: Модератор
Сообщений: 1583



Что значит "открываеш программу первый раз" — первый раз сегодня / на этой неделе / на йтой машине / на этой ОС ... ?

В чем нужна помощь — как открыть окно до запуска / где хранить информацию о числе запусков ... ?
nawok78
Отправлено: 15.02.2007, 13:04


Станционный диспетчер

Группа: Участник
Сообщений: 115



А поискать на форуме — не судьба?
Например тут!!!!
AVC
Отправлено: 15.02.2007, 17:09


Ветеран

Группа: Модератор
Сообщений: 1583



2nawok78
Это вариант решения для случая опроса при каждом запуске. Вы уверены, что именно это нужно MF_Forever?
MF_Forever
Отправлено: 16.02.2007, 00:03


Ученик-кочегар

Группа: Участник
Сообщений: 5



Мне надо, что то на подобии системы защиты.
Ответ AVC: "Первый раз" — после установки.
AVC
Отправлено: 16.02.2007, 10:36


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

Мне надо, что то на подобии системы защиты.
Ответ AVC: "Первый раз" — после установки.

Насколько "сильная" защита вам нужна? Есть специальные пакеты.
Если от дурака, то например
- записи в реестре при "первый раз на данной ос" (не сломает только ленивый)
- регистрация в не зависимом от пользователя месте (например на сайте) при "первый раз для данного пользователя"

Место опроса я бы выбрал в WinMain (см. пост Shagg от 09.02.2007, 09:52 в ссылке nawok78)
Алгоритм проверки "первости" расположил бы в LoginForm.


PS. А что, действительно есть что защищать? Есть правило — стоимость защиты не должна превосходить стоимости защищаемого объекта.
MF_Forever
Отправлено: 17.02.2007, 23:06


Ученик-кочегар

Группа: Участник
Сообщений: 5



Сначало хотябы от дурака. Я не очень силён в C++, можете мне подсказать:
1. Как занести в реестр данные при первой "удачной" загрузке проги.
Пример: В HKEY_CURRENT_USER\Physics\Registration есть 2 строчки с названиями Name и Password, надо прописать значения.;
2. Как считать из реестра выше упомянутые данные и сравнить их с правильными данными которые находятся в переменных char name, pas;.
И если вас не затруднит можете подробнее рассказать про спец. пакеты.
AVC
Отправлено: 19.02.2007, 12:08


Ветеран

Группа: Модератор
Сообщений: 1583



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);
}


Это даже не вариант, а так, направление, и пример работы с реестром.

Вернуться в Вопросы программирования в C++Builder