使用 C# 在 windows 7 上检测键盘
Detect keyboard on windows 7 using C#
我一直在寻找一种方法来检测触摸屏设备(当它使用指针设备驱动程序而不是触摸屏显示驱动程序时)或检测 C# 和 WPF 中何时存在键盘。
请注意,这是 Windows 7 嵌入的,而不是 windows 8.
我看到了一些对 system.management 等人的引用。但不确定如何以这种方式使用它们。
本质上这是为了在没有连接键盘并且用户输入文本框时出现 WPF 键盘。
如果文本框是通过 Touch 选择的,您应该得到 GotTouchCapture
or TouchDown
事件。您可以注册到其中一个并在它被触发时显示键盘...
好的,所以我几天前找到了这个解决方案,它似乎应该运行良好,因为如果键盘连接到触摸屏设备,它也不会显示屏幕键盘(至少它不应该,除非OS 覆盖了它,我还没有正确测试它)
在这种方法中,我使用名为 HIDSHARP 的 Nuget 库浏览 USB HID 列表,通过在描述中查找单词键盘来查看是否连接了键盘。
如果找不到 USB,我会通过管理对象查找 ps/2 键盘。
/// <summary>
/// TEST AND SET GLOBAL KEYBOARD ATTACHED BOOL keyB
/// </summary>
internal static void TestKeyboard()
{
keyB = false;
//FIND WHETHER A USB KEYBOARD IS PLUGGED IN
HidSharp.HidDeviceLoader hd = new HidSharp.HidDeviceLoader();
foreach (HidSharp.HidDevice item in hd.GetDevices())
{
if (item.ProductName.Contains("Keyboard"))
{
keyB = true;
return;
}
}
//FIND WHETHER A PS/2 KEYBOARD IS PLUGGED IN.
string query = "select * from Win32_Keyboard";
System.Management.ObjectQuery oQuery = new ObjectQuery(query);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(oQuery);
ManagementObjectCollection recordSet = searcher.Get();
foreach (ManagementObject record in recordSet)
{
if (record.Properties["Description"].Value.ToString().Contains("Keyboard"))
{
keyB = true;
return;
}
}
}
我一直在寻找一种方法来检测触摸屏设备(当它使用指针设备驱动程序而不是触摸屏显示驱动程序时)或检测 C# 和 WPF 中何时存在键盘。
请注意,这是 Windows 7 嵌入的,而不是 windows 8.
我看到了一些对 system.management 等人的引用。但不确定如何以这种方式使用它们。
本质上这是为了在没有连接键盘并且用户输入文本框时出现 WPF 键盘。
如果文本框是通过 Touch 选择的,您应该得到 GotTouchCapture
or TouchDown
事件。您可以注册到其中一个并在它被触发时显示键盘...
好的,所以我几天前找到了这个解决方案,它似乎应该运行良好,因为如果键盘连接到触摸屏设备,它也不会显示屏幕键盘(至少它不应该,除非OS 覆盖了它,我还没有正确测试它)
在这种方法中,我使用名为 HIDSHARP 的 Nuget 库浏览 USB HID 列表,通过在描述中查找单词键盘来查看是否连接了键盘。
如果找不到 USB,我会通过管理对象查找 ps/2 键盘。
/// <summary>
/// TEST AND SET GLOBAL KEYBOARD ATTACHED BOOL keyB
/// </summary>
internal static void TestKeyboard()
{
keyB = false;
//FIND WHETHER A USB KEYBOARD IS PLUGGED IN
HidSharp.HidDeviceLoader hd = new HidSharp.HidDeviceLoader();
foreach (HidSharp.HidDevice item in hd.GetDevices())
{
if (item.ProductName.Contains("Keyboard"))
{
keyB = true;
return;
}
}
//FIND WHETHER A PS/2 KEYBOARD IS PLUGGED IN.
string query = "select * from Win32_Keyboard";
System.Management.ObjectQuery oQuery = new ObjectQuery(query);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(oQuery);
ManagementObjectCollection recordSet = searcher.Get();
foreach (ManagementObject record in recordSet)
{
if (record.Properties["Description"].Value.ToString().Contains("Keyboard"))
{
keyB = true;
return;
}
}
}