如何确定是不是在 Silverlight 应用程序中切换了 Caps Lock?

Posted

技术标签:

【中文标题】如何确定是不是在 Silverlight 应用程序中切换了 Caps Lock?【英文标题】:How to determine if the Caps Lock is toggled in a Silverlight Application?如何确定是否在 Silverlight 应用程序中切换了 Caps Lock? 【发布时间】:2010-10-18 12:00:28 【问题描述】:

在 Silverlight 应用程序的登录屏幕中,我需要确定是否切换了 Caps Lock。这很容易通过处理 KeyUp 或 KeyDown 事件,但是即使没有按下某个键,如何确定它是打开还是关闭?

我想要这样做的原因是,如果用户在 Silverlight 应用程序运行时没有按 Caps Lock,而是在进入登录屏幕之前切换了它,该怎么办?我仍然需要警告他们大写锁定已打开。

显然,在 Silverlight 中无法处理非托管代码,因此以下操作不起作用。

[DllImport("user32.dll")] 内部静态外部短 GetKeyState(int keyCode);

【问题讨论】:

【参考方案1】:

检测CAPS LOCKS的方法是检查KeyEventArgs的KeyValue和Shift。 如果 KeyValue 为(例如)“A”但 Shift 为 false,则 CAPS LOCKS 处于打开状态。 不是最好的方法,而是它的how ajax applications has been doing it。

【讨论】:

谢谢你。有没有办法在 Silverlight XAML 背后的代码中的 KeyUp/KeyDown 事件中确定它? 是的,javascript 事件和 SilverLight 事件相当苗条。只需获取代码并将其转换为 C#。 优秀的解决方案。唯一需要注意的是(正如您链接的 Javascript 解决方案中所指出的),您还希望处理相反的情况 - 如果它是小写但 shift 为真,这也表示大写锁定。【参考方案2】:

据我所知,你不能。您也许可以从您的应用中获取上下键,但如果用户离开您的应用,您将不知道它处于什么状态。

我没有注意到 SL3 中对它有任何额外的支持,但我不能说我一直在特别寻找它。

【讨论】:

【参考方案3】:

Silverlight 不支持在客户端调用 Win32 DLL。所以你不能使用上面的技术来测试 Capslock 键是否被按下。您是否尝试过使用 KeyDown 事件并测试系统键?我没有这样做,但这是一种预感。

【讨论】:

是的,KeyDown 和 KeyUp 事件可以正常工作,但是我正在尝试确定 Caps Lock 是否已打开,而不是是否被按下。如果有人在转到我的 Silverlight 应用程序之前切换 Caps Lock,我需要警告他们它已打开。

以上是关于如何确定是不是在 Silverlight 应用程序中切换了 Caps Lock?的主要内容,如果未能解决你的问题,请参考以下文章

你能在 Silverlight 的 SaveFileDialog 中设置初始目录吗

Silverlight 是不是有标准或推荐的外部字幕格式?

如何使用 C# 的 silverlight saveDialog 检测文件是不是打开?

Windows phone silverlight one 主题

如何使用任务延迟而不是Windows Silverlight应用程序中的线程睡眠

从Silverlight使用Windows Azure Service Bus