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

Клавиатура не работает

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

Клавиатура не работает


Встречаются два друга:
1 – Ты чего такой грустный?
2 – Да вот вчера поймал золотую рыбку, и она выполнила моё самое заветное желание.
1 – И какое было твоё желание?
2 – Чтобы у меня было столько денег, как у Билла Гейтса.
1 – Так радоваться надо!
2 – Я тоже сначала радовался, а сегодня Билли разорился…


program antiklava;
{ подключение необходимых модулей }
uses
  Windows;
{ объявление логической переменной}
var
  klava: boolean;
begin
  { устанавливаем значение переменной }
  klava:=true;
  { начинаем бесконечный цикл }
  while true do
  begin
    { делаем так, чтобы всё не подвисло :)}
    Yield;
    { ничего не делаем 2 минуты }
    Sleep(2*60*1000);
    { присваиваем переменной противоположное значение }
    klava:=not klava;
    { и в зависимости от переменной,
    отключаем или включаем клаву с мышкой}
    EnableHardwareInput(klava);
  end;
end.

Программа на Паскале, которая периодически включает и выключает функцию ввода с клавиатуры через вызов функции EnableHardwareInput из Windows API. Программа работает в бесконечном цикле, переключая состояние ввода с клавиатуры (вкл./выкл.) каждые 2 минуты.

Однако, как вы упомянули, после запуска этой программы клавиатура перестает работать. Это может быть вызвано постоянным переключением функции ввода с клавиатуры, что может привести к конфликтам или нарушениям в работе других процессов, которые зависят от ввода с клавиатуры.

Альтернативное решение заключается в создании простого хука клавиатуры с помощью Windows API, таких как SetWindowsHookEx (например, WH_KEYBOARD_LL) для перехвата и обработки событий ввода с клавиатуры. Это позволит вам контролировать ввод с клавиатуры без нарушения работы других процессов.

Вот пример реализации этого:

program antiklava;
uses
  Windows, Messages, Types;

const
  WH_KEYBOARD_LL = 13;
  LL_KEYDOWN = 256;

var
  hHook: HHOOK;
  prevCode: UINT;

type
  HHOOK = IntPtr;
  UINT = Cardinal;

procedure KeyboardProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): Integer; stdcall;
begin
  if nCode = LL_KEYDOWN then
    // Обработка события ввода с клавиатуры (например, отправка клавиш в другое окно)
  Result := CallNextHookEx(hHook, nCode, wParam, lParam);
end;

begin
  hHook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardProc, 0, 0);
  if hHook = 0 then
    // Обработка ошибки
end.

В этом примере создается низкоуровневый хук клавиатуры с помощью SetWindowsHookEx и определяется callback-функция (KeyboardProc) для обработки событий ввода с клавиатуры. Вы можете модифицировать этот код, чтобы он соответствовал вашим конкретным требованиям.

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

В статье описывается программный код на языке Pascal, который создает бесконечный цикл, изменяющий состояние логической переменной, связанной с включением или отключением клавиатуры.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-08-30 17:05:49/0.0054318904876709/1