|
|
Регистрация | << Правила форума >> | 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); jmp $ ; Happy End! The Cake Is A Lie. |
#6
|
||||
|
||||
Цитата:
И CTR+ALT+DEL отключил? Каким образом убрал пуск? |
#7
|
||||
|
||||
CTRL+ALT+DEL вроде бы неотключаем.
Однако я поступил когда писал блокировщик по-хитрому: при запуске Диспетчера я его отрубаю (защита от диспетчера), прога моя записывается в авторан в реесре (защита от выхода из системы и выключения). А больше там ниче страшного нет. А пуск убрать - ниче сложного: через hw:=FindWindow(nil,имя Класса) найти панель задач (название класса по инету ходит, сча уж не помню) и ShowWindow(hw,SW_HIDE); jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
|||
|
|||
Цитата:
А еще диспечер выключается reg настройками. |
#9
|
||||
|
||||
В винХР я слышал про рег отрубание. Но в винVista/7 вроде как не пашет.
а вот с момента "замена файла ОС" пожалста поподробнее jmp $ ; Happy End! The Cake Is A Lie. |
#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-... или любую другую бредовую формулу) и сравнивать хеши введенного и известный хеш реального пароля. Если алгоритм один, то при верном пароле хеши совпадут. А вот демонтировать хеш назад в пароль очень и очень трудно. jmp $ ; Happy End! The Cake Is A Lie. |
#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* был вроде... jmp $ ; Happy End! The Cake Is A Lie. |
#15
|
||||
|
||||
Цитата:
Код:
uses ShellAPI; ShellExecute(Form1.Handle, 'open', 'name.lnk', nil, nil, SW_SHOW); |