C#关闭最大化键盘会切断程序

C#关闭最大化键盘会切断程序,c#,windows-8,keyboard,lostfocus,C#,Windows 8,Keyboard,Lostfocus,我设法在Windows8中找到了一个键盘,当我点击一个新的弹出形式的数字上下框时,它会显示出来。不幸的是,在“失去焦点”时关闭键盘后,窗口会失真,在关闭弹出窗口之前不会显示整个程序 //Close keyboard void CopiedNudPass_LostFocus(object sender, EventArgs e) { Version win8version = new Version(6, 2, 9200, 0); if (Environment.OSVersi

我设法在Windows8中找到了一个键盘,当我点击一个新的弹出形式的数字上下框时,它会显示出来。不幸的是,在“失去焦点”时关闭键盘后,窗口会失真,在关闭弹出窗口之前不会显示整个程序

//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();
    }
}

因此,基本上,当从当前打开的窗体关闭键盘时,我需要刷新背景窗口。任何建议都将不胜感激。谢谢。

我在这里找到了解决方案:

以下是我的新关闭代码:

//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获取;工作:

  • 右键单击项目
  • 突出显示“添加”,然后单击“引用”
  • 确保在程序集下选择了框架
  • 向下滚动并签入“WindowsBase”,然后点击ok
  • 使用System.Windows.Interop添加;在代码的顶部,完成了