Форум: "WinAPI";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Вниз
Вроде 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c