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

Вниз

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

 
bss   (2004-08-26 10:05) [0]

Перехватываю с помощью хуков (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;

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


 
TUser ©   (2004-08-26 11:21) [1]

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


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

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


 
Dimka-gl ©   (2004-08-26 12:33) [3]

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


 
GrayFace ©   (2004-08-26 13:03) [4]

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

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

А это еще как?


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

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


 
beatles_bntu ©   (2004-08-26 14:01) [6]

Все работае как часы тока это неблокирует 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.


 
Dimka-gl ©   (2004-08-26 23:13) [7]

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

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


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

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



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

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

Наверх




Память: 0.46 MB
Время: 0.039 c
1-1095248267
roma
2004-09-15 15:37
2004.10.03
Button1


14-1095069018
Scalder
2004-09-13 13:50
2004.10.03
Общие вопросы по Delphi


4-1093619620
Sunny Way
2004-08-27 19:13
2004.10.03
Доступ к пикселам постороннего окна


14-1094898124
Delpher
2004-09-11 14:22
2004.10.03
Изучение Delphi


1-1095342782
lehich
2004-09-16 17:53
2004.10.03
запуск процедуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский