Entwickler-Ecke

Basistechnologien - [gelöst] Tastatur erkennen für Vista/Windows7


berniebutt - Mi 13.07.16 14:41
Titel: [gelöst] Tastatur erkennen für Vista/Windows7
Ich möchte in einer Anwendung wissen, ob eine Tastatur vorhanden ist oder nicht, um ggfs.
eine virtuelle Tastatur bereitzustellen. Die für Windows10 vorgesehene Methode möchte ich
nicht nutzen, um die Anwendung auch unter Vista/Windows7 lauffähig zu halten.


Delete - Mi 13.07.16 15:30

- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - Mi 13.07.16 16:30

Hallo berniebutt :welcome:

schön, dich hier zu sehen. Du beziehst dich auf deinen Beitrag c-plusplus.net - Abfrage ob Tastatur vorhanden für Vista/Windows7 [https://www.c-plusplus.net/forum/338658] ?

Ich habe mal jetzt selber ein bißchen gestöbert:
How to check programatically if keyboard is connected or not? [http://stackoverflow.com/questions/28471864/how-to-check-programatically-if-keyboard-is-connected-or-not]
Get the Keyboard Details of Your System in Windows Form [http://www.c-sharpcorner.com/UploadFile/29d7e0/get-the-key-board-details-of-your-system-in-windows-form/]
Win32 determining when keyboard is connected/disconnected [http://stackoverflow.com/questions/9930958/win32-determining-when-keyboard-is-connected-disconnected]
Detect keyboard presence in Windows 8 desktop program [http://stackoverflow.com/questions/11993680/detect-keyboard-presence-in-windows-8-desktop-program]

Zuersteinmal würde ich den Ansatz mittels WMI ausprobieren (wobei ich nicht weiß, wie sich dieser bei NICHT-USB Keyboards verhält).
Ansonsten müßtest du doch mal die WINAPI bemühen (von C# aus dann entweder per P/Invoke oder C++/CLI).


berniebutt - Do 14.07.16 11:32

Ich habe die Lösung gefunden mit:



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;     // vs2010 --> Verweis hinzufügen!
using System.Management.Instrumentation;
// ------------------------------------------------------------------------------------------------
// Prüfen, ob Tastatur vorhanden
// ------------------------------------------------------------------------------------------------
namespace DetectDevice1
{
    public partial class Form1 : Form
    {
        private bool   kbExists = false;
        private string text1 = "", text2 = "";

        public Form1()
        {
            InitializeComponent();
        }
        
        private bool DetectKeyboard()
        {
            bool exists = false;
            ManagementObjectSearcher searcher = 
                new ManagementObjectSearcher("Select Name from Win32_Keyboard");
            foreach (ManagementObject keyboard in searcher.Get())
            {
                if (!keyboard.GetPropertyValue("Name").Equals(""))
                {
                    text2 += "\nKB name:   " + keyboard.GetPropertyValue("Name");
                    exists = true;
                }
            } 
            return exists;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            text1 = "Keyboard exists:      ";
            kbExists = DetectKeyboard();
            if (kbExists) text1 += "YES";
            else          text1 += "NO";
            label1.Text = text1;
            label2.Text = text2;
        }
     }
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt