Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C检测windows 7上的键盘_C#_Wpf_Windows 7_Keyboard_Detection - Fatal编程技术网

C# 使用C检测windows 7上的键盘

C# 使用C检测windows 7上的键盘,c#,wpf,windows-7,keyboard,detection,C#,Wpf,Windows 7,Keyboard,Detection,我一直在寻找一种方法,当触摸屏设备使用指针设备驱动程序而不是触摸屏显示驱动程序时检测触摸屏设备,或者从C&WPF中检测键盘是否存在 请注意,这是在Windows 7 embedded下进行的,而不是在Windows 8下进行的 我看过一些有关system.management等的参考资料,但我不确定如何以这种方式使用它们 基本上,如果未连接键盘且用户输入文本框,则会出现WPF键盘。如果通过触摸选择文本框,则应获得或事件。你可以注册其中一个,如果它被触发,你可以显示键盘…好的,所以我几天前找到了这

我一直在寻找一种方法,当触摸屏设备使用指针设备驱动程序而不是触摸屏显示驱动程序时检测触摸屏设备,或者从C&WPF中检测键盘是否存在

请注意,这是在Windows 7 embedded下进行的,而不是在Windows 8下进行的

我看过一些有关system.management等的参考资料,但我不确定如何以这种方式使用它们


基本上,如果未连接键盘且用户输入文本框,则会出现WPF键盘。

如果通过触摸选择文本框,则应获得或事件。你可以注册其中一个,如果它被触发,你可以显示键盘…

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

在这个方法中,我使用一个名为HIDSHARP的Nuget库遍历usbhid列表,通过在描述中查找单词keyboard来查看是否连接了键盘

然后,如果找不到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;
            }
        }

    }

啊,哇,尝试以编程方式执行此操作并检查事件类型,但首先触地会触发,然后mousedown会覆盖它。改为对触地预览事件和boom使用特定功能,效果良好。谢谢,伙计,我真的很感激。p、 现在我该怎么说才能让你回答我的问题?@Slipoch你把他的答案标记为正确应该有一个选项让你选择箭头和零的位置。啊,该死的,不,触地事件不起作用,我以为它起作用了,但它把触摸屏当作鼠标甚至都不会触发触地事件,对不起,我的测试代码太多了。@Slipoch:你确定你有一个真正的触摸屏而不是一个模拟鼠标的触摸屏吗?这就是我的意思,当它使用指针设备驱动程序而不是触摸屏显示驱动程序时,所以我想尝试检测键盘预感,而不是尝试检测触摸