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

Вниз

Помогите с кодом, пожалуйста!   Найти похожие ветки 

 
One man   (2003-11-06 20:12) [0]

Вот код простого хука, ловим нажатые клавиши вне программы…

unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
protected
procedure hotykey(var msg:TMessage); message WM_HOTKEY;
private
public
end;

var
Form1: TForm1;
id,id2:Integer;

implementation

{$R *.DFM}
procedure TForm1.hotykey(var msg:TMessage);
begin
if (msg.LParamLo=MOD_win) and (msg.LParamHi=27) then
begin
ShowMessage("Win + Esc!");
end;
if (msg.LParamLo=mod_Control) and (msg.LParamHi=83) then
begin
ShowMessage("Ctrl + S!");
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
id:=GlobalAddAtom("hotkey");
RegisterHotKey(handle,id,mod_win,27);
id2:=GlobalAddAtom("hotkey2");
RegisterHotKey(handle,id2,mod_Control,83);
end;

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

End.


Вопрос в том, как можно перехватить, когда нажимается сочетание трех клавиш, или одной. Уже все перепробовал, помогите пожалуйста!
Заранее благодарен.


 
DVM ©   (2003-11-06 20:16) [1]


> когда нажимается сочетание трех клавиш

ТАК НЕ БЫВАЕТ!
клавиши в любом случае нажимаются по очереди. Вот очередность отслеживай и разбирай.


 
DVM ©   (2003-11-06 20:17) [2]

И еще... Хуками тут не пахнет :)


 
One man   (2003-11-06 20:24) [3]

ладно, но все же не понятно, как можно отловить одну клавишу?

P.S. А про сочитание трех клавиш, я и имел в виду по очереди.


 
DVM ©   (2003-11-06 20:28) [4]


> ладно, но все же не понятно, как можно отловить одну клавишу?

Я бы стал ловить глобальным хуком WH_KEYBOARD. Примеров в инете полно, есть статья и на этом сайте. Это для любой клавиши (почти любой).
Если нужна конкретная, то можно и через горячие клавиши сделать, как Вы и пытаетесь.


 
One man   (2003-11-06 20:34) [5]


> Если нужна конкретная, то можно и через горячие клавиши
> сделать, как Вы и пытаетесь.

Но как?


 
DVM ©   (2003-11-06 20:36) [6]

http://www.izone.kiev.ua/progr/delphi/30.htm


 
One man   (2003-11-06 20:42) [7]

И еще, есть тут у меня компонентик THotKeyManager, у него есть функция function AddHotKey(HotKey: TShortCut): Word;

Мне нужно отлавливать нажатие клавиши Windows, а у этой функции параметр типа TShortCut, и я не могу передать ей название клавиши, если б допустим Control, тогда просто TextToShortCut(‘Ctrl+A’), а вот Win не получается.
Помогите тут пожалуйста.


 
One man   (2003-11-06 20:43) [8]


> DVM © (06.11.03 20:36) [6]

Спасибо щас посмотрю.



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
14-25539
Delpher_Gray
2003-12-09 16:43
2004.01.09
Обсуждение ресурсов по программарованию в Delphi


6-25461
pavel_guzhanov
2003-11-10 11:38
2004.01.09
Сбор сведений о компьютерах в сети


14-25561
Fktrc
2003-12-18 14:35
2004.01.09
Куча кодировок Unicode


9-25165
Карлсон
2003-06-22 21:36
2004.01.09
создание меню в DelphiX.


6-25491
how
2003-10-12 14:51
2004.01.09
IMAP component