Показать сообщение отдельно
  #5  
Старый 26.07.2007, 11:44
CODeRUS CODeRUS вне форума
Прохожий
 
Регистрация: 25.07.2007
Сообщения: 8
Репутация: 10
По умолчанию

Запросто:
Код:
var                //переменные в Юните
hHook: THandle;
VKey:integer;

function LowLevelKeyboardProc(nCode: Integer;
  WParam: WPARAM; LParam: LPARAM): LRESULT stdcall;

  type
  PKbdDllHookStrukt = ^TKbdDllHookStrukt;
  _KBDLLHOOKSTRUCT = record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: PDWORD;
  end;
  TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;

const
  RPT_WPARAM_DATA = '%s';
  RPT_LPARAM_DATA = '%d';

var
  StrResult: String;
begin
  StrResult := '';
  if nCode = HC_ACTION then
    Result := CallNextHookEx(hHook, nCode, WParam, LParam);
  case WParam of
    WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
    WM_KEYUP: StrResult := Format(RPT_WPARAM_DATA, ['']);
    WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']);
    WM_SYSKEYUP: StrResult := Format(RPT_WPARAM_DATA, ['']);
  end;
  StrResult := Format(RPT_LPARAM_DATA, [PKbdDllHookStrukt(LParam)^.vkCode]);
  
  VKey:=strtoint(strresult); //Получаем VKey нажатой клавиши

end;

procedure InstallHook;
const
  WH_KEYBOARD_LL = 13;
begin
  hHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
  if hHook = 0 then RaiseLastOSError;
end;

procedure RemoveHook;
begin
if not UnhookWindowsHookEx(hHook) then RaiseLastOSError;
end;
Цифровой код передаётся в переменную VKey.
Собственно как теперь мне нреобразовать цифровой код в название нажатой клавиши?
Ответить с цитированием