Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как зарегистрировать гарячие клавиши в приложении???


Mazenrat ©   (2002-08-31 15:40:00) 

Добрый день.

Как зарегистрировать гарячие клавиши в приложении, не имеющего формы (Win32API)?

Горячие клавиши (shortcuts) должны быть доступны даже если на данный момент активна другая программа (как это делает аська). Я пытался сделать следующим образом (см. ниже) но у приложения не имеющего формы невозможно сделать это:

protected
procedure hotykey(var msg:TMessage); message WM_HOTKEY;
end;


Как мне быть?
Или можно как-то по-другому?


Вот код:
//Переменные
var
hWnd: THandle;
id,id2:Integer;

//Процедура выполнения команд по нажатию горячих клавиш
procedure hotykey(var msg:TMessage);
begin
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=81) then begin
ShellExecute(hwnd, "open", "calc.exe", nil, nil, sw_shownormal); end;
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=82) then begin
ShellExecute(hwnd, "open", "calc.exe", nil, nil, sw_shownormal); end;
end;

//При создании приложения:
id:=GlobalAddAtom("hotkey");
RegisterHotKey(hWnd,id,mod_control,81);
id2:=GlobalAddAtom("hotkey2");
RegisterHotKey(hWnd,id2,mod_control,82);

//При уничтожении приложения:
UnRegisterHotKey(hWnd,id);
UnRegisterHotKey(hWnd,id2);


Беня Ладен   (2002-09-02 01:07:00) [1]

Гарачии Клавищи как и горачии парни не могут
быть зарегестрированны... (кавказкая мудрость).


Mazenrat   (2002-09-01 11:58:00) [2]

Хук - слишком хлопотно, да и размер программы увеличится.


Юрий Зотов   (2002-09-01 11:31:00) [3]

> Mazenrat (31.08.02 19:31)

Не такие уж и глупости.

> Если можно зарегистрировать в системе свои горячие клавишы с
> помощью VCL приложения, то это же можно сделать с помощью API
> приложения без всяких хуков

Да, можно. Если в программе есть хотя бы одно окно (пусть даже и невидимое - неважно, лишь бы оно было).

Если же ни одного окна нет... то что передавать в первом параметре RegisterHotKey? И в какую оконную функцию должно приходить WM_HOTKEY?

А вот хук позволяет обойтись без всяких окон. Так что - не такие уж и глупости.


CrazyAngel   (2002-08-31 19:39:00) [4]

В поиске ссылка.


CrazyAngel   (2002-08-31 19:38:00) [5]

Если не нравится посмотри как это в HotKeyManager сделано помоему это то что ты ищешь ...


Mazenrat   (2002-08-31 19:38:00) [6]


> Если не нравится посмотри как это в HotKeyManager сделано
> помоему это то что ты ищешь ...


Где смотреть?


CrazyAngel   (2002-08-31 19:32:00) [7]

Хочешь сказать работать не будет ?


Mazenrat   (2002-08-31 19:31:00) [8]


> Написать хук на перехват нажатия клавиши и выбирать те сочетания
> клавиш которые тебе нравятся
> Про хуки было в FAQ :)


Глупости!
Если можно зарегистрировать в системе свои горячие клавишы с помощью VCL приложения, то это же можно сделать с помощью API приложения без всяких хуков. Не знаеш - не советуй!


Mazenrat   (2002-08-31 19:30:00) [9]


> Написать хук на перехват нажатия клавиши и выбирать те сочетания
> клавиш которые тебе нравятся
> Про хуки было в FAQ :)


Глупости!
Если можно зарегистрировать в системе свои горячие клавишы с помощью VCL приложения, то это же можно сделать с помощью API приложения. Не знаеш - не советуй!


CrazyAngel   (2002-08-31 18:59:00) [10]

?-)
Написать хук на перехват нажатия клавиши и выбирать те сочетания клавиш которые тебе нравятся
Про хуки было в FAQ :)


Mazenrat   (2002-08-31 18:53:00) [11]

Не знаем???


Наверх

Титульная страница Поиск, карта сайта Написать письмо