对于杀人TabletKeyboard(TabTip.exe)应用程序的过程中不带回到原来的大小在WP

2019-09-03 22:24发布

我有它运行在Windows 8的平板电脑WPF应用程序。 而为了使键盘打字时,重点是在任何TextBox

我调用过程TabTip.exe显示键盘,而当显示的键盘我的应用程序收缩。 而所有操作之后,有一个保存按钮。 当我点击保存按钮,键盘应该会消失,我的应用程序应该回到它原来的大小。

我杀的过程TabTip.exe关闭键盘,但应用程序不会得到重新调整大小到原来的大小。

我试过了:

if (process.ProcessName == "TabTip")
{
    Application.Current.MainWindow.VerticalAlignment = VerticalAlignment.Stretch;
    process.Kill();
    Application.Current.MainWindow.Height = SystemParameters.WorkArea.Height;
    Application.Current.MainWindow.Width = SystemParameters.WorkArea.Width;
    Application.Current.MainWindow.WindowState = WindowState.Normal;
    Application.Current.MainWindow.WindowState = WindowState.Maximized;
    break;
} 

有谁知道杀TabTip.exe后恢复应用到原来的大小?

Answer 1:

Windows 8的键盘有一些渲染的问题。 这些可以通过启动在其较小模式的键盘(相当于撞击最小化按钮)来减轻。 它起着与WPF更好的话,实际上是最小化和当进程启动和关闭的扩大。

这需要在启动此模式的过程中,和关闭它在一个更好的方式比你正在做的事情

包括这些库:

using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Interop;

并定义这个外部函数:

[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(String sClassName, String sAppName);

打开键盘:

public static void openKeyboard()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        myProcess = Process.Start(startInfo);
    }

与关闭它:

public static void closeKeyboard()
    {
        uint WM_SYSCOMMAND = 274;
        uint SC_CLOSE = 61536;
        IntPtr KeyboardWnd = FindWindow("IPTip_Main_Window", null);
        PostMessage(KeyboardWnd.ToInt32(), WM_SYSCOMMAND, (int)SC_CLOSE, 0);
    }

这会给你的屏幕键盘,你可以得到最好的表现的Windows 8。 运气好的话,这将解决您的渲染问题。



Answer 2:

阿斌 - 你问起关闭键盘窗口,而不是杀死进程。 这就是我在做的一个WPF应用程序,并通过关闭窗口,我的主要应用程序的窗口将调整预期。 一个快速的控制台应用程序演示隐藏键盘在这里(注意,这里假设你正在使用的键盘坞模式,而不是浮动最小的模式):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace TabTipTest
{
    class Program
    {
        [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(String sClassName, String sAppName);

        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

        /// <summary>
        /// The command for a user choosing a command from the Window menu (see http://msdn.microsoft.com/en-gb/library/windows/desktop/ms646360(v=vs.85).aspx).
        /// </summary>
        public const int WM_SYSCOMMAND = 0x0112;

        /// <summary>
        /// Closes the window.
        /// </summary>
        public const int SC_CLOSE = 0xF060;

        static void Main(string[] args)
        {
            HideKeyboard();
        }

        /// <summary>
        /// Gets the window handler for the virtual keyboard.
        /// </summary>
        /// <returns>The handle.</returns>
        public static IntPtr GetKeyboardWindowHandle()
        {
            return FindWindow("IPTip_Main_Window", null);
        }

        /// <summary>
        /// Hides the keyboard by sending the window the close command.
        /// </summary>
        public static void HideKeyboard()
        {
            IntPtr keyboardHandle = GetKeyboardWindowHandle();

            if (keyboardHandle != IntPtr.Zero)
            {
                SendMessage(keyboardHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
            }
        }
    }
}


文章来源: After killing the process for TabletKeyboard(TabTip.exe) application doesn't bring back to its original size in wpf