Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

Вроде HotKey, а вроде и нет...   Найти похожие ветки 

 
novenkiy   (2003-10-09 15:25) [0]

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

Я натолкнулся на следующую проблемму у меня не срабатывает 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,"


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

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


 
Songoku ©   (2003-10-09 16:12) [2]

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


 
novenkiy   (2003-10-10 07:50) [3]

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


 
novenkiy   (2003-10-10 14:01) [4]

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


 
Ixion ©   (2003-10-10 15:48) [5]

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


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

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


 
Ixion ©   (2003-10-13 23:24) [7]


> Я знаю, что я пишу. Мне нужно чтобы в любом приложении где
> бы я не нажал 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-14 08:24) [8]


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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-36731
JohnJohn
2003-11-27 18:40
2003.12.12
Можно ли хранить chr(0) в длинных строках D5 ?


1-36670
A JI E LLI A
2003-11-30 13:22
2003.12.12
Переменные


1-36651
g-l-u-k
2003-11-23 18:36
2003.12.12
DsgnIntf - не найден


3-36502
Элина
2003-11-22 17:59
2003.12.12
Как в SQL проверить поле на нулевое значение


14-36812
хламер
2003-11-20 10:23
2003.12.12
как установить компонент если он в виде пас файла