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

Вниз

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

 
Вуук   (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 вся ветка

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

Наверх





Память: 0.48 MB
Время: 0.05 c
15-1166455220
dr_craigan
2006-12-18 18:20
2007.01.07
открытие картинок с помощью ...


4-1156278217
Так себе
2006-08-23 00:23
2007.01.07
Минимальное оконное приложение на Delphi 1.0 с использованием Win


1-1163744633
tipman
2006-11-17 09:23
2007.01.07
Адаптация приложения для Screen.PixelPerInch = 120... как?


2-1166099285
FIL-23
2006-12-14 15:28
2007.01.07
жадный цыкл


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