Как предотвратить ловушку нажатий клавиш delphi - PullRequest
0 голосов
/ 04 февраля 2020

Я использую этот класс ( ссылка ) от Йенса Борришолта. Этот класс помогает отслеживать события клавиатуры. но проблема в том, что все нажатия клавиш находятся внутри моего приложения, и никакие символы не появляются в других программах !!!

  FHook := THookInstance<TLowLevelKeyboardHook>.CreateHook(Self);
  FHook.OnPreExecute := procedure(Hook: THook; var HookMsg: THookMessage)
    var
      LLKeyBoardHook: TLowLevelKeyboardHook;
      ScanCode: integer;
    begin
      LLKeyBoardHook := TLowLevelKeyboardHook(Hook);

      ScanCode := LLKeyBoardHook.KeyName.ScanCode;


      Caption := 'Got ya! Key [' + LLKeyBoardHook.KeyName.KeyExtName + '] blocked.';
      HookMsg.Result :=   LLKeyBoardHook.ThreadID;

    end;

  FHook.Active := true;

1 Ответ

0 голосов
/ 05 февраля 2020

Это работает для меня!

Я установил HookMsg.Result := 0; внутри FHook.OnPostExecute

FHook := THookInstance<TLowLevelKeyboardHook>.CreateHook(Self);
  FHook.OnPreExecute := procedure(Hook: THook; var HookMsg: THookMessage)
    var
      LLKeyBoardHook: TLowLevelKeyboardHook;
      ScanCode: integer;
    begin
      LLKeyBoardHook := TLowLevelKeyboardHook(Hook);

      if LLKeyBoardHook.LowLevelKeyStates.KeyState <> ksKeyDown then
        exit;

      ScanCode := LLKeyBoardHook.KeyName.ScanCode;

      if not(ScanCode in [VK_NUMPAD0 .. VK_NUMPAD9, VK_0 .. VK_9]) then
      begin
        Caption := 'Got ya! Key [' + LLKeyBoardHook.KeyName.KeyExtName + '] blocked.';
      end
      else
        Caption := '';

    end;


    FHook.OnPostExecute := procedure(Hook: THook; var HookMsg: THookMessage)
    begin
      HookMsg.Result := 0;
    end;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...