Главная страница
    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.48 MB
Время: 0.008 c
15-1166489633
Petr V. Abramov
2006-12-19 03:53
2007.01.07
Еще раз про консалтинг


2-1166287995
BUHALOSS
2006-12-16 19:53
2007.01.07
Отловить клик мыши


15-1166173142
alex_***
2006-12-15 11:59
2007.01.07
Не работает сайт. Какие службы должны быть запущены


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


2-1166099460
kukuikar
2006-12-14 15:31
2007.01.07
Результаты работы функций (работа с файлами и каталогами)





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