С# закрытие развернутой клавиатуры отключает программу

Мне удалось заставить клавиатуру в Windows 8 отображаться при нажатии на поле NumericUpDown в новой форме, которую я сделал всплывающей. К сожалению, кажется, что после закрытия клавиатуры при «потерянном фокусе» окно искажается и не будет отображать всю программу, пока это всплывающее окно не будет закрыто.

//Close keyboard
void CopiedNudPass_LostFocus(object sender, EventArgs e)
{

    Version win8version = new Version(6, 2, 9200, 0);

    if (Environment.OSVersion.Version >= win8version)
    {
        Process[] oskProcessArray = Process.GetProcessesByName("TabTip");
        foreach (Process onscreenProcess in oskProcessArray)
        {
            onscreenProcess.Kill();
        }
    Refresh();
    }
}

Итак, в основном мне нужно обновить фоновое окно при закрытии клавиатуры из открытой в данный момент формы. Любые советы приветствуются. Спасибо.


person fac7orx    schedule 23.12.2013    source источник


Ответы (1)


Я нашел свое решение здесь:

После завершения процесса для приложения TabletKeyboard(TabTip.exe) не возвращается к исходному размеру в wpf

Вот мой новый код закрытия:

//Close keyboard
void CopiedNudPass_LostFocus(object sender, EventArgs e)
{
        Version win8version = new Version(6, 2, 9200, 0);

        if (Environment.OSVersion.Version >= win8version)
        {
            uint WM_SYSCOMMAND = 274;
            uint SC_CLOSE = 61536;
            IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null);
            PostMessage(KeyboardWnd.ToInt32(), WM_SYSCOMMAND, (int)SC_CLOSE, 0);
        }
}

Мне также пришлось добавить ссылку на WindowsBase и добавить в проект внешние функции. Шаги и дополнительный код находятся в URL-адресе, на который я ссылаюсь в этом посте. Вот как добавить ссылку на WindowsBase, чтобы использовать System.Windows.Interop; работать:

  1. Щелкните правой кнопкой мыши проект
  2. Выделите «Добавить» и нажмите «Ссылка».
  3. Убедитесь, что вы выбрали Framework в разделе «Сборки».
  4. Прокрутите вниз и проверьте «WindowsBase» и нажмите «ОК».
  5. Добавить с помощью System.Windows.Interop; в верхней части вашего кода и все готово
person fac7orx    schedule 23.12.2013