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

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

блокировка комбинаций системных клавиш Windows


bss ©   (2004-08-26 10:05:00) 

Перехватываю с помощью хуков (SetWindowsHookEx) нажатия клавиш. При этом надо поставить на сочетания клавиш c Ctrl и Alt свой обработчик, а стандартные действия на эти сочетания отменить. Перехват нажатия клавиш действительно происходит и заданные обработчиком действия выполняются, но при этом выполняются и стандартные действия Windows.

Пример кода:

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
  wnd: HWND;
  plock: boolean;
begin
 if code = HC_ACTION then
 begin
  if lParam>31  then
  begin
       if wParam = VK_F1 // Обработчик на клавишу F1
       begin
            wnd := FindWindow('TForm1', '');
            SendMessage(wnd, WM_MYKEYHOOK, wParam, 0);
            Result := 1;
       end
       else
           Result := 0;
  end;
 end
 else
   Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
end;

Не подскажет ли уважаемая публика, что я делаю не так?


bss   (2004-08-27 10:16:00) [1]

Всем большое спасибо!!!
Действительно очень помогли!
И с реестром (автозагрузка) проблему решать пришлось в любом случае.


Dimka-gl   (2004-08-26 23:13:00) [2]

Про реестр: http://win-reg.narod.ru/

p.s. Вам надо пункт меню Windows в зависимости от версии.


beatles_bntu   (2004-08-26 14:01:00) [3]

Все работае как часы тока это неблокирует Ctrl+Alt+Del и на клавишу Win срабатывает но неперекрывает хотя ее моно воше скажем так удалить.
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
    Procedure WMHotkey( Var msg: TWMHotkey );message WM_HOTKEY;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 RegisterHotkey(Handle,1,MOD_ALT, VK_TAB);
end;

procedure TForm1.WMHotkey(var Msg:TWMHotkey);
begin
 if(Msg.hotkey=1)then
 begin
   If IsIconic(Application.Handle) Then
   begin
     Application.Restore;
     {PostMessage(Handle,WM_NULL,0,0);
     ASSERT(mm,'');}
   end;
   BringToFront;
 end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnRegisterHotkey(Handle,1);
end;

end.


Manfred8   (2004-08-26 13:39:00) [4]

В WinNt/2000/XP есть низкоуровневй клавиатурный хук
типа WH_KEYBOARD_LL оно поможет.Я таким образом отрубаю клавиши Win,Alt+tab итд. Все кроме ctrl+alt+del


GrayFace   (2004-08-26 13:03:00) [5]

В Win9x это легко делается.

Dimka-gl ©   (26.08.04 12:33) [3]
Пропишите в реестре программы, доступные к запуску и всё.

А это еще как?


Dimka-gl   (2004-08-26 12:33:00) [6]

Пропишите в реестре программы, доступные к запуску и всё.


bss   (2004-08-26 12:00:00) [7]

Убрано...
все равно после отработки сообщения WM_MYKEYHOOK на клавиши F1, Alt-tab и т.п. система начинает исполнять стандартные процедуры Windows.
Вообще, задача заставить пользователя работать только с определенной программой, убрав возможность запускать что-либо иное. Возможно можно решить задачу по-другому...Может быть будут какие-нибудь советы?
С уважением!!!


TUser   (2004-08-26 11:21:00) [8]

Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Вот это убери, хакер :)


Наверх

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