我有一个带多个键盘的电脑,所有的大写锁定灯同步打开/关闭。 (所以,如果一个用户/键盘开启大写锁,每个人都在帽型)我可以在单个键盘上打开/关闭Capslock灯吗?
我在想节省标志每个键盘的大写锁状态,但我只是意识到,灯光将不对应每个用户/键盘的CapsLock键状态。
我只是想知道,大小写锁定灯是否可以独立打开/关闭。我已经计划禁用大写锁定(因为我不太喜欢那个关键),但是如果客户想要使用它,我可以找到一种方法来做到这一点,或告诉他们这是不可能的。
我有一个带多个键盘的电脑,所有的大写锁定灯同步打开/关闭。 (所以,如果一个用户/键盘开启大写锁,每个人都在帽型)我可以在单个键盘上打开/关闭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(我发现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.
希望这有助于
这不是控制灯的状态。它假装按下一个键来操纵操作系统大写锁定状态。它忽略了有多个键盘的问题,每个键盘都有自己的一组灯。你可以在一个键盘上设置大写锁定,而另一个是正常的。 – 2010-08-23 07:39:25
@rob感谢您指出,我应该删除我的答案吗? – 2010-08-23 09:09:46
哇。这是很多工作。谢谢回答。这是否适用于XP?我会试着在delphi中做这个,并从那里修改它。 – Dian 2010-08-20 07:55:59
是的,但你会忍者:) – 2010-08-20 09:31:13
哪一部分符合“忍者”身份?将C代码翻译成Delphi,或者使代码适用于Windows XP?如果前者,那么你需要重新考虑你的评级系统,因为该代码非常简单。如果是后者,那么你能描述一下Dian和其他人为了使代码在更高版本的Windows中工作而面临的一些障碍吗? – 2010-08-20 11:53:36