2010-08-20 78 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

相關問題