【发布时间】:2011-04-01 11:06:14
【问题描述】:
我有一台带有多个键盘的电脑,所有的大写锁定灯都同步打开/关闭。 (所以如果一个用户/键盘打开大写锁定,每个人都输入大写)
我正在考虑将每个键盘的大写锁定状态保存在标志中,但我刚刚意识到灯不会对应每个用户/键盘的大写锁定状态。
我只想知道 capslock 灯是否可以独立打开/关闭。我已经计划禁用大写锁定(因为我不太喜欢那个键),但如果客户想要使用它,我可以找到一种方法来做到这一点,或者告诉他们这是不可能的。
【问题讨论】:
我有一台带有多个键盘的电脑,所有的大写锁定灯都同步打开/关闭。 (所以如果一个用户/键盘打开大写锁定,每个人都输入大写)
我正在考虑将每个键盘的大写锁定状态保存在标志中,但我刚刚意识到灯不会对应每个用户/键盘的大写锁定状态。
我只想知道 capslock 灯是否可以独立打开/关闭。我已经计划禁用大写锁定(因为我不太喜欢那个键),但如果客户想要使用它,我可以找到一种方法来做到这一点,或者告诉他们这是不可能的。
【问题讨论】:
【讨论】:
您可以使用 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.
希望对你有帮助
【讨论】: