【问题标题】:Detect keyboard on windows 7 using C#使用 C# 在 Windows 7 上检测键盘
【发布时间】:2015-07-02 15:44:41
【问题描述】:

我一直在寻找一种方法来检测触摸屏设备(当它使用指针设备驱动程序而不是触摸屏显示驱动程序时)或从 C# 和 WPF 中检测键盘何时存在。

请注意,这是在嵌入式 Windows 7 下,而不是在 Windows 8 下。

我看到了一些对 system.management 等的引用。但我不确定如何以这种方式使用它们。

本质上,这是为了在未连接键盘并且用户输入文本框时出现 WPF 键盘。

【问题讨论】:

    标签: c# wpf windows-7 keyboard detection


    【解决方案1】:

    如果文本框是通过触摸选择的,您应该得到GotTouchCaptureTouchDown 事件。您可以注册其中一个并在被触发时显示键盘...

    【讨论】:

    • 啊哇,尝试以编程方式执行此操作并检查事件类型,但首先触地会触发,然后 mousedown 会覆盖它。更改为对 touchdownpreview 事件和繁荣使用特定功能,它起作用了。谢谢男人,我真的很感激。 p.s.现在我该如何告诉 SO 你回答了我的问题?
    • @Slipoch 您将他的答案标记为正确,您应该可以选择箭头和零所在的位置。
    • 啊,天啊,不,触地事件不起作用(我以为是,但它把触摸屏当作鼠标)甚至似乎都没有触发触地事件,抱歉让我的测试搞砸了代码。
    • @Slipoch:你确定你有一个“真正的触摸屏”而不是模拟鼠标吗?
    • 这就是我的意思(当它使用指针设备驱动程序而不是触摸屏显示驱动程序时)因此我想尝试检测键盘存在而不是尝试检测触摸
    【解决方案2】:

    好的,所以我几天前找到了这个解决方案,它似乎应该可以正常工作,因为如果键盘连接到触摸屏设备,它也不会显示屏幕键盘(至少它不应该除非操作系统覆盖它,我还没有正确测试)

    在这种方法中,我使用一个名为 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;
                }
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多