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

Вниз

HotKey   Найти похожие ветки 

 
theodor_iv ©   (2003-06-08 16:35) [5]

Нет необходимости все это писать в dll, все это можно написать прямо в программе. Также нет необходимости перехватывать ВСЕ СООБЩЕНИЯ системы при помощи WH_GETMESSAGE, когда нужна только клавиатура. Нужно использовать WH_KEYBOARD.


var
Hook: HHook;

function KeyboardHook(Code: Integer; VirtualKeyCode: WParam; Info: LParam): Integer; stdcall;
var
KbdState: TKeyboardState;
Modifiers: byte;
begin
if Code < 0
then Result := CallNextHookEx(Hook, Code, VirtualKeyCode, Info)
else begin
if VirtualKeyCode in [$10, $11, $12, $5B, $5C] // modifier
then begin
GetKeyboardState(KbdState);
Modifiers :=
(((KbdState[VK_LWIN] and $80) or (KbdState[VK_RWIN] and $80)) shr 4) or
((KbdState[VK_SHIFT] and $80) shr 5) or
((KbdState[VK_CONTROL] and $80) shr 6) or
((KbdState[VK_MENU] and $80) shr 7);
FrmHKEdit.Caption := IntToHex(Modifiers, 2);
end
else begin
if (Info and $80000000 <> 0) and Assigned(
then begin
FrmHKEdit.Caption := IntToHex(VirtualKeyCode, 2);
end;
end;
Result := 1;
end;
end;

procedure TFrmHKEdit.FormShow(Sender: TObject);
begin
Hook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHook, 0, GetCurrentThreadId);
end;

procedure TFrmHKEdit.FormHide(Sender: TObject);
begin
UnhookWindowsHookEx(Hook);
end;


Можно еще в обработчике события TEdit.OnKeyDown/OnKeyUp использовать функцию GetKeyboardState



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

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

Наверх




Память: 0.46 MB
Время: 0.053 c
4-84829
Akvilon
2003-04-24 18:34
2003.06.26
Возвращаясь к вопросу об уникальности окон


14-84731
Juster~
2003-05-31 22:18
2003.06.26
Ээээээ...


1-84133
Frist_May
2003-06-11 09:14
2003.06.26
ComboBox + F4


1-84132
Dr. Andrew
2003-06-10 13:18
2003.06.26
Нет прорисовки Canvas при изменении (увеличении) размеров Image1!


1-84314
Shark
2003-06-15 17:59
2003.06.26
Событие onMouseMove