2010-08-20 51 views
1

我有一个带多个键盘的电脑,所有的大写锁定灯同步打开/关闭。 (所以,如果一个用户/键盘开启大写锁,每个人都在帽型)我可以在单个键盘上打开/关闭Capslock灯吗?

我在想节省标志每个键盘的大写锁状态,但我只是意识到,灯光将不对应每个用户/键盘的CapsLock键状态。
我只是想知道,大小写锁定灯是否可以独立打开/关闭。我已经计划禁用大写锁定(因为我不太喜欢那个关键),但是如果客户想要使用它,我可以找到一种方法来做到这一点,或告诉他们这是不可能的。

回答

2
+0

哇。这是很多工作。谢谢回答。这是否适用于XP?我会试着在delphi中做这个,并从那里修改它。 – Dian 2010-08-20 07:55:59

+1

是的,但你会忍者:) – 2010-08-20 09:31:13

+2

哪一部分符合“忍者”身份?将C代码翻译成Delphi,或者使代码适用于Windows XP?如果前者,那么你需要重新考虑你的评级系统,因为该代码非常简单。如果是后者,那么你能描述一下Dian和其他人为了使代码在更高版本的Windows中工作而面临的一些障碍吗? – 2010-08-20 11:53:36

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(我发现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

这不是控制灯的状态。它假装按下一个键来操纵操作系统大写锁定状态。它忽略了有多个键盘的问题,每个键盘都有自己的一组灯。你可以在一个键盘上设置大写锁定,而另一个是正常的。 – 2010-08-23 07:39:25

+0

@rob感谢您指出,我应该删除我的答案吗? – 2010-08-23 09:09:46

相关问题