Могу ли я включить / выключить подсветку Capslock на отдельных клавиатурах? - PullRequest
1 голос
/ 20 августа 2010

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

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

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

попробуй

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

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

0 голосов
/ 21 августа 2010

Вы можете программно получить и установить состояние ключей 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 / Программирование / Языки / 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.

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

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