![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
блокировка комбинаций системных клавиш 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);
Вот это убери, хакер :)