![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет.
есть одна идея, помогите реализовать. Начну с сути: есть пару штук ярлыков (lnk, pif). Необходимо перед их запуском потребовать ввода пароля. Все настройки хранятся в .ini файле, а именно: пароль и запускаемый ярлык. Если введенный пароль совпал - открой тот ярлык который прописан в ini. =) Для открытия ярлыка думаю можно использовать ShellExecute. Но как все связать с ini... |
|
#2
|
||||
|
||||
|
А толку? Что помешает пользователю запустить программу из "Пуск>Все программы..." или прямо с корневой папки программ?
Хотя если очень надо то вроде так: Код:
var
Form1: TForm1;
AppIni: TIniFile;
pass, programm:String;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
AppIni := TIniFile.Create('conf.ini');
pass:=AppIni.ReadString('Pass','pass1','');
programm:=AppIni.ReadString('Prog','prog1','');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
If pass=Edit1.Text then shellexecute(programm,...................);
end;
end.Последний раз редактировалось deltas, 25.11.2010 в 20:58. |
|
#3
|
|||
|
|||
|
Помешает то что рабочий стол ограничен: пуска нету, запуска командной строки тоже, настроек и всего остального.
Есть только голый рабочий стол. Жестокие спартанские условия =-)) Спасибо буду пробывать. Вопрос: как сделать скрытый ввод пароля, т.е. когда ввожу цифоровой пароль - на экране вижу знаки * или #. |
|
#4
|
||||
|
||||
|
В OnCreate формы:
Код:
SendMessage(Edit1.Handle, EM_SETPASSWORDCHAR, Ord('*'), 0); |
|
#5
|
||||
|
||||
|
А еще из INI-файла можно взять данные через простецкие строки:
Код:
var f:text;
s:string;
...
assignfile(f,'123.ini');
while not eof(f) do
begin
readln(f,s);
<обработка>
end;
closefile(f); |
|
#6
|
||||
|
||||
|
Цитата:
И CTR+ALT+DEL отключил? Каким образом убрал пуск? |
|
#7
|
||||
|
||||
|
CTRL+ALT+DEL вроде бы неотключаем.
Однако я поступил когда писал блокировщик по-хитрому: при запуске Диспетчера я его отрубаю (защита от диспетчера), прога моя записывается в авторан в реесре (защита от выхода из системы и выключения). А больше там ниче страшного нет. А пуск убрать - ниче сложного: через hw:=FindWindow(nil,имя Класса) найти панель задач (название класса по инету ходит, сча уж не помню) и ShowWindow(hw,SW_HIDE); |
|
#8
|
|||
|
|||
|
Цитата:
А еще диспечер выключается reg настройками. |
|
#9
|
||||
|
||||
|
В винХР я слышал про рег отрубание. Но в винVista/7 вроде как не пашет.
а вот с момента "замена файла ОС" пожалста поподробнее ![]() |
|
#10
|
|||
|
|||
|
Дело в том что на работе все пк под ХП. Поэтому с рег файлами проблем нет)
А файлик - это небольшая программка написанная кем-то. Один файл - он меняет рабочий стол на полностью пустой. Для возврата требуется обратный запуск файла но с другими параметрами. Вечером (если не забуду) принесу его =) |
|
#11
|
|||
|
|||
|
Ну вот уже что-то получилось =) ...
ввожу пароль - идет проверка с паролем из ini - совпало: запускаю то что прописано в ini. При неверном пароле - выдаю сообщение. Вот еще вопрос: какую процедуру запуска лучше использовать если я точно не уверен какой тип файла будет запущен??? т.е. одна программа dos'вая и запускается через .PIF другая через .lnk третья напрямую через .exe =) |
|
#12
|
||||
|
||||
|
Мб WinExec или Shellчетотам
Вроде какая-то функция из них открывает любой файл как будто по нему дважды тыкнули вроде, т.е. по стандарту. Картинку - в просмотрщике, текст - в блокноте и т.д. Хотя не юзал не разу.А пароль у вас в ИНИ-файле так и прописан? не круто. так чел однажды залезет в этот ини, посмотрит пароль и все. Лучше имхо хранить хеш (типа s[1]^2-s[2]^3+s[3]^4-s[4]^3+s[5]^2-... или любую другую бредовую формулу) и сравнивать хеши введенного и известный хеш реального пароля. Если алгоритм один, то при верном пароле хеши совпадут. А вот демонтировать хеш назад в пароль очень и очень трудно. |
|
#13
|
|||
|
|||
|
Для запуска сейчас использую: WinExec(PChar(programm),SW_SHOW);
lnk запустить не смог =( Вот про пароль я уже думал. Надумал что-то типо: Function Crypt (Text, Key: String; Encode: Boolean): String; Var I, KeyLength: integer; Sign: ShortInt; Begin KeyLength:=Length (Key); If Encode then Sign:=-1 else Sign:=1; For I:=1 to Length (Text) do Text[i]:=Chr (ord (Text[i]) +Sign*ord (Key[I mod KeyLength+1])); Result:=Text; End; ........... кодировать: куда_кодировать:=Crypt(что_кодировать, ключ, false); если true - вернет обратно. |
|
#14
|
||||
|
||||
|
Можно и так. НО хеш все равно надежнее. даже в теории для каждого хеша существует несколько вариантов пароля. Однако шанс, что чел подберет другой пароль с тем же хешом - почти равен нулю. Вытащить пароль из хеша почти нереально: ну есть у тебя число 12345. Что это? 12344+1? 12347-2? не определить. Т.е. кодировка только в одну сторону.
а насчет функций - какой-то там shell* был вроде... |
|
#15
|
||||
|
||||
|
Цитата:
Код:
uses ShellAPI; ShellExecute(Form1.Handle, 'open', 'name.lnk', nil, nil, SW_SHOW); |