![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() скажите, как перехватить нажатие клавиши, допустим ctrl, когда форма свернута и является не активной?
при активной/не свернутой форме использую onkeydown, но вот если сверну и фокус уберу с программы, то она не срабатывает п.с. мне нужно только для конкретной клавиши ctrl, для других не нужно. |
#2
|
|||
|
|||
![]() используй клавиатурный хук
|
#3
|
|||
|
|||
![]() Цитата:
я сам знаю что клавиатурный хук надо использовать, но кода не знаю? |
#4
|
||||
|
||||
![]() Цитата:
Юзай ф-ю GetKeyState(VK_CONTROL). — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
![]() ага, +таймер и волшебный код готов.
|
#6
|
||||
|
||||
![]() Цитата:
![]() библиотека ловушки: Код:
library Hook; uses Windows, Messages; type KBDLLHOOKSTRUCT = record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: DWORD; end; PBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; const WH_KEYBOARD_LL: Integer = 13; var hCallWndProc: HHOOK = 0; function LowLevelKeyboardProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin if code>=0 then begin if (wParam=WM_KEYDOWN) then case PBDLLHOOKSTRUCT(lParam).vkCode of VK_LCONTROL, VK_RCONTROL: SendMessage(FindWindow('TForm1', 'Form1'), WM_APP+$100, 0, 0); end; end; Result:=CallNextHookEx(0, code, wParam, lParam) end; procedure SetHook(); begin hCallWndProc:=SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc, HInstance, 0); end; procedure UnSetHook(); begin if hCallWndProc<>0 then UnhookWindowsHookEx(hCallWndProc); end; exports SetHook, UnSetHook; begin end. модуль самой программы: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } procedure WMAPP100(var Msg: TMessage); message WM_APP+$100; end; var Form1: TForm1; procedure SetHook(); external 'Hook.dll'; procedure UnSetHook(); external 'Hook.dll'; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin SetHook; end; procedure TForm1.FormDestroy(Sender: TObject); begin UnSetHook; end; procedure TForm1.WMAPP100(var Msg: TMessage); begin Memo1.Lines.Add('ctrl'); end; end. вот здесь я уже показывал как такое делать) Пишу программы за еду. __________________ |
#7
|
||||
|
||||
![]() Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |