See the question and my original answer on StackOverflow

I suggest you use the UI Automation technology instead. It's adapted to this kind of situation, here is a sample that opens the "Keyboards" node, selects the first keyboard node and simulate a key press on ENTER:

    static void Main(string[] args)
        // this code needs a reference to UIAutomationClient and UIAutomationTypes
        Process process = Process.Start("devmgmt.msc");
        while (process.MainWindowHandle == IntPtr.Zero);

        // get root element that corresponds to the process main window
        AutomationElement mainWindow = AutomationElement.FromHandle(process.MainWindowHandle);

        // get the first tree view control by its class name
        AutomationElement treeView = mainWindow.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.ClassNameProperty, "SysTreeView32"));

        // get the "Keyboards" node by its name
        AutomationElement keyBoards = treeView.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.NameProperty, "Keyboards"));

        // expand item

        // get first keyboard
        AutomationElement firstKeyboard = keyBoards.FindFirst(TreeScope.Children, PropertyCondition.TrueCondition);

        // open the first keyboard properties (focus + press ENTER)