如何在.net中查找NumLock,CapsLock和ScrollLock鍵的狀態?如何在.net中找到NumLock,CapsLock和ScrollLock的狀態?
30
A
回答
42
導入WinAPI的函數函數GetKeyState
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);
,然後可以用它像
bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;
編輯:上述爲框架1.1,對於框架2.0 +可以使用
32
使用Framework 2.0及以上版本,您可以使用一個框架功能
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.iskeylocked%28v=vs.80%29.aspx
public static bool NumlockActive()
{
return Control.IsKeyLocked(Keys.NumLock);
}
10
如果有人遇到這個線程,而在WPF開發時,可以使用被介紹在.NET中3.0 Keyboard.IsToggled方法:
var isNumLockToggled = Keyboard.IsKeyToggled(Key.NumLock);
var isCapsLockToggled = Keyboard.IsKeyToggled(Key.CapsLock);
var isScrollLockToggled = Keyboard.IsKeyToggled(Key.Scroll);
你如果它不在那裏:
using System.Windows.Input;
不得不添加以下
using
指令
在內部,IsToggled()方法檢查是否爲指定的鍵設置了KeyStates.Toggled
標誌。
[Flags]
public enum KeyStates : byte
{
None = (byte) 0,
Down = (byte) 1,
Toggled = (byte) 2,
}
4
檢查國家
要檢查的狀態的CapsLock,的NumLock和ScrollLock鍵鍵,你可以使用 Control.IsKeyLocked
方法:
var capsLockIsOn = Control.IsKeyLocked(Keys.CapsLock);
積極展現站te
由於鎖定鍵可以打開或關閉,當您的應用程序沒有焦點處理的形式的鍵盤事件不足以檢測鍵鎖定狀態的變化,你也應該把你的邏輯一些其他地方,如表單的激活事件,或者你需要註冊一個全局鍵盤鉤子。
作爲一種簡單可靠的解決方案,您可以在Application.Idle
事件中檢查其狀態。當表單關閉時,您必須分離空閒事件處理程序。
public Form1()
{
InitializeComponent();
Application.Idle += Application_Idle;
}
void Application_Idle(object sender, EventArgs e)
{
if (Control.IsKeyLocked(Keys.CapsLock))
toolStripStatusLabel1.Text = "CapsLock is On";
else
toolStripStatusLabel1.Text = "";
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
Application.Idle -= Application_Idle;
base.OnFormClosed(e);
}
相關問題
- 1. UWP - 如何檢查NumLock和CapsLock狀態?
- 2. StatusStrip中的Num Caps ScrollLock狀態WindowsForms
- 3. 檢查capsLock狀態
- 4. 在Silverlight中獲取Numlock的狀態
- 5. Numlock和CAPSLOCK在VBA中總是打開訪問
- 6. CapsLock,NumLock,Insert,當鍵盤沒有LED時如何在屏幕上顯示鍵盤狀態
- 7. 如何在有限狀態機中找到無用的狀態序言
- 8. Object.keys中找不到狀態
- 9. ui-router如何設置默認狀態和「未找到(404)」狀態
- 10. .Net 4.5中System.Json的狀態
- 11. 如何從JavaScript中的值中找到按鈕的狀態?
- 12. Rails的找到狀態
- 13. 如何在有限狀態機中找到錯誤序列?
- 14. 如何在C中找到套接字連接狀態?
- 15. 擊解析器和找到狀態
- 16. 如何在.net中控制Windows的狀態?
- 17. 如何獲取HP Scanner 5590平板在c#.net中的狀態?
- 18. 如何在.NET中等待另一個進程的狀態?
- 19. 在WinForms .NET C#中,如何將保存到磁盤的TreeView控件的狀態
- 20. 的Net :: HTTP GET源代碼和狀態
- 21. 如何理解TensorFlow中的靜態形狀和動態形狀?
- 22. 如何在產品HAS_ONE狀態和狀態機的關聯
- 23. HTTP狀態404 - 找不到
- 24. javax.ejb.NoSuchEJBException:找不到狀態bean
- 25. Git中的rebase和merge狀態如何?
- 26. 如何找出匹配器的狀態?
- 27. 如何在ADF中返回失敗狀態.Net活動
- 28. HTTP狀態404 - 未在jsp上找到
- 29. PyCharm:在CapsLock-u和CapsLock-n之間切換代碼和運行/終端
- 30. 如何在狀態爲up的狀態下顯示SimpleButton狀態
我在這裏可能是錯的,但是這不會嚴格限制Windows版嗎?第一個選項直接掛鉤到一個.dll,而第二個需要System.Windows.Forms – 2015-05-16 12:26:32
如果你不使用WinForms,(例如控制檯),你可以使用`(bool)Console.CapsLock`。 – 2017-04-18 11:50:21