Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.011 c
14-25543
dDan
2003-12-18 16:17
2004.01.09
Пара простеньких вопросов


1-25313
Seldon
2003-12-22 18:41
2004.01.09
Заморозить форму.


14-25563
Сатир
2003-12-18 13:15
2004.01.09
System Tray Trouble


4-25637
ZEE
2003-11-05 17:34
2004.01.09
OnChange у Edit а : (


3-25228
AlexA
2003-12-11 10:13
2004.01.09
Возращение всех множеств в ХП





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