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