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

Вниз

Как отловить нажатия клавиш для всех процессов!?   Найти похожие ветки 

 
Вуук   (2006-08-21 01:27) [0]

Подскажиту пожалуйста!


 
Мичман Панин   (2006-08-21 01:46) [1]

Даже в военное время не все процессы требуют нажатия клавиш.


 
Vendict ©   (2006-08-21 12:03) [2]

Вуук   (21.08.06 1:27)
может hook ? всмысле ловушкой ?

тогда так.

создаешь файлик "keyboard.dpr" такого содержания:

library keyboard;

uses Windows, Messages;
var

SysHook : HHook = 0;
Wnd : Hwnd = 0;

function SysMsgProc(code : integer; wParam : word;
lParam : longint) : longint; stdcall;
Var
key:array [0..16] of Char;
h:HWND;
f:TextFile;
begin
if lParam<>16777217 then  
//Передать сообщение другим ловушкам в системе
// если не сделать этого, система зависнет
Result := CallNextHookEx(SysHook, Code, wParam, lParam);
//Проверяю сообщение
if (code = HC_ACTION) then
 begin
  GetKeyNameText(lParam,Key,SizeOf(Key));
// в key находится название клавиши
  If key="Prnt Scrn" then
   begin
    h:=FindWindow("TForm1","Моя форма");
    SendMessage(h,$0505,0,0);
//а это мы посылаем сообщение форме что была нажата клавиша
//форма должна быть класса TForm1 и иметь Caption="Моя форма"
   end;
 end;
end;

// Процедура запуска.
procedure RunStopHook(State : Boolean) export; stdcall;
begin
//Если State = true, то ...
if State=true then
 begin
//Запускаем ловушку.
  SysHook := SetWindowsHookEx(WH_KEYBOARD,
     @SysMsgProc, HInstance, 0);
 end
else//Иначе
 begin
//Отключить ловушку.
  UnhookWindowsHookEx(SysHook);
  SysHook := 0;
 end;
end;

exports RunStopHook index 1;

end.


и к этому нужно приложение, устанавливающее ловушку и обрабатывающее сообщение:
"main.pas":
unit main;

interface

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

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure Mes(var Mes:TMessage); message MS;
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

procedure RunStopHook(State : Boolean)
stdcall; external "keyboard.dll" index 1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
RunStopHook(true);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 RunStopHook(false);
end;

procedure TForm1.Mes;
begin
//здесь как-то реагируешь на полученое сообщение
End;

end.


вроде бы всё...


 
Vendict ©   (2006-08-21 12:06) [3]

Vendict ©   (21.08.06 12:03) [2]
вроде бы всё...


не всё. забыл. там ещё нужно добавить пару строчек перед "type" в "main.pas":
const
MS=$0505;


 
Пусик ©   (2006-08-21 12:11) [4]

http://delphimaster.net/view/1-1155502154/


 
Пусик ©   (2006-08-21 12:19) [5]

PS.
В данном случае хук не обязательно должен использовать DLL.


 
Vendict ©   (2006-08-21 12:36) [6]

Пусик ©   (21.08.06 12:11) [4]
Пусик ©   (21.08.06 12:19) [5]
Я это писал год назад. просто привел свой код, как делал я.
и по-моему понятнее, чем там.


 
Пусик ©   (2006-08-21 12:50) [7]


> Vendict ©   (21.08.06 12:36) [6]


О чем спич?
Здесь никто ничем не меряется. Приводятся варианты решения.


 
Rouse_ ©   (2006-08-21 13:36) [8]


> Пусик ©   (21.08.06 12:19) [5]
> PS.
> В данном случае хук не обязательно должен использовать DLL.
>

LowLevelHook только в 2000-ом появились, так что если нужно для всех ОС, то только через библиотеку :)


 
apic ©   (2006-08-21 14:31) [9]

http://www.delphimaster.ru/articles/hooks/index.html


 
apic ©   (2006-08-21 14:31) [10]

http://www.delphimaster.ru/articles/hooks/index.html


 
GrayFace ©   (2006-08-25 21:55) [11]

Rouse_ ©   (21.08.06 13:36) [8]
LowLevelHook только в 2000-ом появились, так что если нужно для всех ОС, то только через библиотеку :)

JournalRecord был и раньше, если мне запоменающее устройство в мозгу не изменяет.


 
Орион ©   (2006-08-26 20:18) [12]

> Как отловить нажатия клавиш для всех процессов!?

Дай угадаю: следующий вопрос будет, как перехватить нажатие Ctrl+Alt+Del?)))



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

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

Наверх




Память: 0.49 MB
Время: 0.061 c
15-1166363019
Nic (from home)
2006-12-17 16:43
2007.01.07
Супер компьютер "Скиф"


2-1166355278
ezorcist
2006-12-17 14:34
2007.01.07
Вычисление интеграла.


2-1166271668
vitv
2006-12-16 15:21
2007.01.07
Проблема с DLL


2-1166530373
vitv
2006-12-19 15:12
2007.01.07
Поиск текста в документах


15-1166529637
IAmDanil
2006-12-19 15:00
2007.01.07
Помогите с хтмл