Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

перехват клавиш?   Найти похожие ветки 

 
shelest   (2004-06-04 10:52) [0]

как перехватить одновременное нажатие Ctrl+Shift+S?

Если учесть, что программа обработки перехвата будет неактивна.

Посмотрел несколько примеров, там все идет только для нажатия одной клавиши.


 
stany ©   (2004-06-04 10:59) [1]

Глобальный хук в dll. Инфы по этому море.


 
Игорь Шевченко ©   (2004-06-04 11:04) [2]

RegisterHotkey


 
shelest   (2004-06-04 11:09) [3]

С этим проблем нет.

У меня вот только вопрос.

Как реализовать механизм отловки всех трех клавиш?

Chr(Message.wParam) показывает только на нажатие одной клавиши.
ТО есть я так понял, что мне надопоочередно в интервале времени отслеживать нажатие каждой клавиши по отдельности?


 
shelest   (2004-06-04 11:10) [4]

RegisterHotkey не прокатит. Мне отслеживать надо во всех приложениях. И особенно в тех которые выдавили из себя ошибку.


 
stany ©   (2004-06-04 11:49) [5]

перехват CTRL+ALT+SHIFT


library hook_dll;

uses
Hook in "hook.pas",

exports
{global hook}
SetKeyboardHook, RemoveKeyboardHook,
begin
end.

unit Hook;

interface

uses Windows, Messages;

function SetKeyboardHook: Boolean; stdcall;
function RemoveKeyboardHook: Boolean; stdcall;
var
KeyboardHook: HHOOK;

implementation

function KeyboardProc(hCode: Integer; wParam: Longint; lParam: Longint): LRESULT; stdcall;
begin
if hCode = HC_ACTION then
if (Word(GetKeyState(VK_MENU)) and (Word(GetKeyState(VK_SHIFT)) and Word(GetKeyState(VK_CONTROL))) and $8000)<>0 then
windows.Beep(70,30);
Result := CallNextHookEx(KeyboardHook, hCode, wParam, lParam);
end;

function SetKeyboardHook: Boolean; stdcall; export;
begin
KeyboardHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
Result := KeyboardHook <> 0;
end;

function RemoveKeyboardHook: Boolean; stdcall; export;
begin
Result := UnhookWindowsHookEx(KeyboardHook);
end;

end.


 
iat   (2004-06-04 11:51) [6]

вставляешь в класс
 protected
   procedure hotykey(var msg:TMessage); message WM_HOTKEY;
 ...

var
 id:Integer;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  id:=GlobalAddAtom("hotkey");
// для fsModifiers и т.д. смотри help для RegisterHotKey
  RegisterHotKey(handle, id, fsModifiers, vk);
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(handle,id);
end;

procedure TfrmMain.hotykey(var msg:TMessage);
begin
  if (msg.LParamLo=fsModifiers) and (msg.LParamHi=vk) then
  begin
    {do something}
  end;
end;


 
Игорь Шевченко ©   (2004-06-04 11:51) [7]

shelest   (04.06.04 11:10)


> RegisterHotkey не прокатит


Куды ж он нафиг денется ?

Для примера - ловится нажатие Alt+F1:

unit main;

interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
 TfMain = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormDestroy(Sender: TObject);
 private
   FKeyAtom: ATOM;
   procedure WMHotkey (var Message: TMessage); message WM_HOTKEY;
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

procedure TfMain.FormCreate(Sender: TObject);
begin
 FKeyAtom := GlobalAddAtom("MyHotkey");
 Win32Check(RegisterHotKey(Handle, FKeyAtom, MOD_ALT, VK_F1));
end;

procedure TfMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnregisterHotkey(Handle, FKeyAtom);
end;

procedure TfMain.WMHotkey(var Message: TMessage);
begin
 Windows.MessageBox(HWND_DESKTOP, "Gotcha", "HOTKEY", MB_OK);
end;

procedure TfMain.FormDestroy(Sender: TObject);
begin
 GlobalDeleteAtom(FKeyAtom);
end;

end.



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

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
14-1088102829
Knight
2004-06-24 22:47
2004.07.18
Моторола C350... что, правда, брать не стоит?


1-1089145547
Огромное Кулясищще
2004-07-07 00:25
2004.07.18
Показать неглавное окно


14-1088137119
CacheMeM
2004-06-25 08:18
2004.07.18
Исходники на Турбо Паскаль


4-1086271924
Jiny
2004-06-03 18:12
2004.07.18
Работа с LTP и дельфи (микроконтроллеры)


1-1088841156
Maksim
2004-07-03 11:52
2004.07.18
Reg.WriteInteger - какие параметры передавать?