Форум: "WinAPI";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизПомогите с кодом, пожалуйста! Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c