我有一個帶多個鍵盤的電腦,所有的大寫鎖定燈同步打開/關閉。 (所以,如果一個用戶/鍵盤開啓大寫鎖,每個人都在帽型)我可以在單個鍵盤上打開/關閉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