Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать, чтобы форму нельзя было закрыть [D7, NT4, 2000, XP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо