2009-04-09 42 views
5

在Silverlight應用程序的登錄屏幕中,我需要確定Caps Lock是否已切換。通過處理KeyUp或KeyDown事件很容易,但是如何確定是否打開或關閉即使鍵未被按下?如何確定Caps Lock是否在Silverlight應用程序中切換?

我想要這樣做的原因是,如果用戶在Silverlight應用程序運行時沒有按Caps Lock,而是在它們進入登錄屏幕之前就切換了它?我仍然需要警告他們鎖定了鎖定狀態。

在Silverlight中顯然處理非託管代碼是不可能的,所以下面的代碼不起作用。

[DllImport(「user32.dll」)] internal static extern short GetKeyState(int keyCode);

回答

4

檢測CAPS LOCKS的方法是檢查KeyValue和KeyEventArgs的Shift。
如果KeyValue是(例如)'A',但Shift是false,則CAPS LOCKS打開。
不是最好的方法,但它的how ajax applications has been doing it

+0

謝謝你。有沒有辦法在Silverlight XAML後面的代碼中的KeyUp/KeyDown事件中確定它? – Rogan 2009-04-09 07:45:04

0

據我所知你不能。您可能能夠從應用程序中上下移動鍵,但如果用戶離開您的應用程序,您將無法知道它處於什麼狀態。

我沒有注意到它在SL3中有任何額外的支持,但我不能說我一直特別尋找它。

0

Silverlight不支持在客戶端調用Win32 DLL。所以你不能使用上面的技巧來測試Capslock鍵是否被按下。您是否嘗試過使用KeyDown事件並測試系統密鑰?我沒有那樣做,但這是一種預感。

+0

是的,KeyDown和KeyUp事件可以正常工作,但是我試圖確定Caps Lock是否打開,而不是如果它被按下。如果有人在進入我的Silverlight應用程序之前切換大寫鎖定,我需要警告它已打開。 – Rogan 2009-04-09 07:18:20

相關問題