![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать, чтобы форму нельзя было закрыть [D7, NT4, 2000, XP]
GrBob © (2006-03-31 00:27:00)Требуется, чтобы форму нельзя было закрыть, причем ни стандартными способами (крестик, Алт - Ф4), но и через диспетчер задач. Так же чтобы ее нельзя было свернуть, открыть что-нибудь поверх и т.д. С простым закрытием я разобрался (OnCloseQuery), а вот с диспетчером и сворачиванием не знаю как :( В двух словах - надо, чтобы пользователь не смог ничего сделать, пока не нажмет кнопку на форме.
Гость235689 (2006-04-10 17:44:00) [1]А я писал такого рода прогу на Pascal-е и вписывал ее в Autoexec.bat.
Для заурядных пользователей - это целая проблема.
Еще можно в Biose запаролить, правда для продвинутых и это не камень предткновения.
А раз я был свидетелем того, как ребята вытянули батарейку из чужого компа (дело было в общаге), чтобы поиграть, включили комп и батарейку назад не ставили, мол если поставят, то комп снова пароль спросит ! :-)
Delphi5.01 (2006-04-04 13:17:00) [2]А самым банальным решением будет:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
end;
Если вы решите проблуму с тас менеджером то данный вариант супер. Кстати есть алгоритм при котором запушено 2 программы и каждая поддреживает друг друга, типа если первую закрыли то мгновенно запускаеться вторая и наоборот. Многи вирусы именно так и делают, единственным решением являеться убить процессы програмно :-) Одновременно :-)
Delphi5.01 (2006-04-04 13:13:00) [3]2 GrBobесли честно это одна из частей программирования в которой я не разбираюсь, так и не хватило тогда времени все разобрать. А на счет того что хуки довольно кодо обемные то я с вами согласен, я просто взял рабочий пример и переделал под себя, хотя данный материал обемный и требует большого внимания при употреблении :-)
Удачи вам
GrBob (2006-04-03 18:56:00) [4]Еще раз всех благодарю. Вы мне подкинули столько информации к размышлению, просто жуть. Хотя, благодаря тов. sniknik думаю уйдет все же не месяц, но пара дней точно, за что ему отдельная благодарность :)
2 Delphi5.01:
С хуками я как-то однажды работал, так там хуки прописывать придется больше, чем сама рабочая часть программы. Хотя все же возможно и обращусь к ним за помощью, т.к. пока не знаю, что там еще понадобится :)
2 Asail:
а) Стандартный логин имеет некоторые недостатки для моей задачи, а именно мне нужна при залогинивании пользователя еще и другая инфа, кроме той, что зашел именно он, а не кто-нибудь другой.
б) Все что относится к системному администрированию можно отнести и к программированиию. Думаю, что этот параметр можно изменить и программными средствами, но пока это не суть важно.
Anatoly Podgoretsky (2006-04-01 15:21:00) [5]А выключать будешь кнопкой Reset?
Asail (2006-04-01 13:35:00) [6]
> Malik © (01.04.06 13:29) [22]
> А если ее в реестре прописать в автозагрузку?
А какая разница? В SafeMode можно и из реестра удалить или msconfig использовать... Так что без разницы.
Malik (2006-04-01 13:29:00) [7]>А как сию "прогу для логина" запускать собираешся?
>У пользователя всегда есть возможность зайти в SafeMode или после >стандартного виндовского логина Shift удерживать...
>После чего спокойненько убрать твою прогу из автозагрузки.
>Так что, ИМХО, ограничить доступ в винду кроме как через policy >вряд-ли можно!
А если ее в реестре прописать в автозагрузку?
sniknik (2006-04-01 11:58:00) [8]ударение надо ставить на "вроде видел", а уж вроде там или не там неважно (но и там тоже видел, не статью, обсуждение, вторая ссылка из этого обсуждения)
http://wasm.ru/forum/index.php?action=vthread&topic=10466&forum=10&page=-1
http://www.rsdn.ru/article/baseserv/extgina.xml
+ перехват
> http://kladovka.net.ru/index.cgi?pid=lastcomments&ppn=2
cad_zamena.zip
kaZaNoVa : 2005-06-25 12:17:06
p.s. искать тоже надо уметь
p.p.s. до сих пор мало инфы/примеров? или еще пару месяцев поискать. ;)
Delphi5.01 (2006-04-01 11:02:00) [9]sniknik
> в принципе, поискать, можно и пример реализации найти (на
> masm.ru вроде видел)
Вроде и точно видел это не одно и тоже, как я помню обяснение было таково что клавишы CTL+ALT+DEL отлавливаються системой на очень низком уровне, еще до того как любая программа сможет прехватить и обрабатываеться, а уж потом передаеться вашей программе :-)
sniknik (2006-04-01 09:38:00) [10]Delphi5.01 © (01.04.06 09:25) [18]
> где не искал и т.д.
прямо в этой ветке ->
Eraser © (31.03.06 13:52) [7]
особое внимание на GINA DLL и CTL+ALT+DEL
в принципе, поискать, можно и пример реализации найти (на masm.ru вроде видел)
Delphi5.01 (2006-04-01 09:25:00) [11]Уважаемый топик стартер, то что вы хотите сделать легко реализуеться обыкновенным клавиатурным хуком о котором вы найдете много сатей как в инернете так и на этом сайте, но хочу предупредить что вызов Alt+Ctrl+Del вы не сможете отловить, это уже "сверху" дядя бил прикрыл от таких как вы :-) Можете даже не стараться, я сам лично 2 месяца пытался и ничего не вышло, где не искал и т.д.
п.с. Хотя кто знает ;-)
sniknik (2006-04-01 09:15:00) [12]> Если знаешь как, может и пол часа, но для меня это все новое, придется разбираться.
нет это именно с поразбираться(/поиск и инете) полчаса, если знаеш то на пять мин тянет. причем тебе я еще 10 мин накинул, на неопытность ;), просто прочитал вчера тоже впервые, что вот так можно создать для программы десктоп, заинтересовало, решил попробовать (такто оно мне не нужно, а раз не нужно то и не касаешся этого) у меня вышел рабочий пример за 15-20 мин. (накинул 10 и написал полчаса ;о))
на самом деле, ничего сложного.
пример запуска программы на "своем" десктопе
function MyThread(Parameter: Pointer): Integer; stdcall;
var
hdeskNew, hdeskOld: THandle;
StInfo: TStartupInfo;
PrInfo: TProcessInformation;
begin
hdeskNew:= CreateDesktop('MyDesktop', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, MAXIMUM_ALLOWED, nil);
if hdeskNew <> 0 then begin
hdeskOld:= GetThreadDesktop(GetCurrentThreadId());
SetThreadDesktop(hdeskNew);
SwitchDesktop(hdeskNew);
MessageBox(0, 'Hello from ''MyDesktop''!', '', MB_OK);
ZeroMemory(@StInfo, SizeOf(StInfo));
StInfo.cb:= SizeOf(StInfo);
StInfo.lpDesktop:= PChar('MyDesktop');
StInfo.wShowWindow:= SW_SHOW;
if (CreateProcess(nil, 'notepad.exe', nil, nil, False, 0, nil, nil, StInfo, PrInfo)) then begin
WaitForSingleObject(PrInfo.hProcess, INFINITE);
CloseHandle(PrInfo.hProcess);
CloseHandle(PrInfo.hThread);
end;
SwitchDesktop(hdeskOld);
SetThreadDesktop(hdeskOld);
CloseDesktop(hdeskNew);
end;
result:= 0;
end;
procedure TfrmPing.Button2Click(Sender: TObject);
var ThreadId: DWORD;
begin
CreateThread(nil, 0, @MyThread, nil, 0, ThreadId);
end;
Asail (2006-04-01 00:45:00) [13]
> А это что? Поподробнее, пожалуйста.
А это уже не к программированию, а к системному администрированнию относится.
В XP, например, запусти через Start->Run gpedit.msc .
Там можно поотключать много чего.
К примеру, зайди в User Configuration->Administrative Templates->System->Ctrl+Alt+Del Options и выстави параметр "Remove Task Manager" в Enabled.
После чего данный пользователь уже не сможет запустить диспетчер задач вообще. Даже, если в Safe Mode зайдет.
Обычно, правда, policy задают с сервера для всех пользователей и компов в сети. Так-что это все немного не по теме.
К тому-же чем не устраивает стандартный логин винды с паролями?
GrBob (2006-04-01 00:10:00) [14]
> sniknik © (31.03.06 14:35) [12]
> > Всем спасибо, теперь у меня работы на месяц вперед :)
> ???? десктоп создать? пол часа. или решил GINA переписать?
>
Если знаешь как, может и пол часа, но для меня это все новое, придется разбираться. На русском хелпу не нашел, придется читать Мсдн, а это тоже не быстро. Так что.... месяц :)
PS. Может кто посоветует какую литературу на Русском с экзамплами?
> Asail (31.03.06 23:17) [14]
> Так что, ИМХО, ограничить доступ в винду кроме как через
> policy вряд-ли можно!
А это что? Поподробнее, пожалуйста.
Asail (2006-03-31 23:17:00) [15]А как сию "прогу для логина" запускать собираешся?
У пользователя всегда есть возможность зайти в SafeMode или после стандартного виндовского логина Shift удерживать...
После чего спокойненько убрать твою прогу из автозагрузки.
Так что, ИМХО, ограничить доступ в винду кроме как через policy вряд-ли можно!
Malik (2006-03-31 20:09:00) [16]Есть очень простой способ при выключении программы, она влючает сново сама себя. Да только есть дыра ее можно отключить через процессы
sniknik (2006-03-31 14:35:00) [17]> Всем спасибо, теперь у меня работы на месяц вперед :)
???? десктоп создать? пол часа. или решил GINA переписать?
GrBob (2006-03-31 14:02:00) [18]Всем спасибо, теперь у меня работы на месяц вперед :)
DiamondShark (2006-03-31 13:56:00) [19]Да, GINA -- это, конечно, самый верный способ...
Вот только писать её -- занятие не для слабонервных :)
DiamondShark (2006-03-31 13:54:00) [20]
> Никто не подскажет ссылки на статьи по этому вопросу или
> хотя бы идею, в каком направлении смотреть?
В этом направлении:
http://msdn.microsoft.com/library/en-us/dllproc/base/window_stations_and_desktops.asp