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

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

Вроде HotKey, а вроде и нет... [D7, Win2k, WinXP]


novenkiy ©   (2003-10-09 15:25:00) 

Приветствую всех!

Я натолкнулся на следующую проблемму у меня не срабатывает HotKey он должен быть глобальным и срабатывать в любом приложении. Подскажите что не так
вот мой код:
library libhot;

uses
Windows, Messages;
var
H : THandle;
a, :integer;

Function WindowProc(h, uMsg, wParam, lParam: Integer): Integer; Stdcall; Export;

Begin
Result := 0;
case uMsg of
wm_hotkey:
begin
if wParam=a then
begin
keybd_event( VK_NUMPAD0, MapVirtualKey(Vk_NumPad0,0), 0, 0 );
keybd_event( VK_NUMPAD0, MapVirtualKey(Vk_NumPad0,0), KEYEVENTF_KEYUP, 0 );
end;

end;
end;
begin
Result:=DefWindowProc(h,umsg,wParam,lParam);
exit;
end;

Result:=DefWindowProc(h,umsg,wParam,lParam);
end;

procedure sethookhot;
begin
a := GlobalAddAtom("Hot1");
RegisterHotKey(H, a, MOD_Alt, 82);

H:= SetWindowsHookEx(WH_keyboard, @WindowProc, hInstance, 0);
if H = 0 then
messageBox(0,"


novenkiy   (2003-10-16 10:00:00) [1]

Удалено модератором
Примечание: Offtopic


novenkiy   (2003-10-14 08:28:00) [2]

а если я посталю просто HotKey тогда он у меня результат будет срабатывать только в своем приложении. Хотя ловится будет глобально


novenkiy   (2003-10-14 08:24:00) [3]


> HotKey тебе не нужен, либо HotKey - тогда тебе не нужны
> хуки

Дело в том что я поставил хук на нажатие Alt+R например, и вот нажимаю я значить эту комбинацию. Потом срабатывает хук и выводится символ, который я заранее определил. Но, есть одно но. В том приложении где я нажал Alt+R, может стоять таже самая комбинация на HotKey самого приложения. Получается я хук поставил и он сработал и одновременно сработал HotKey того приложения с которым я работаю.


Ixion   (2003-10-13 23:24:00) [4]


> Я знаю, что я пишу. Мне нужно чтобы в любом приложении где
> бы я не нажал Alt+R печатался ноль, вот и все а у меня HotKey
> не срабатывает...
> Почему?

Потому что ты все-же НЕ знаешь, что пишешь. Выбери что-нибудь одно - либо хуки, тогда HotKey тебе не нужен, либо HotKey - тогда тебе не нужны хуки. Судя по коду для тебя будет проще испрользовать HotKey. Для его использования НЕ НУЖНО никаких DLL и SetWindowsHookEx. Достаточно создать форму, в описании которой указать:

TForm1 = class(TForm)
...
procedure WMHotKey(var Message: TWMHotKey) message WM_HOTKEY;
...
end;

...

procedure TForm1.WMHotKey(var Message: TWMHotKey);
begin
if Message.HotKey = a then
begin
keybd_event( VK_NUMPAD0, MapVirtualKey(Vk_NumPad0,0), 0, 0 );
keybd_event( VK_NUMPAD0, MapVirtualKey(Vk_NumPad0,0), KEYEVENTF_KEYUP, 0 );
end;
end;


затем при запуске программы вызвать
RegisterHotKey(Form1.Handle, a, MOD_Alt, 82);

И все. Ну а если душа просит это все сделать на чистом WinAPI, то исходя из приведенного тобой кода, я бы посоветовал тебе сначала прочитать хорошую книгу по Windows программированию.


novenkiy   (2003-10-13 11:28:00) [5]

Я знаю, что я пишу. Мне нужно чтобы в любом приложении где бы я не нажал Alt+R печатался ноль, вот и все а у меня HotKey не срабатывает...
Почему?


Ixion   (2003-10-10 15:48:00) [6]

А ты хоть понял, что написал ? :))
Зачем тебе вообще Hook ? Если используешь WM_HOTKEY то создавать надо окно, оконная функция которого и будет ловить это самое сообщение.


novenkiy   (2003-10-10 14:01:00) [7]

так никто и не хочет помочь :-(((((((((((


novenkiy   (2003-10-10 07:50:00) [8]

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


Songoku   (2003-10-09 16:12:00) [9]

А чему равно а ????
Если ты хочешь отследить HotKey то для этого используй WM_HOTKEY!!!


RustiK   (2003-10-09 15:55:00) [10]

Ни кто не хочет помочь?


Наверх

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