![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с кодом, пожалуйста!
One man © (2003-11-06 20:12:00)
Вот код простого хука, ловим нажатые клавиши вне программы…
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.
Вопрос в том, как можно перехватить, когда нажимается сочетание трех клавиш, или одной. Уже все перепробовал, помогите пожалуйста!
Заранее благодарен.
One man (2003-11-06 20:43:00) [1]
> DVM © (06.11.03 20:36) [6]
Спасибо щас посмотрю.
One man (2003-11-06 20:42:00) [2]
И еще, есть тут у меня компонентик THotKeyManager, у него есть функция function AddHotKey(HotKey: TShortCut): Word;
Мне нужно отлавливать нажатие клавиши Windows, а у этой функции параметр типа TShortCut, и я не могу передать ей название клавиши, если б допустим Control, тогда просто TextToShortCut(‘Ctrl+A’), а вот Win не получается.
Помогите тут пожалуйста.
DVM (2003-11-06 20:36:00) [3]
http://www.izone.kiev.ua/progr/delphi/30.htm
One man (2003-11-06 20:34:00) [4]
> Если нужна конкретная, то можно и через горячие клавиши
> сделать, как Вы и пытаетесь.
Но как?
DVM (2003-11-06 20:28:00) [5]
> ладно, но все же не понятно, как можно отловить одну клавишу?
Я бы стал ловить глобальным хуком WH_KEYBOARD. Примеров в инете полно, есть статья и на этом сайте. Это для любой клавиши (почти любой).
Если нужна конкретная, то можно и через горячие клавиши сделать, как Вы и пытаетесь.
One man (2003-11-06 20:24:00) [6]
ладно, но все же не понятно, как можно отловить одну клавишу?
P.S. А про сочитание трех клавиш, я и имел в виду по очереди.
DVM (2003-11-06 20:17:00) [7]
И еще... Хуками тут не пахнет :)
DVM (2003-11-06 20:16:00) [8]
> когда нажимается сочетание трех клавиш
ТАК НЕ БЫВАЕТ!
клавиши в любом случае нажимаются по очереди. Вот очередность отслеживай и разбирай.