Можно ли включить свет Capslock / на отдельных клавиатурах?

У меня один компьютер с несколькими клавиатурами, все индикаторы колпачка включаются / выключаются синхронно. (поэтому, если один пользователь / клавиатура включает заглавную букву, все вводят заглавные буквы).

Я думал о сохранении состояния заглавной буквы каждой клавиатуры в флагах, но я только что понял, что индикаторы не будут соответствовать статусу заглавной буквы каждого пользователя / клавиатуры.
Я просто хочу знать, можно ли включать / выключать лампочку выключателя. Я уже планирую отключить колпачок (поскольку мне не очень нравится этот ключ), но в случае, если клиент захочет его использовать, я могу либо найти способ сделать это, либо сказать им, что это невозможно.

1
задан Dian 20 August 2010 в 07:58
поделиться

2 ответа

попробуйте

http://www.codeguru.com/Cpp/W-P/system/keyboard/article.php/c2825

немного сложно, но выполнимо :)

2
ответ дан 2 September 2019 в 21:58
поделиться

вы можете программно получить и установить состояние клавиш CapsLock с помощью функции Keybd_Event
попробуйте следующее:

var
    KeyState: TKeyboardState;
 begin
    GetKeyboardState(KeyState) ;
   if (KeyState[VK_CAPITAL] = 0) then
    begin  //simulate key down
      Keybd_Event(VK_CAPITAL, 1, KEYEVENTF_EXTENDEDKEY or 0, 0) ;
      Keybd_Event(VK_CAPITAL, 1, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0) ;
    end
    else
    begin  //simulate key up
      Keybd_Event(VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY or 0, 0) ;
      Keybd_Event(VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0) ;
    end;

если вы ДЕЙСТВИТЕЛЬНО хотите отключить ключ (что я не рекомендую), вы можете использовать эту библиотеку под названием BlockKeys (я нашел библиотеку BlockKeys на http://www.experts-exchange.com/Programming/ Languages ​​/ Pascal / Delphi / Q_21504230.html ):

library BlockKeys;

uses
  Windows,
  Messages;

{$R *.RES}

var
hKeyHook: THandle = 0;
Hooked: Boolean = False;

function HookFunc(Code, VirtualKey, KeyStroke: Integer): Integer; stdcall;
begin
if  VirtualKey in [VK_TAB, VK_CONTROL, VK_MENU, VK_ESCAPE, VK_F1] then
  Result := 32
  else
  Result := CallNextHookEx(hKeyHook, Code, VirtualKey, KeyStroke);
end;


function StartHook: Boolean; export;
begin
Result := False;
if Hooked then
  begin
  Result := True;
  Exit;
  end;

hKeyHook := SetWindowsHookEx(WH_KEYBOARD, HookFunc, hInstance, 0);
if hKeyHook <> 0 then
  begin
  Result := True;
  Hooked := True;
  end;
end;


function StopHook: Boolean; export;
begin
if Hooked then
  Result := UnhookWindowsHookEx(hKeyHook)
  else
  Result := True;
if Result then Hooked := False;
end;

exports
  StartHook,
  StopHook;

begin

end.

надеюсь, что это поможет

0
ответ дан 2 September 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: