![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вроде 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]
Ни кто не хочет помочь?