我有一台带有多个键盘的电脑,所有的大写灯都会同步打开/关闭。 (因此,如果一个用户/键盘打开了大写字母,那么每个人都会输入大写字母)
我正在考虑将每个键盘的大写锁定状态保存在标志中但我只是意识到每个用户/键盘的大写锁定状态灯都不对应。
我只是想知道封锁灯是否可以独立打开/关闭。我已经计划禁用大写锁(因为我不太喜欢那个键),但是如果客户想要使用它,我可以找到一种方法来做或告诉他们这是不可能的。
答案 0 :(得分:2)
答案 1 :(得分:0)
您可以使用Keybd_Event函数以编程方式获取和设置CapsLock键的状态 试试这个:
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的库(我在http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_21504230.html找到了BlockKeys库):
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.
希望这会有所帮助