Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

Как сделать, чтобы форму нельзя было закрыть   Найти похожие ветки 

 
GrBob   (2006-03-31 00:27) [0]

Требуется, чтобы форму нельзя было закрыть, причем ни стандартными способами (крестик, Алт - Ф4), но и через диспетчер задач. Так же чтобы ее нельзя было свернуть, открыть что-нибудь поверх и т.д. С простым закрытием я разобрался (OnCloseQuery), а вот с диспетчером и сворачиванием не знаю как :( В двух словах - надо, чтобы пользователь не смог ничего сделать, пока не нажмет кнопку на форме.


 
Rial ©   (2006-03-31 00:40) [1]

Какая злая программа у тебя должна получиться!
Дай угадаю: по нажатию на эту кнопку  - format c: .

- Установить режим RealTime и посильнее грузить процессор, чтобы жизнь медом не казалась.
- Отлавливать окно диспетчера в цикле и ззакрывать его при обнаружении.
- При потере формой фокуса ввода блокировать меремещение мыши, зарегистрировать все возможные горячие клавиши на себя.
- Отключить монитор, чтобы бедный юзер не смог найти твою программу в диспетчере, даже если и откроет его.
- Отключить мышь, чтобы он не мог ткнуть по строчке с программой в диспетчере.


 
GrBob   (2006-03-31 00:48) [2]

Ну не такая уж и злая. Я просто хочу написать дополнительное залогинивание после входа в винду с некоторой доп инфой. Первое, что пришло на ум - сделать форму на весь экран, и пока пользователь не введет нужную инфу дальше его не пускать. Так что 1 и 2 последних пункта отпадают. С остальным поразбираюсь. Хотя я где-то читал, что из диспетчера задач процесс можно просто скрыть. Как? И еще сделать ее Always on Top можно :)


 
Rial ©   (2006-03-31 01:01) [3]

Always on Top - не ного толку будет.

А скрыть совсем программу, естественно, невозможно.
Ее можно убрать из первой странички деспетчера, скрыв (Visible:=False) главную форму приложения. А дальше - так назвать процесс, чтобы бедный юзер думал, что он - системный.


 
Германн ©   (2006-03-31 01:17) [4]


> GrBob   (31.03.06 00:48) [2]
>
> Ну не такая уж и злая. Я просто хочу написать дополнительное
> залогинивание после входа в винду с некоторой доп инфой.
>  Первое, что пришло на ум - сделать форму на весь экран,
>  и пока пользователь не введет нужную инфу дальше его не
> пускать. Так что 1 и 2 последних пункта отпадают. С остальным
> поразбираюсь. Хотя я где-то читал, что из диспетчера задач
> процесс можно просто скрыть. Как? И еще сделать ее Always
> on Top можно :)


Дурью маешься. Ни скрыть нельзя, ни AlwaysOnTop - тоже нельзя.
Лёгким способом можно лишь "связать детали проволокой в надежде, что пользователь не взял с собой кусачек". :-)


 
NightLord ©   (2006-03-31 11:01) [5]

Делал я эту фигню в свое время. При загрузке просто создаешь новый рабочий стол и на нем делаешь свое окно и все. юзер ничего не сможет сделать пока не введет пароль или че тама еще. В общем для выхода из этого режима надо уничтожить созданный раб стол, а диспетчер задач на нем не сможет появится. Вот и вся замута.


 
GrBob   (2006-03-31 13:48) [6]


> Ее можно убрать из первой странички деспетчера, скрыв (Visible:
> =False) главную форму приложения.

Ну это не выход :) Тогда ее и юзер не увидит, не только диспетчер :)

> Делал я эту фигню в свое время. При загрузке просто создаешь
> новый рабочий стол и на нем делаешь свое окно и все. юзер
> ничего не сможет сделать пока не введет пароль или че тама
> еще. В общем для выхода из этого режима надо уничтожить
> созданный раб стол, а диспетчер задач на нем не сможет появится.
>  Вот и вся замута.

А вот это уже интересно, спасибо. Никто не подскажет ссылки на статьи по этому вопросу или хотя бы идею, в каком направлении смотреть? Окна то я создавал, но чтобы новый рабочий стол, хммм... даже не думал что это возможно :)


 
Eraser ©   (2006-03-31 13:52) [7]


> GrBob   (31.03.06 00:48) [2]


> Ну не такая уж и злая. Я просто хочу написать дополнительное
> залогинивание после входа в винду с некоторой доп инфой.
>

взлоиается это "залогиванивание" в 2 счёта, т.е. на раз дава ;-)
Для этих целей предусмотрены спец. средства.
см. в MSDN инфу по Winlogon and GINA.

The GINA operates in the context of the Winlogon process and, as such, the GINA DLL is loaded very early in the boot process. The GINA DLL must follow rules so that the integrity of the system is maintained, particularly with respect to interaction with the user.

The most common use of the GINA is to communicate with an external device such as a smart-card reader. It is essential to set the start parameter for the device driver to system (Winnt.h: SERVICE_SYSTEM_START) to ensure that the driver is loaded by the time the GINA is invoked.

The purpose of a GINA DLL is to provide customizable user identification and authentication procedures. The default GINA does this by delegating SAS event monitoring to Winlogon, which receives and processes CTL+ALT+DEL secure attention sequences (SASs). A custom GINA is responsible for setting itself up to receive SAS events (other than the default CTRL+ALT+DEL SAS event), and notifying Winlogon when SAS events occur. Winlogon will evaluate its state to determine what is required to process the custom GINA"s SAS. This processing usually includes calls to the GINA"s SAS processing functions.

и т.д.


 
Eraser ©   (2006-03-31 13:53) [8]

взлоиается = взломается ;-)


 
DiamondShark ©   (2006-03-31 13:54) [9]


> Никто не подскажет ссылки на статьи по этому вопросу или
> хотя бы идею, в каком направлении смотреть?

В этом направлении:
http://msdn.microsoft.com/library/en-us/dllproc/base/window_stations_and_desktops.asp


 
DiamondShark ©   (2006-03-31 13:56) [10]

Да, GINA -- это, конечно, самый верный способ...
Вот только писать её -- занятие не для слабонервных :)


 
GrBob   (2006-03-31 14:02) [11]

Всем спасибо, теперь у меня работы на месяц вперед :)


 
sniknik ©   (2006-03-31 14:35) [12]

> Всем спасибо, теперь у меня работы на месяц вперед :)
???? десктоп создать? пол часа. или решил GINA переписать?


 
Malik ©   (2006-03-31 20:09) [13]

Есть очень простой способ при выключении программы, она влючает сново сама себя. Да только есть дыра ее можно отключить через процессы


 
Asail   (2006-03-31 23:17) [14]

А как сию "прогу для логина" запускать собираешся?
У пользователя всегда есть возможность зайти в SafeMode или после стандартного виндовского логина Shift удерживать...
После чего спокойненько убрать твою прогу из автозагрузки.
Так что, ИМХО, ограничить доступ в винду кроме как через policy вряд-ли можно!


 
GrBob   (2006-04-01 00:10) [15]


> sniknik ©   (31.03.06 14:35) [12]
> > Всем спасибо, теперь у меня работы на месяц вперед :)
> ???? десктоп создать? пол часа. или решил GINA переписать?
>


Если знаешь как, может и пол часа, но для меня это все новое, придется разбираться. На русском хелпу не нашел, придется читать Мсдн, а это тоже не быстро. Так что.... месяц :)
PS. Может кто посоветует какую литературу на Русском с экзамплами?


> Asail   (31.03.06 23:17) [14]

> Так что, ИМХО, ограничить доступ в винду кроме как через
> policy вряд-ли можно!


А это что? Поподробнее, пожалуйста.


 
Asail   (2006-04-01 00:45) [16]


> А это что? Поподробнее, пожалуйста.


А это уже не к программированию, а к системному администрированнию относится.
В XP, например, запусти через Start->Run gpedit.msc .
Там можно поотключать много чего.
К примеру, зайди в User Configuration->Administrative Templates->System->Ctrl+Alt+Del Options и выстави параметр "Remove Task Manager" в Enabled.
После чего данный пользователь уже не сможет запустить диспетчер задач вообще. Даже, если в Safe Mode зайдет.
Обычно, правда, policy задают с сервера для всех пользователей и компов в сети. Так-что это все немного не по теме.

К тому-же чем не устраивает стандартный логин винды с паролями?


 
sniknik ©   (2006-04-01 09:15) [17]

> Если знаешь как, может и пол часа, но для меня это все новое, придется разбираться.
нет это именно с поразбираться(/поиск и инете) полчаса, если знаеш то на пять мин тянет. причем тебе я еще 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;


 
Delphi5.01 ©   (2006-04-01 09:25) [18]

Уважаемый топик стартер, то что вы хотите сделать легко реализуеться обыкновенным клавиатурным хуком о котором вы найдете много сатей как в инернете так и на этом сайте, но хочу предупредить что вызов Alt+Ctrl+Del вы не сможете отловить, это уже "сверху" дядя бил прикрыл от таких как вы :-) Можете даже не стараться, я сам лично 2 месяца пытался и ничего не вышло, где не искал и т.д.
п.с. Хотя кто знает ;-)


 
sniknik ©   (2006-04-01 09:38) [19]

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 11:02) [20]

sniknik

> в принципе, поискать, можно и пример реализации найти (на
> masm.ru вроде видел)

Вроде и точно видел это не одно и тоже, как я помню обяснение было таково что клавишы CTL+ALT+DEL отлавливаються системой на очень низком уровне, еще до того как любая программа сможет прехватить и обрабатываеться, а уж потом передаеться вашей программе :-)


 
sniknik ©   (2006-04-01 11:58) [21]

ударение надо ставить на "вроде видел", а уж вроде там или не там неважно (но и там тоже видел, не статью, обсуждение, вторая ссылка из этого обсуждения)
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. до сих пор мало инфы/примеров? или еще пару месяцев поискать. ;)


 
Malik ©   (2006-04-01 13:29) [22]

>А как сию "прогу для логина" запускать собираешся?
>У пользователя всегда есть возможность зайти в SafeMode или после >стандартного виндовского логина Shift удерживать...
>После чего спокойненько убрать твою прогу из автозагрузки.
>Так что, ИМХО, ограничить доступ в винду кроме как через policy >вряд-ли можно!

А если ее в реестре прописать в автозагрузку?


 
Asail   (2006-04-01 13:35) [23]


> Malik ©   (01.04.06 13:29) [22]

> А если ее в реестре прописать в автозагрузку?

А какая разница? В SafeMode можно и из реестра удалить или msconfig использовать... Так что без разницы.


 
Anatoly Podgoretsky ©   (2006-04-01 15:21) [24]

А выключать будешь кнопкой Reset?


 
GrBob   (2006-04-03 18:56) [25]

Еще раз всех благодарю. Вы мне подкинули столько информации к размышлению, просто жуть. Хотя, благодаря тов. sniknik думаю уйдет все же не месяц, но пара дней точно, за что ему отдельная благодарность :)

2 Delphi5.01:
С хуками я как-то однажды работал, так там хуки прописывать придется больше, чем сама рабочая часть программы. Хотя все же возможно и обращусь к ним за помощью, т.к. пока не знаю, что там еще понадобится :)

2 Asail:
а) Стандартный логин имеет некоторые недостатки для моей задачи, а именно мне нужна при залогинивании пользователя еще и другая инфа, кроме той, что зашел именно он, а не кто-нибудь другой.
б) Все что относится к системному администрированию можно отнести и к программированиию. Думаю, что этот параметр можно изменить и программными средствами, но пока это не суть важно.


 
Delphi5.01 ©   (2006-04-04 13:13) [26]

2 GrBob если честно это одна из частей программирования в которой я не разбираюсь, так и не хватило тогда времени все разобрать. А на счет того что хуки довольно кодо обемные то я с вами согласен, я просто взял рабочий пример и переделал под себя, хотя данный материал обемный и требует большого внимания при употреблении :-)
Удачи вам


 
Delphi5.01 ©   (2006-04-04 13:17) [27]

А самым банальным решением будет:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caNone;
end;

Если вы решите проблуму с тас менеджером то данный вариант супер. Кстати есть алгоритм при котором запушено 2 программы и каждая поддреживает друг друга, типа если первую закрыли то мгновенно запускаеться вторая и наоборот. Многи вирусы именно так и делают, единственным решением являеться убить процессы програмно :-) Одновременно :-)


 
Гость235689   (2006-04-10 17:44) [28]

А я писал такого рода прогу на Pascal-е и вписывал ее в Autoexec.bat.
Для заурядных пользователей - это целая проблема.
Еще можно в Biose запаролить, правда для продвинутых и это не камень предткновения.
А раз я был свидетелем того, как ребята вытянули батарейку из чужого компа (дело было в общаге), чтобы поиграть, включили комп и батарейку назад не ставили, мол если поставят, то комп снова пароль спросит ! :-)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.014 c
15-1144227742
sergeii
2006-04-05 13:02
2006.04.23
Pocket PC


15-1143638800
49 Cent
2006-03-29 17:26
2006.04.23
Как называется песня?


15-1143679029
grisme
2006-03-30 04:37
2006.04.23
Еще один подозрительный 2й интегралл


2-1144326365
RomanH
2006-04-06 16:26
2006.04.23
IBTable или Table


15-1143114528
Der Nechk@ssoff
2006-03-23 14:48
2006.04.23
Политика Мелкософта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский