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

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

Блокировка системных клавиш в 2000 [D7, NT4, Win2k, WinXP]


Easter ©   (2004-12-10 12:27:00) 

Знаю-знаю, этот вопрос всех достал... Но ответа я так на него и не нашел. Мне надо заблокировать доступ к Ctrl+Alt+Del, Alt+F4 и прочемув win2000.

SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
Не помогает...

Подскажите, плз.


Zuborob   (2005-01-29 11:27:00) [1]

А что если отключить Ctrl-Alt-Del не напрямую, а "обманом"? Я просто уничтожаю окно Диспетчера задач в таймере каждую долисекунду или как там в свойстве Timer1.Interval. Диспетчер не запускается, сл-но процесс не завершить (разве что сторонним Диспетчером других фирм). Да и то: понятно, стоит назвать неприглядным именем...
Вот текст:

procedure TForm2.TimerTaskTimer(Sender: TObject);
var TaskM:HWND;
begin
TaskM:=FindWindow(nil,'Диспетчер задач Windows');
SendMessage(TaskM,WM_Destroy,0,0);
end;

  Отработано в XP, как будет работать в других-не гарантирую, хотя у меня на кампе установлены все винты :-)


DVM   (2004-12-14 10:25:00) [2]


> Submarine   (14.12.04 10:09) [14]

Заблокировать CAD и закрывать таскменеджер это не одно и то же.
Хотя чаще это и требуется.


Submarine   (2004-12-14 10:09:00) [3]

Задавался этим в свое время, сделал так
function KillTask(ExeFileName: string): integer;  
const  
 PROCESS_TERMINATE=$0001;  
var  
 ContinueLoop: BOOL;  
 FSnapshotHandle: THandle;  
 FProcessEntry32: TProcessEntry32;  
begin  
 result := 0;  

 FSnapshotHandle := CreateToolhelp32Snapshot  
                    (TH32CS_SNAPPROCESS, 0);  
 FProcessEntry32.dwSize := Sizeof(FProcessEntry32);  
 ContinueLoop := Process32First(FSnapshotHandle,  
                                FProcessEntry32);  

 while integer(ContinueLoop) <> 0 do  
 begin  
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =  
        UpperCase(ExeFileName))  
    or (UpperCase(FProcessEntry32.szExeFile) =  
        UpperCase(ExeFileName))) then  
     Result := Integer(TerminateProcess(OpenProcess(  
                       PROCESS_TERMINATE, BOOL(0),  
                       FProcessEntry32.th32ProcessID), 0));  
   ContinueLoop := Process32Next(FSnapshotHandle,  
                                 FProcessEntry32);  
 end;  

 CloseHandle(FSnapshotHandle);  
end;
А в таймере повесил: KillTask('taskmgr.exe'); -Все работает !!!!


DVM   (2004-12-14 10:03:00) [4]

Эксплорер узнает о нажатии Ctrl+Esc через хук. Заблокировать всякими хоткеями вряд-ли получится. Только хук.


Alexis   (2004-12-12 15:18:00) [5]

Запрет Alt-Tab, Alt-F4, Alt-Esc можно реализовать переназначив нажатия этих клавиш функцией RegisterHotKey, CreateGlobalAtom. Далее в программе надо обрабатывать пришедшее сообщение WM_HOTKEY и выводить соответствующий MessageBox, к примеру.


Хакер   (2004-12-12 02:34:00) [6]


>Alt_CTRL+Del для NT/XP но нужно найти правильный Index
>
> function RegisterServiceProcess


LOL !


BURN   (2004-12-12 02:29:00) [7]

откл. Alt+F4


procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
const
KEY_ALT_F4=02;
begin
case ord(key) of
KEY_ALT_F4:
begin
key:=#0;
form1.show;
end;
end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (Key = VK_F4) and (ssAlt in Shift) then begin
   MessageBeep(0); Key := 0;
 end;
end;


Alt+Tab


program Project1;
uses
 Forms,
 Windows,
 Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
var ExtendedStyle : integer;
begin
 Application.Initialize;
 ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);
 SetWindowLong(Application.Handle, GWL_EXSTYLE,
   ExtendedStyle or WS_EX_TOOLWINDOW
{AND NOT WS_EX_APPWINDOW});
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


Alt_CTRL+Del для NT/XP но нужно найти правильный Index

function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall;
 external 'KERNEL32.DLL' index XXX;

procedure TForm1.Button2Click(Sender: TObject);
begin
if not (csDesigning in ComponentState) then
 RegisterServiceProcess(GetCurrentProcessID, 0);
end;


Xaker   (2004-12-11 02:21:00) [8]

Manfred8   (10.12.04 13:10) [8]
я по другому делал :))


Manfred8   (2004-12-10 13:10:00) [9]

Значит написание своей Gina.Dll рулит :)


DVM   (2004-12-10 13:06:00) [10]


> Manfred8   (10.12.04 12:56) [5]
> а вы попробуйте

Что пробовать то, я и так знаю как это выглядит. Дело в том, что не всегда срабатывает (см. [6]).

> VMcL ©   (10.12.04 13:01) [6]

Да я помню ветку. Я потом когда ставил XP - проверил. Зависит еще от пункта "Использовать страницу приветствия". Может не только от него. И еще от того компьютер в домене или нет.


VMcL   (2004-12-10 13:01:00) [11]

>> DVM ©  (10.12.04 12:51) [4]

Когда уже промелькивало на форуме. Как раз по умолчанию TM и вызывается. А вот после некой доработки напильником (не помню точно какой; Fast User Switching что ли...), что многие и делают, CAD вызывает окно Windows Security, TM вызывается по Ctrl+Shift+Esc.


Manfred8   (2004-12-10 12:56:00) [12]

а вы попробуйте


DVM   (2004-12-10 12:51:00) [13]


> Manfred8   (10.12.04 12:43) [3]

Не путайте одно с другим. Запретить таскменеджер и CAD - это не одно и то же, тем более, что в XP по умолчанию при нажатии CAD появляется вовсе не таскменеджер.


Manfred8   (2004-12-10 12:43:00) [14]

А еще мона c Gina.dll изврашаться


Manfred8   (2004-12-10 12:42:00) [15]

Что касается Ctrl+Alt+Del, на остальное вешается хук

//Для этого в реестре по адресу
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
//создайте ключ типа DWORD под названием DisableTaskMgr, и присвойте ему значение 1.
//Удалив этот ключ, или присвоив ему 0, вы вновь разрешите Task Manager.
//--------------------------------------------------------------
procedure TTaskManager.Disable;
var R:TRegistry;
begin
try
 R:=TRegistry.Create;
 R.RootKey:=HKEY_CURRENT_USER;
 R.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', True);
 R.WriteInteger('DisableTaskMgr',1);
 R.CloseKey;
 R.Free;
except
  showmessage('Ошибка при запрете таск мэнеджера');
end;
end;


DVM   (2004-12-10 12:40:00) [16]


> Ctrl+Alt+Del

считай что невозможно.

> Alt+F4

Низкоуровневый хук на клавиатуру

> прочему

тоже хук.


Наверх

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