Главная страница
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.016 c
7-25615
MakNik
2003-10-29 16:33
2004.01.09
как узнать путь к папке откуда запущена программа???


1-25325
Samael6
2003-12-17 17:01
2004.01.09
Outlook Express COM Add-ins


1-25381
Den_PY
2003-12-25 07:24
2004.01.09
Socket


1-25348
SergLight
2003-12-22 11:32
2004.01.09
Ошибка в TCombobox


3-25206
Morfey
2003-12-11 20:02
2004.01.09
MySQL